mirror of
				https://github.com/AlexandreRouma/SDRPlusPlus.git
				synced 2025-10-31 00:48:11 +01:00 
			
		
		
		
	Merge branch 'master' of https://github.com/AlexandreRouma/SDRPlusPlus
This commit is contained in:
		| @@ -36,19 +36,22 @@ namespace sdrpp_credits { | ||||
|  | ||||
|     const char* patrons[] = { | ||||
|         "Bob Logan", | ||||
|         "Christian Häusler", | ||||
|         "Croccydile", | ||||
|         "Dale L Puckett (K0HYD)", | ||||
|         "Daniele D'Agnelli", | ||||
|         "EB3FRN", | ||||
|         "Eric Johnson", | ||||
|         "Flinger Films", | ||||
|         "W4IPA", | ||||
|         "Kezza", | ||||
|         "Lee Donaghy", | ||||
|         ".lozenge. (Hank Hill)", | ||||
|         "ON4MU", | ||||
|         "Passion-Radio.com", | ||||
|         "Scanner School", | ||||
|         "SignalsEverywhere", | ||||
|         "Syne Ardwin (WI9SYN)" | ||||
|         "Syne Ardwin (WI9SYN)", | ||||
|         "W4IPA" | ||||
|     }; | ||||
|  | ||||
|     const int contributorCount = sizeof(contributors) / sizeof(char*); | ||||
|   | ||||
| @@ -27,7 +27,7 @@ ModuleManager::Module_t ModuleManager::loadModule(std::string path) { | ||||
|     mod.deleteInstance = (void(*)(Instance*))GetProcAddress(mod.handle, "_DELETE_INSTANCE_"); | ||||
|     mod.end = (void(*)())GetProcAddress(mod.handle, "_END_"); | ||||
| #else | ||||
|     mod.handle = dlopen(path.c_str(), RTLD_LAZY); | ||||
|     mod.handle = dlopen(path.c_str(), RTLD_LAZY | RTLD_LOCAL); | ||||
|     if (mod.handle == NULL) { | ||||
|         spdlog::error("Couldn't load {0}.", path); | ||||
|         mod.handle = NULL; | ||||
|   | ||||
| @@ -222,7 +222,7 @@ private: | ||||
|             ImGui::EndTable(); | ||||
|         } | ||||
|  | ||||
|         if (ImGui::Checkbox(CONCAT("Show Reference TEST Lines##m17_showlines_", _this->name), &_this->showLines)) { | ||||
|         if (ImGui::Checkbox(CONCAT("Show Reference Lines##m17_showlines_", _this->name), &_this->showLines)) { | ||||
|             if (_this->showLines) { | ||||
|                 _this->diag.lines.push_back(-0.75f); | ||||
|                 _this->diag.lines.push_back(-0.25f); | ||||
| @@ -312,4 +312,4 @@ MOD_EXPORT void _DELETE_INSTANCE_(void* instance) { | ||||
| MOD_EXPORT void _END_() { | ||||
|     config.disableAutoSave(); | ||||
|     config.save(); | ||||
| } | ||||
| } | ||||
|   | ||||
							
								
								
									
										52
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								readme.md
									
									
									
									
									
								
							| @@ -50,7 +50,50 @@ There are currently no existing packages for other distributions, for these syst | ||||
|  | ||||
| ## MacOS | ||||
|  | ||||
| TODO | ||||
| You might get lucky by using the installer downloadable from [the Releases page](https://github.com/AlexandreRouma/SDRPlusPlus/releases). | ||||
|  | ||||
| ### Building it yourself | ||||
|  | ||||
| This guide requires you to have Homebrew installed. Check out https://brew.sh/ on how to do so. | ||||
|  | ||||
| Get yourself a copy of the source code. This can be done by downloading the | ||||
| source package from [the Releases | ||||
| page](https://github.com/AlexandreRouma/SDRPlusPlus/releases). Eextract it to a | ||||
| location of your choice. Alternativley you can clone | ||||
| https://github.com/AlexandreRouma/SDRPlusPlus.git using git. | ||||
|  | ||||
| ```sh | ||||
| brew install \ | ||||
|   airspy \ | ||||
|   airspyhf \ | ||||
|   cmake \ | ||||
|   codec2 \ | ||||
|   fftw \ | ||||
|   glew \ | ||||
|   glfw \ | ||||
|   hackrf \ | ||||
|   libbladerf \ | ||||
|   librtlsdr \ | ||||
|   portaudio \ | ||||
|   rtl-sdr \ | ||||
|   soapyrtlsdr \ | ||||
|   volk | ||||
| mkdir build | ||||
| cd build | ||||
| cmake .. \ | ||||
|   -DOPT_BUILD_AUDIO_SINK=OFF \ | ||||
|   -DOPT_BUILD_BLADERF_SOURCE=OFF \ | ||||
|   -DOPT_BUILD_M17_DECODER=ON \ | ||||
|   -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON \ | ||||
|   -DOPT_BUILD_PLUTOSDR_SOURCE=OFF \ | ||||
|   -DOPT_BUILD_PORTAUDIO_SINK=ON \ | ||||
|   -DOPT_BUILD_SOAPY_SOURCE=OFF | ||||
| make -j$(sysctl -n hw.ncpu) | ||||
| ``` | ||||
|  | ||||
| The above was tested on macOS Big Sur (11.5). | ||||
|  | ||||
| Check `jobs.build_macos` in the [build_all.yaml](https://github.com/AlexandreRouma/SDRPlusPlus/blob/master/.github/workflows/build_all.yml) workflow for the exact options used for building the package available in the [releases](https://github.com/AlexandreRouma/SDRPlusPlus/releases/tag/1.0.3) | ||||
|  | ||||
| ## BSD | ||||
|  | ||||
| @@ -297,7 +340,7 @@ Modules in beta are still included in releases for the most part but not enabled | ||||
| | Name                | Stage      | Dependencies | Option                        | Built by default| Built in Release | Enabled in SDR++ by default | | ||||
| |---------------------|------------|--------------|-------------------------------|:---------------:|:----------------:|:---------------------------:| | ||||
| | falcon9_decoder     | Unfinished | ffplay       | OPT_BUILD_FALCON9_DECODER     | ⛔              | ⛔              | ⛔                         | | ||||
| | m17_decoder         | Unfinished | -            | OPT_BUILD_M17_DECODER         | ⛔              | ⛔              | ⛔                         | | ||||
| | m17_decoder         | Beta       | -            | OPT_BUILD_M17_DECODER         | ⛔              | ✅              | ⛔                         | | ||||
| | meteor_demodulator  | Working    | -            | OPT_BUILD_METEOR_DEMODULATOR  | ✅              | ✅              | ⛔                         | | ||||
| | radio               | Working    | -            | OPT_BUILD_RADIO               | ✅              | ✅              | ✅                         | | ||||
| | weather_sat_decoder | Unfinished | -            | OPT_BUILD_WEATHER_SAT_DECODER | ⛔              | ⛔              | ⛔                         | | ||||
| @@ -357,19 +400,22 @@ I will soon publish a contributing.md listing the code style to use. | ||||
| ## Patrons | ||||
|  | ||||
| * Bob Logan | ||||
| * [Christian Häusler](https://github.com/corvus-ch) | ||||
| * Croccydile | ||||
| * Dale L Puckett (K0HYD) | ||||
| * [Daniele D'Agnelli](https://linkedin.com/in/dagnelli) | ||||
| * [EB3FRN](https://www.eb3frn.net/) | ||||
| * Eric Johnson | ||||
| * Flinger Films | ||||
| * [W4IPA](https://twitter.com/W4IPAstroke5) | ||||
| * Kezza | ||||
| * Lee Donaghy | ||||
| * .lozenge. (Hank Hill) | ||||
| * ON4MU | ||||
| * [Passion-Radio.com](https://passion-radio.com/) | ||||
| * [Scanner School](https://scannerschool.com/) | ||||
| * [SignalsEverywhere](https://signalseverywhere.com/) | ||||
| * Syne Ardwin (WI9SYN) | ||||
| * [W4IPA](https://twitter.com/W4IPAstroke5) | ||||
|  | ||||
| ## Contributors | ||||
|  | ||||
|   | ||||
							
								
								
									
										59
									
								
								root/res/themes/army green.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								root/res/themes/army green.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| { | ||||
|     "name": "Army Green", | ||||
|     "author": "PD0SWL", | ||||
|     "Border": "#6D6D7F7F", | ||||
|     "BorderShadow": "#00000000", | ||||
|     "Button": "#70707066", | ||||
|     "ButtonActive": "#40020066", | ||||
|     "ButtonHovered": "#70707072", | ||||
|     "CheckMark": "#3D84E0FF", | ||||
|     "ChildBg": "#FFFFFF00", | ||||
|     "DragDropTarget": "#FFFF00E5", | ||||
|     "FrameBg": "#4A4A4A89", | ||||
|     "FrameBgActive": "#40020089", | ||||
|     "FrameBgHovered": "#0F0F1089", | ||||
|     "Header": "#A0A0B24F", | ||||
|     "HeaderActive": "#A0A0B24F", | ||||
|     "HeaderHovered": "#A0A0B266", | ||||
|     "MenuBarBg": "#232323FF", | ||||
|     "ModalWindowDimBg": "#00000080", | ||||
|     "NavHighlight": "#999999FF", | ||||
|     "NavWindowingDimBg": "#CCCCCC33", | ||||
|     "NavWindowingHighlight": "#FFFFFFB2", | ||||
|     "PlotHistogram": "#BA9926FF", | ||||
|     "PlotHistogramHovered": "#FF9900FF", | ||||
|     "PlotLines": "#B1D7F2FF", | ||||
|     "PlotLinesHovered": "#FF6D59FF", | ||||
|     "PopupBg": "#141414EF", | ||||
|     "ResizeGrip": "#E8E8E83F", | ||||
|     "ResizeGripActive": "#757575F2", | ||||
|     "ResizeGripHovered": "#CECECEAA", | ||||
|     "ScrollbarBg": "#05050587", | ||||
|     "ScrollbarGrab": "#4F4F4FFF", | ||||
|     "ScrollbarGrabActive": "#828282FF", | ||||
|     "ScrollbarGrabHovered": "#686868FF", | ||||
|     "Separator": "#6D6D7F7F", | ||||
|     "SeparatorActive": "#828282FF", | ||||
|     "SeparatorHovered": "#B7B7B7C6", | ||||
|     "SliderGrab": "#3D84E0FF", | ||||
|     "SliderGrabActive": "#9d0c05FF", | ||||
|     "Tab": "#2D5993DB", | ||||
|     "TabActive": "#3268ADFF", | ||||
|     "TabHovered": "#4296F9CC", | ||||
|     "TabUnfocused": "#111A25F7", | ||||
|     "TabUnfocusedActive": "#22426CFF", | ||||
|     "TableBorderLight": "#3A3A3FFF", | ||||
|     "TableBorderStrong": "#4F4F59FF", | ||||
|     "TableHeaderBg": "#303033FF", | ||||
|     "TableRowBg": "#00000000", | ||||
|     "TableRowBgAlt": "#FFFFFF0F", | ||||
|     "Text": "#FFFFFFFF", | ||||
|     "TextDisabled": "#7F7F7FFF", | ||||
|     "TextSelectedBg": "#DDDDDD59", | ||||
|     "TitleBg": "#0A0A0AFF", | ||||
|     "TitleBgActive": "#494949FF", | ||||
|     "TitleBgCollapsed": "#00000082", | ||||
|     "WindowBg": "#0F0F0FEF", | ||||
|     "ClearColor": "#121703FF", | ||||
|     "WaterfallBackground": "#000000FF" | ||||
| } | ||||
							
								
								
									
										59
									
								
								root/res/themes/deep blue.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								root/res/themes/deep blue.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| { | ||||
|     "name": "Deep Blue", | ||||
|     "author": "PD0SWL", | ||||
|     "Border": "#6D6D7F7F", | ||||
|     "BorderShadow": "#00000000", | ||||
|     "Button": "#70707066", | ||||
|     "ButtonActive": "#40020066", | ||||
|     "ButtonHovered": "#70707072", | ||||
|     "CheckMark": "#3D84E0FF", | ||||
|     "ChildBg": "#FFFFFF00", | ||||
|     "DragDropTarget": "#FFFF00E5", | ||||
|     "FrameBg": "#4A4A4A89", | ||||
|     "FrameBgActive": "#40020089", | ||||
|     "FrameBgHovered": "#0F0F1089", | ||||
|     "Header": "#A0A0B24F", | ||||
|     "HeaderActive": "#A0A0B24F", | ||||
|     "HeaderHovered": "#A0A0B266", | ||||
|     "MenuBarBg": "#232323FF", | ||||
|     "ModalWindowDimBg": "#00000080", | ||||
|     "NavHighlight": "#999999FF", | ||||
|     "NavWindowingDimBg": "#CCCCCC33", | ||||
|     "NavWindowingHighlight": "#FFFFFFB2", | ||||
|     "PlotHistogram": "#BA9926FF", | ||||
|     "PlotHistogramHovered": "#FF9900FF", | ||||
|     "PlotLines": "#B1D7F2FF", | ||||
|     "PlotLinesHovered": "#FF6D59FF", | ||||
|     "PopupBg": "#141414EF", | ||||
|     "ResizeGrip": "#E8E8E83F", | ||||
|     "ResizeGripActive": "#757575F2", | ||||
|     "ResizeGripHovered": "#CECECEAA", | ||||
|     "ScrollbarBg": "#05050587", | ||||
|     "ScrollbarGrab": "#4F4F4FFF", | ||||
|     "ScrollbarGrabActive": "#828282FF", | ||||
|     "ScrollbarGrabHovered": "#686868FF", | ||||
|     "Separator": "#6D6D7F7F", | ||||
|     "SeparatorActive": "#828282FF", | ||||
|     "SeparatorHovered": "#B7B7B7C6", | ||||
|     "SliderGrab": "#3D84E0FF", | ||||
|     "SliderGrabActive": "#9d0c05FF", | ||||
|     "Tab": "#2D5993DB", | ||||
|     "TabActive": "#3268ADFF", | ||||
|     "TabHovered": "#4296F9CC", | ||||
|     "TabUnfocused": "#111A25F7", | ||||
|     "TabUnfocusedActive": "#22426CFF", | ||||
|     "TableBorderLight": "#3A3A3FFF", | ||||
|     "TableBorderStrong": "#4F4F59FF", | ||||
|     "TableHeaderBg": "#303033FF", | ||||
|     "TableRowBg": "#00000000", | ||||
|     "TableRowBgAlt": "#FFFFFF0F", | ||||
|     "Text": "#FFFFFFFF", | ||||
|     "TextDisabled": "#7F7F7FFF", | ||||
|     "TextSelectedBg": "#DDDDDD59", | ||||
|     "TitleBg": "#0A0A0AFF", | ||||
|     "TitleBgActive": "#494949FF", | ||||
|     "TitleBgCollapsed": "#00000082", | ||||
|     "WindowBg": "#0F0F0FEF", | ||||
|     "ClearColor": "#0C182EFF", | ||||
|     "WaterfallBackground": "#000000FF" | ||||
| } | ||||
| @@ -46,9 +46,9 @@ const int streamFormatsBitCount[] = { | ||||
|  | ||||
| ConfigManager config; | ||||
|  | ||||
| class AirspyHFSourceModule : public ModuleManager::Instance { | ||||
| class SpyServerSourceModule : public ModuleManager::Instance { | ||||
| public: | ||||
|     AirspyHFSourceModule(std::string name) { | ||||
|     SpyServerSourceModule(std::string name) { | ||||
|         this->name = name; | ||||
|  | ||||
|         config.acquire(); | ||||
| @@ -70,7 +70,7 @@ public: | ||||
|         sigpath::sourceManager.registerSource("SpyServer", &handler); | ||||
|     } | ||||
|  | ||||
|     ~AirspyHFSourceModule() { | ||||
|     ~SpyServerSourceModule() { | ||||
|         stop(this); | ||||
|         sigpath::sourceManager.unregisterSource("SpyServer"); | ||||
|     } | ||||
| @@ -105,20 +105,20 @@ private: | ||||
|     } | ||||
|  | ||||
|     static void menuSelected(void* ctx) { | ||||
|         AirspyHFSourceModule* _this = (AirspyHFSourceModule*)ctx; | ||||
|         SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; | ||||
|         core::setInputSampleRate(_this->sampleRate); | ||||
|         gui::mainWindow.playButtonLocked = !(_this->client && _this->client->isOpen()); | ||||
|         spdlog::info("AirspyHFSourceModule '{0}': Menu Select!", _this->name); | ||||
|         spdlog::info("SpyServerSourceModule '{0}': Menu Select!", _this->name); | ||||
|     } | ||||
|  | ||||
|     static void menuDeselected(void* ctx) { | ||||
|         AirspyHFSourceModule* _this = (AirspyHFSourceModule*)ctx; | ||||
|         SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; | ||||
|         gui::mainWindow.playButtonLocked = false; | ||||
|         spdlog::info("AirspyHFSourceModule '{0}': Menu Deselect!", _this->name); | ||||
|         spdlog::info("SpyServerSourceModule '{0}': Menu Deselect!", _this->name); | ||||
|     } | ||||
|      | ||||
|     static void start(void* ctx) { | ||||
|         AirspyHFSourceModule* _this = (AirspyHFSourceModule*)ctx; | ||||
|         SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; | ||||
|         if (_this->running) { return; } | ||||
|  | ||||
|         int srvBits = streamFormatsBitCount[_this->iqType]; | ||||
| @@ -131,30 +131,30 @@ private: | ||||
|         _this->client->startStream(); | ||||
|  | ||||
|         _this->running = true; | ||||
|         spdlog::info("AirspyHFSourceModule '{0}': Start!", _this->name); | ||||
|         spdlog::info("SpyServerSourceModule '{0}': Start!", _this->name); | ||||
|     } | ||||
|      | ||||
|     static void stop(void* ctx) { | ||||
|         AirspyHFSourceModule* _this = (AirspyHFSourceModule*)ctx; | ||||
|         SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; | ||||
|         if (!_this->running) { return; } | ||||
|          | ||||
|         _this->client->stopStream(); | ||||
|  | ||||
|         _this->running = false; | ||||
|         spdlog::info("AirspyHFSourceModule '{0}': Stop!", _this->name); | ||||
|         spdlog::info("SpyServerSourceModule '{0}': Stop!", _this->name); | ||||
|     } | ||||
|      | ||||
|     static void tune(double freq, void* ctx) { | ||||
|         AirspyHFSourceModule* _this = (AirspyHFSourceModule*)ctx; | ||||
|         SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; | ||||
|         if (_this->running) { | ||||
|             _this->client->setSetting(SPYSERVER_SETTING_IQ_FREQUENCY, freq); | ||||
|         } | ||||
|         _this->freq = freq; | ||||
|         spdlog::info("AirspyHFSourceModule '{0}': Tune: {1}!", _this->name, freq); | ||||
|         spdlog::info("SpyServerSourceModule '{0}': Tune: {1}!", _this->name, freq); | ||||
|     } | ||||
|      | ||||
|     static void menuHandler(void* ctx) { | ||||
|         AirspyHFSourceModule* _this = (AirspyHFSourceModule*)ctx; | ||||
|         SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; | ||||
|         float menuWidth = ImGui::GetContentRegionAvailWidth(); | ||||
|  | ||||
|         bool connected = (_this->client && _this->client->isOpen()); | ||||
| @@ -321,11 +321,11 @@ MOD_EXPORT void _INIT_() { | ||||
| } | ||||
|  | ||||
| MOD_EXPORT ModuleManager::Instance* _CREATE_INSTANCE_(std::string name) { | ||||
|     return new AirspyHFSourceModule(name); | ||||
|     return new SpyServerSourceModule(name); | ||||
| } | ||||
|  | ||||
| MOD_EXPORT void _DELETE_INSTANCE_(ModuleManager::Instance* instance) { | ||||
|     delete (AirspyHFSourceModule*)instance; | ||||
|     delete (SpyServerSourceModule*)instance; | ||||
| } | ||||
|  | ||||
| MOD_EXPORT void _END_() { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user