diff --git a/core/src/credits.cpp b/core/src/credits.cpp index fc49afd6..1970d739 100644 --- a/core/src/credits.cpp +++ b/core/src/credits.cpp @@ -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*); diff --git a/core/src/module.cpp b/core/src/module.cpp index 2e46247c..255593a8 100644 --- a/core/src/module.cpp +++ b/core/src/module.cpp @@ -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; diff --git a/decoder_modules/m17_decoder/src/main.cpp b/decoder_modules/m17_decoder/src/main.cpp index 941db5c5..b833b7d3 100644 --- a/decoder_modules/m17_decoder/src/main.cpp +++ b/decoder_modules/m17_decoder/src/main.cpp @@ -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(); -} \ No newline at end of file +} diff --git a/readme.md b/readme.md index 8a633c57..8bf000e3 100644 --- a/readme.md +++ b/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 diff --git a/root/res/themes/army green.json b/root/res/themes/army green.json new file mode 100644 index 00000000..6a599880 --- /dev/null +++ b/root/res/themes/army green.json @@ -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" +} \ No newline at end of file diff --git a/root/res/themes/deep blue.json b/root/res/themes/deep blue.json new file mode 100644 index 00000000..cc03f748 --- /dev/null +++ b/root/res/themes/deep blue.json @@ -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" +} \ No newline at end of file diff --git a/source_modules/spyserver_source/src/main.cpp b/source_modules/spyserver_source/src/main.cpp index 9ba05925..61c3ed19 100644 --- a/source_modules/spyserver_source/src/main.cpp +++ b/source_modules/spyserver_source/src/main.cpp @@ -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_() {