mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-30 20:40:20 -04: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: | ||||
| 
 | ||||
|   - [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) | ||||
|   - [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) | ||||
| @ -55,7 +55,7 @@ Since version 4 the `sdrangelsrv` binary launches a server mode SDRangel instanc | ||||
| 
 | ||||
| <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> | ||||
| 
 | ||||
|  | ||||
| @ -4,6 +4,7 @@ find_package(LibUSB) | ||||
| 
 | ||||
| if (BUILD_DEBIAN) | ||||
|     add_subdirectory(bladerf1) | ||||
|     add_subdirectory(bladerf2) | ||||
|     add_subdirectory(hackrf) | ||||
|     add_subdirectory(limesdr) | ||||
|     add_subdirectory(perseus) | ||||
| @ -12,6 +13,7 @@ else(BUILD_DEBIAN) | ||||
|     find_package(LibBLADERF) | ||||
|     if(LIBUSB_FOUND AND LIBBLADERF_FOUND) | ||||
|         add_subdirectory(bladerf1) | ||||
|         add_subdirectory(bladerf2) | ||||
|     endif(LIBUSB_FOUND AND LIBBLADERF_FOUND) | ||||
| 
 | ||||
|     find_package(LibHACKRF) | ||||
| @ -33,5 +35,4 @@ else(BUILD_DEBIAN) | ||||
|     if(LIBUSB_FOUND AND LIBPERSEUS_FOUND) | ||||
|         add_subdirectory(perseus) | ||||
|     endif() | ||||
|      | ||||
| 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 | ||||
| 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(MINGW32):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 += ../exports | ||||
| INCLUDEPATH += ../sdrbase | ||||
| INCLUDEPATH += $$LIBBLADERFSRC | ||||
| INCLUDEPATH += $$LIBHACKRFSRC | ||||
| INCLUDEPATH += "C:\softs\boost_1_66_0" | ||||
| INCLUDEPATH += "C:\softs\libusb-1.0.20\include" | ||||
| @ -55,10 +52,6 @@ INCLUDEPATH += $$LIBPERSEUSSRC | ||||
| CONFIG(Release):build_subdir = release | ||||
| CONFIG(Debug):build_subdir = debug | ||||
| 
 | ||||
| !macx:SOURCES += bladerf/devicebladerf.cpp\ | ||||
|         bladerf/devicebladerfvalues.cpp\ | ||||
|         bladerf/devicebladerfshared.cpp | ||||
| 
 | ||||
| SOURCES += hackrf/devicehackrf.cpp\ | ||||
|         hackrf/devicehackrfvalues.cpp\ | ||||
|         hackrf/devicehackrfshared.cpp | ||||
| @ -73,11 +66,6 @@ SOURCES += limesdr/devicelimesdr.cpp\ | ||||
|         plutosdr/deviceplutosdrscan.cpp\ | ||||
|         plutosdr/deviceplutosdrshared.cpp | ||||
| 
 | ||||
| !macx:HEADERS -= bladerf/devicebladerf.h\ | ||||
|         bladerf/devicebladerfparam.h\ | ||||
|         bladerf/devicebladerfvalues.h\ | ||||
|         bladerf/devicebladerfshared.h | ||||
| 
 | ||||
| HEADERS  += hackrf/devicehackrf.h\ | ||||
|         hackrf/devicehackrfparam.h\ | ||||
|         hackrf/devicehackrfvalues.h\ | ||||
| @ -95,7 +83,6 @@ HEADERS += plutosdr/deviceplutosdr.h\ | ||||
| 
 | ||||
| LIBS += -L../sdrbase/$${build_subdir} -lsdrbase | ||||
| !macx { | ||||
|     LIBS += -L../libbladerf/$${build_subdir} -llibbladerf | ||||
|     LIBS += -L../libhackrf/$${build_subdir} -llibhackrf | ||||
|     LIBS += -L../liblimesuite/$${build_subdir} -lliblimesuite | ||||
|     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: | ||||
| 
 | ||||
|   - BladeRF: one Rx and one Tx full duplex. Plugins are: | ||||
|     - bladerfinput | ||||
|     - bladerfoutput | ||||
|   - BladeRF1: one Rx and one Tx full duplex. Plugins are: | ||||
|     - bladerf1input | ||||
|     - 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: | ||||
|     - hackrfinput | ||||
|     - 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 | ||||
|     - limesdroutput | ||||
|      | ||||
|   - PlutoSDR: one Rx and one Tx full duplex. Plugins are | ||||
|     - plutosdrinput | ||||
|     - plutosdroutput | ||||
| 
 | ||||
|   - SDRdaemon: sends or receive samples to/from device remotely through the network. Used on the Tx plugin only | ||||
|     - sdrdaemonsink  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user