1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-15 12:51:49 -05:00

BladeRF: fixed devices build and add BladeRF2 device

This commit is contained in:
f4exb 2018-09-22 02:55:40 +02:00
parent d118ad2558
commit 57ef3a0567
7 changed files with 182 additions and 23 deletions

View File

@ -38,7 +38,7 @@ Since version 2 SDRangel can integrate more than one hardware device running con
Since version 3 transmission or signal generation is supported for BladeRF, HackRF (since version 3.1), LimeSDR (since version 3.4) and PlutoSDR (since version 3.7.8) using a sample sink plugin. These plugins are: Since version 3 transmission or signal generation is supported for BladeRF, HackRF (since version 3.1), LimeSDR (since version 3.4) and PlutoSDR (since version 3.7.8) using a sample sink plugin. These plugins are:
- [BladeRF output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/bladerfoutput) - [BladeRF output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/bladerf1output)
- [HackRF output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/hackrfoutput) - [HackRF output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/hackrfoutput)
- [LimeSDR output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/limesdroutput) - [LimeSDR output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/limesdroutput)
- [PlutoSDR output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/plutosdroutput) - [PlutoSDR output plugin](https://github.com/f4exb/sdrangel/tree/dev/plugins/samplesink/plutosdroutput)
@ -55,7 +55,7 @@ Since version 4 the `sdrangelsrv` binary launches a server mode SDRangel instanc
<h2>Detached RF head server (SDRdaemon)</h2> <h2>Detached RF head server (SDRdaemon)</h2>
Since version 4.1 the previously separated project SDRdaemon has been modified and included in SDRangel. Another binary `sdrdaemonsrv` is provided for handling just the RF part of the SDRangel processing chain. The baseband samples are comunicated via UDP to/from a SDRangel instance. More details are provided in the server instance documentation in the `sdrdaemon` folder. Since version 4.1 the previously separated project SDRdaemon has been modified and included in SDRangel. The `sdrangelsrv` headless variant can be used for this purpose using the Daemon source or sink channels.
<h1>Notes on pulseaudio setup</h1> <h1>Notes on pulseaudio setup</h1>

View File

@ -4,6 +4,7 @@ find_package(LibUSB)
if (BUILD_DEBIAN) if (BUILD_DEBIAN)
add_subdirectory(bladerf1) add_subdirectory(bladerf1)
add_subdirectory(bladerf2)
add_subdirectory(hackrf) add_subdirectory(hackrf)
add_subdirectory(limesdr) add_subdirectory(limesdr)
add_subdirectory(perseus) add_subdirectory(perseus)
@ -12,6 +13,7 @@ else(BUILD_DEBIAN)
find_package(LibBLADERF) find_package(LibBLADERF)
if(LIBUSB_FOUND AND LIBBLADERF_FOUND) if(LIBUSB_FOUND AND LIBBLADERF_FOUND)
add_subdirectory(bladerf1) add_subdirectory(bladerf1)
add_subdirectory(bladerf2)
endif(LIBUSB_FOUND AND LIBBLADERF_FOUND) endif(LIBUSB_FOUND AND LIBBLADERF_FOUND)
find_package(LibHACKRF) find_package(LibHACKRF)
@ -33,5 +35,4 @@ else(BUILD_DEBIAN)
if(LIBUSB_FOUND AND LIBPERSEUS_FOUND) if(LIBUSB_FOUND AND LIBPERSEUS_FOUND)
add_subdirectory(perseus) add_subdirectory(perseus)
endif() endif()
endif (BUILD_DEBIAN) endif (BUILD_DEBIAN)

View File

@ -0,0 +1,45 @@
project(bladerf2device)
set(bladerf2device_SOURCES
devicebladerf2.cpp
)
set(bladerf2device_HEADERS
devicebladerf2.h
)
if (BUILD_DEBIAN)
include_directories(
.
${CMAKE_CURRENT_BINARY_DIR}
${LIBBLADERFLIBSRC}/include
${LIBBLADERFLIBSRC}/src
)
else (BUILD_DEBIAN)
include_directories(
.
${CMAKE_CURRENT_BINARY_DIR}
${LIBBLADERF_INCLUDE_DIR}
)
endif (BUILD_DEBIAN)
#add_definitions(${QT_DEFINITIONS})
#add_definitions(-DQT_SHARED)
add_library(bladerf2device SHARED
${bladerf1device_SOURCES}
)
if (BUILD_DEBIAN)
target_link_libraries(bladerf2device
bladerf
sdrbase
)
else (BUILD_DEBIAN)
target_link_libraries(bladerf2device
${LIBBLADERF_LIBRARIES}
sdrbase
)
endif (BUILD_DEBIAN)
install(TARGETS bladerf2device DESTINATION lib)

View File

@ -0,0 +1,90 @@
///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2016-2017 Edouard Griffiths, F4EXB //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation as version 3 of the License, or //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License V3 for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
///////////////////////////////////////////////////////////////////////////////////
#include "devicebladerf2.h"
#include <QtGlobal>
#include <cstdio>
#include <cstring>
bool DeviceBladeRF2::open_bladerf(struct bladerf **dev, const char *serial)
{
int fpga_loaded;
if ((*dev = open_bladerf_from_serial(serial)) == 0)
{
qCritical("DeviceBladeRF2::open_bladerf: could not open BladeRF");
return false;
}
fpga_loaded = bladerf_is_fpga_configured(*dev);
if (fpga_loaded < 0)
{
qCritical("DeviceBladeRF2::open_bladerf: failed to check FPGA state: %s",
bladerf_strerror(fpga_loaded));
return false;
}
else if (fpga_loaded == 0)
{
qCritical("DeviceBladeRF2::start: the device's FPGA is not loaded.");
return false;
}
return true;
}
struct bladerf *DeviceBladeRF2::open_bladerf_from_serial(const char *serial)
{
int status;
struct bladerf *dev;
struct bladerf_devinfo info;
/* Initialize all fields to "don't care" wildcard values.
*
* Immediately passing this to bladerf_open_with_devinfo() would cause
* libbladeRF to open any device on any available backend. */
bladerf_init_devinfo(&info);
/* Specify the desired device's serial number, while leaving all other
* fields in the info structure wildcard values */
if (serial != 0)
{
strncpy(info.serial, serial, BLADERF_SERIAL_LENGTH - 1);
info.serial[BLADERF_SERIAL_LENGTH - 1] = '\0';
}
status = bladerf_open_with_devinfo(&dev, &info);
if (status == BLADERF_ERR_NODEV)
{
qCritical("DeviceBladeRF2::open_bladerf_from_serial: No devices available with serial %s", serial);
return 0;
}
else if (status != 0)
{
qCritical("DeviceBladeRF2::open_bladerf_from_serial: Failed to open device with serial %s (%s)",
serial, bladerf_strerror(status));
return 0;
}
else
{
return dev;
}
}

View File

@ -0,0 +1,35 @@
///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2018 Edouard Griffiths, F4EXB //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation as version 3 of the License, or //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License V3 for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
///////////////////////////////////////////////////////////////////////////////////
#ifndef DEVICES_BLADERF2_DEVICEBLADERF2_H_
#define DEVICES_BLADERF2_DEVICEBLADERF2_H_
#include <libbladeRF.h>
#include "export.h"
class DEVICES_API DeviceBladeRF2
{
public:
static bool open_bladerf(struct bladerf **dev, const char *serial);
private:
static struct bladerf *open_bladerf_from_serial(const char *serial);
};
#endif /* DEVICES_BLADERF2_DEVICEBLADERF2_H_ */

View File

@ -18,8 +18,6 @@ QMAKE_CXXFLAGS += -msse4.1
QMAKE_CXXFLAGS += -std=c++11 QMAKE_CXXFLAGS += -std=c++11
macx:QMAKE_LFLAGS += -F/Library/Frameworks macx:QMAKE_LFLAGS += -F/Library/Frameworks
CONFIG(MINGW32):LIBBLADERFSRC = "C:\softs\bladeRF\host\libraries\libbladeRF\include"
CONFIG(MINGW64):LIBBLADERFSRC = "C:\softs\bladeRF\host\libraries\libbladeRF\include"
CONFIG(macx):LIBHACKRFSRC = "/opt/local/include" CONFIG(macx):LIBHACKRFSRC = "/opt/local/include"
CONFIG(MINGW32):LIBHACKRFSRC = "C:\softs\hackrf\host" CONFIG(MINGW32):LIBHACKRFSRC = "C:\softs\hackrf\host"
CONFIG(MINGW64):LIBHACKRFSRC = "C:\softs\hackrf\host" CONFIG(MINGW64):LIBHACKRFSRC = "C:\softs\hackrf\host"
@ -34,7 +32,6 @@ CONFIG(MINGW64):LIBIIOSRC = "C:\softs\libiio"
INCLUDEPATH += $$PWD INCLUDEPATH += $$PWD
INCLUDEPATH += ../exports INCLUDEPATH += ../exports
INCLUDEPATH += ../sdrbase INCLUDEPATH += ../sdrbase
INCLUDEPATH += $$LIBBLADERFSRC
INCLUDEPATH += $$LIBHACKRFSRC INCLUDEPATH += $$LIBHACKRFSRC
INCLUDEPATH += "C:\softs\boost_1_66_0" INCLUDEPATH += "C:\softs\boost_1_66_0"
INCLUDEPATH += "C:\softs\libusb-1.0.20\include" INCLUDEPATH += "C:\softs\libusb-1.0.20\include"
@ -55,10 +52,6 @@ INCLUDEPATH += $$LIBPERSEUSSRC
CONFIG(Release):build_subdir = release CONFIG(Release):build_subdir = release
CONFIG(Debug):build_subdir = debug CONFIG(Debug):build_subdir = debug
!macx:SOURCES += bladerf/devicebladerf.cpp\
bladerf/devicebladerfvalues.cpp\
bladerf/devicebladerfshared.cpp
SOURCES += hackrf/devicehackrf.cpp\ SOURCES += hackrf/devicehackrf.cpp\
hackrf/devicehackrfvalues.cpp\ hackrf/devicehackrfvalues.cpp\
hackrf/devicehackrfshared.cpp hackrf/devicehackrfshared.cpp
@ -73,11 +66,6 @@ SOURCES += limesdr/devicelimesdr.cpp\
plutosdr/deviceplutosdrscan.cpp\ plutosdr/deviceplutosdrscan.cpp\
plutosdr/deviceplutosdrshared.cpp plutosdr/deviceplutosdrshared.cpp
!macx:HEADERS -= bladerf/devicebladerf.h\
bladerf/devicebladerfparam.h\
bladerf/devicebladerfvalues.h\
bladerf/devicebladerfshared.h
HEADERS += hackrf/devicehackrf.h\ HEADERS += hackrf/devicehackrf.h\
hackrf/devicehackrfparam.h\ hackrf/devicehackrfparam.h\
hackrf/devicehackrfvalues.h\ hackrf/devicehackrfvalues.h\
@ -95,7 +83,6 @@ HEADERS += plutosdr/deviceplutosdr.h\
LIBS += -L../sdrbase/$${build_subdir} -lsdrbase LIBS += -L../sdrbase/$${build_subdir} -lsdrbase
!macx { !macx {
LIBS += -L../libbladerf/$${build_subdir} -llibbladerf
LIBS += -L../libhackrf/$${build_subdir} -llibhackrf LIBS += -L../libhackrf/$${build_subdir} -llibhackrf
LIBS += -L../liblimesuite/$${build_subdir} -lliblimesuite LIBS += -L../liblimesuite/$${build_subdir} -lliblimesuite
LIBS += -L../libiio/$${build_subdir} -llibiio LIBS += -L../libiio/$${build_subdir} -llibiio

View File

@ -2,21 +2,22 @@
This folder contains classes and methods that can be used by different plugins that work with a common physical device or via network. Thus this can be one of the following devices: This folder contains classes and methods that can be used by different plugins that work with a common physical device or via network. Thus this can be one of the following devices:
- BladeRF: one Rx and one Tx full duplex. Plugins are: - BladeRF1: one Rx and one Tx full duplex. Plugins are:
- bladerfinput - bladerf1input
- bladerfoutput - bladerf1output
- BladeRF2: 2 Rx and 2 Tx full duplex (BladeRF 2.0 micro). Plugins are:
- bladerf2input
- bladerf2output
- HackRF: one Rx and one Tx half duplex. Plugins are: - HackRF: one Rx and one Tx half duplex. Plugins are:
- hackrfinput - hackrfinput
- hackrfoutput - hackrfoutput
- LimeSDR: 2 Rx and 2 Tx full duplex. Plugins are - LimeSDR: 2 Rx and 2 Tx full duplex (Lime-USB). 1 Rx and 1 Tx full duplex (Lime-Mini). Plugins are
- limesdrinput - limesdrinput
- limesdroutput - limesdroutput
- PlutoSDR: one Rx and one Tx full duplex. Plugins are - PlutoSDR: one Rx and one Tx full duplex. Plugins are
- plutosdrinput - plutosdrinput
- plutosdroutput - plutosdroutput
- SDRdaemon: sends or receive samples to/from device remotely through the network. Used on the Tx plugin only
- sdrdaemonsink