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:
parent
d118ad2558
commit
57ef3a0567
@ -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>
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
45
devices/bladerf2/CMakeLists.txt
Normal file
45
devices/bladerf2/CMakeLists.txt
Normal 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)
|
90
devices/bladerf2/devicebladerf2.cpp
Normal file
90
devices/bladerf2/devicebladerf2.cpp
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
35
devices/bladerf2/devicebladerf2.h
Normal file
35
devices/bladerf2/devicebladerf2.h
Normal 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_ */
|
@ -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
|
||||||
|
@ -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
|
|
Loading…
Reference in New Issue
Block a user