From bd545feb2c16fba11cc8bcff5a9af95083f40378 Mon Sep 17 00:00:00 2001 From: Ryzerth Date: Tue, 22 Dec 2020 14:50:26 +0100 Subject: [PATCH] changes to the build system --- .gitignore | 3 +- CMakeLists.txt | 37 ++- airspyhf_source/src/main.cpp | 21 +- core/src/config.h | 23 -- core/src/core.cpp | 18 +- core/src/core.h | 2 +- core/src/gui/icons.cpp | 17 +- core/src/gui/main_window.cpp | 6 +- core/src/gui/style.cpp | 13 +- core/src/options.cpp | 26 +- core/src/options.h | 9 +- create_root.bat | 4 + create_root.sh | 3 + plutosdr_source/src/main.cpp | 3 +- prepare_root.bat | 6 - prepare_root.sh | 3 - radio/src/main.cpp | 3 +- recorder/src/main.cpp | 5 +- root/config.json | 43 --- root/module_list.json | 6 - root/radio_config.json | 5 - root/res/icons/center_tuning.png | Bin 0 -> 6667 bytes root/res/icons/menu.png | Bin 1813 -> 1434 bytes root/res/icons/muted.png | Bin 0 -> 5895 bytes root/res/icons/normal_tuning.png | Bin 0 -> 2785 bytes root/res/icons/play.png | Bin 2676 -> 2014 bytes root/res/icons/stop.png | Bin 1733 -> 1312 bytes root/res/icons/unmuted.png | Bin 0 -> 5677 bytes root/soapy_source_config.json | 4 - root_dev/config.json | 35 ++- root_dev/plutosdr_source_config.json | 2 +- root_dev/radio_config.json | 77 +---- root_dev/soapy_source_config.json | 45 +-- sdrpp_0.2.5_beta_airspyhf/band_colors.json | 7 + .../bandplans/general.json | 267 ++++++++++++++++++ .../bandplans/germany.json | 141 +++++++++ .../bandplans/russia.json | 135 +++++++++ sdrpp_0.2.5_beta_airspyhf/config.json | 46 +++ sdrpp_0.2.5_beta_airspyhf/modules/.gitkeep | 0 sdrpp_0.2.5_beta_airspyhf/recordings/.gitkeep | 0 .../res/fonts/Roboto-Medium.ttf | Bin 0 -> 162588 bytes .../res/icons/center_tuning.png | Bin 0 -> 6667 bytes sdrpp_0.2.5_beta_airspyhf/res/icons/menu.png | Bin 0 -> 1434 bytes sdrpp_0.2.5_beta_airspyhf/res/icons/muted.png | Bin 0 -> 5895 bytes .../res/icons/normal_tuning.png | Bin 0 -> 2785 bytes sdrpp_0.2.5_beta_airspyhf/res/icons/play.png | Bin 0 -> 2014 bytes sdrpp_0.2.5_beta_airspyhf/res/icons/sdrpp.ico | Bin 0 -> 33891 bytes sdrpp_0.2.5_beta_airspyhf/res/icons/sdrpp.png | Bin 0 -> 21113 bytes sdrpp_0.2.5_beta_airspyhf/res/icons/stop.png | Bin 0 -> 1312 bytes .../res/icons/unmuted.png | Bin 0 -> 5677 bytes soapy_source/src/main.cpp | 3 +- spyserver_source/CMakeLists.txt | 20 ++ spyserver_source/src/main.cpp | 178 ++++++++++++ spyserver_source/src/spyserver_client.cpp | 254 +++++++++++++++++ spyserver_source/src/spyserver_client.h | 69 +++++ spyserver_source/src/spyserver_protocol.h | 188 ++++++++++++ src/main.cpp | 4 +- 57 files changed, 1456 insertions(+), 275 deletions(-) create mode 100644 create_root.bat create mode 100644 create_root.sh delete mode 100644 prepare_root.bat delete mode 100755 prepare_root.sh delete mode 100644 root/config.json delete mode 100644 root/module_list.json delete mode 100644 root/radio_config.json create mode 100644 root/res/icons/center_tuning.png create mode 100644 root/res/icons/muted.png create mode 100644 root/res/icons/normal_tuning.png create mode 100644 root/res/icons/unmuted.png delete mode 100644 root/soapy_source_config.json create mode 100644 sdrpp_0.2.5_beta_airspyhf/band_colors.json create mode 100644 sdrpp_0.2.5_beta_airspyhf/bandplans/general.json create mode 100644 sdrpp_0.2.5_beta_airspyhf/bandplans/germany.json create mode 100644 sdrpp_0.2.5_beta_airspyhf/bandplans/russia.json create mode 100644 sdrpp_0.2.5_beta_airspyhf/config.json create mode 100644 sdrpp_0.2.5_beta_airspyhf/modules/.gitkeep create mode 100644 sdrpp_0.2.5_beta_airspyhf/recordings/.gitkeep create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/fonts/Roboto-Medium.ttf create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/center_tuning.png create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/menu.png create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/muted.png create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/normal_tuning.png create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/play.png create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/sdrpp.ico create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/sdrpp.png create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/stop.png create mode 100644 sdrpp_0.2.5_beta_airspyhf/res/icons/unmuted.png create mode 100644 spyserver_source/CMakeLists.txt create mode 100644 spyserver_source/src/main.cpp create mode 100644 spyserver_source/src/spyserver_client.cpp create mode 100644 spyserver_source/src/spyserver_client.h create mode 100644 spyserver_source/src/spyserver_protocol.h diff --git a/.gitignore b/.gitignore index 142816ce..adc758bc 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ build/ *.wav .DS_Store sdrpp_v0.2.5_beta_x64 -sdrpp_v0.2.5_beta_x64_new_wf \ No newline at end of file +sdrpp_v0.2.5_beta_x64_new_wf +root_dev/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b2bcc8d..fb0596e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,19 +1,44 @@ cmake_minimum_required(VERSION 3.13) project(sdrpp) +option(OPT_BUILD_RTL_TCP_SOURCE "Build RTL-TCP Source Module (no dependencies required)" ON) +option(OPT_BUILD_SPYSERVER_SOURCE "Build SpyServer Source Module (no dependencies required)" ON) +option(OPT_BUILD_SOAPY_SOURCE "Build SoapySDR Source Module (Depedencies: soapysdr)" ON) +option(OPT_BUILD_AIRSPYHF_SOURCE "Build Airspy HF+ Source Module (Depedencies: libairspyhf)" ON) +option(OPT_BUILD_PLUTOSDR_SOURCE "Build PlutoSDR Source Module (Depedencies: libiio, libad9361)" ON) +option(OPT_BUILD_AUDIO_SINK "Build Audio Sink Module (Depedencies: portaudio)" ON) + # Core of SDR++ add_subdirectory("core") -# Cross platform modules +# Base modules add_subdirectory("radio") add_subdirectory("recorder") -add_subdirectory("soapy_source") -add_subdirectory("airspyhf_source") -#add_subdirectory("file_source") + +# Source modules +if (OPT_BUILD_RTL_TCP_SOURCE) add_subdirectory("rtl_tcp_source") -add_subdirectory("audio_sink") -#add_subdirectory("rx888_source") +endif (OPT_BUILD_RTL_TCP_SOURCE) + +if (OPT_BUILD_SPYSERVER_SOURCE) +add_subdirectory("spyserver_source") +endif (OPT_BUILD_SPYSERVER_SOURCE) + +if (OPT_BUILD_SOAPY_SOURCE) +add_subdirectory("soapy_source") +endif (OPT_BUILD_SOAPY_SOURCE) + +if (OPT_BUILD_AIRSPYHF_SOURCE) +add_subdirectory("airspyhf_source") +endif (OPT_BUILD_AIRSPYHF_SOURCE) + +if (OPT_BUILD_PLUTOSDR_SOURCE) add_subdirectory("plutosdr_source") +endif (OPT_BUILD_PLUTOSDR_SOURCE) + +if (OPT_BUILD_AUDIO_SINK) +add_subdirectory("audio_sink") +endif (OPT_BUILD_AUDIO_SINK) if (MSVC) set(CMAKE_CXX_FLAGS "-O2 /std:c++17 /EHsc") diff --git a/airspyhf_source/src/main.cpp b/airspyhf_source/src/main.cpp index 45a388ba..42493c8c 100644 --- a/airspyhf_source/src/main.cpp +++ b/airspyhf_source/src/main.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #define CONCAT(a, b) ((std::string(a) + b).c_str()) @@ -17,6 +18,8 @@ SDRPP_MOD_INFO { /* Max instances */ 1 }; +//ConfigManager config; + const char* AGG_MODES_STR = "Off\0Low\0High\0"; class AirspyHFSourceModule : public ModuleManager::Instance { @@ -36,7 +39,10 @@ public: handler.stream = &stream; refresh(); - selectFirst(); + + // config.aquire(); + // std::string serString = config.conf["device"]; + // config.release(); sigpath::sourceManager.registerSource("Airspy HF+", &handler); } @@ -92,9 +98,10 @@ public: std::string str = buf; if (serial == str) { selectBySerial(devList[i]); - break; + return; } } + selectFirst(); } void selectBySerial(uint64_t serial) { @@ -287,7 +294,12 @@ private: }; MOD_EXPORT void _INIT_() { - // Do your one time init here +// config.setPath(ROOT_DIR "/airspyhf_config.json"); +// json defConf; +// defConf["device"] = ""; +// defConf["devices"] = json::object(); +// config.load(defConf); +// config.enableAutoSave(); } MOD_EXPORT ModuleManager::Instance* _CREATE_INSTANCE_(std::string name) { @@ -299,5 +311,6 @@ MOD_EXPORT void _DELETE_INSTANCE_(ModuleManager::Instance* instance) { } MOD_EXPORT void _END_() { - // Do your one shutdown here + // config.disableAutoSave(); + // config.save(); } \ No newline at end of file diff --git a/core/src/config.h b/core/src/config.h index f6933eb9..277d7a44 100644 --- a/core/src/config.h +++ b/core/src/config.h @@ -6,20 +6,6 @@ using nlohmann::json; -#define DEV_BUILD - -#define SDRPP_RESOURCE_DIR "/usr/local/" - -#ifndef ROOT_DIR -#ifdef DEV_BUILD -#define ROOT_DIR "../root_dev" -#elif _WIN32 -#define ROOT_DIR "." -#else -#define ROOT_DIR "/etc/sdrpp" -#endif -#endif - class ConfigManager { public: ConfigManager(); @@ -32,20 +18,11 @@ public: void aquire(); void release(bool changed = false); - // static void setResourceDir(std::string path); - // static std::string getResourceDir(); - - // static void setConfigDir(std::string path); - // static std::string getConfigDir(); - json conf; private: static void autoSaveWorker(ConfigManager* _this); - //static std::string resDir; - //static std::string configDir; - std::string path = ""; bool changed = false; bool autoSaveEnabled = false; diff --git a/core/src/core.cpp b/core/src/core.cpp index 041a893c..a6533600 100644 --- a/core/src/core.cpp +++ b/core/src/core.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -63,16 +64,19 @@ duk_ret_t test_func(duk_context *ctx) { } // main -int sdrpp_main() { +int sdrpp_main(int argc, char *argv[]) { #ifdef _WIN32 //FreeConsole(); // ConfigManager::setResourceDir("./res"); // ConfigManager::setConfigDir("."); #endif - spdlog::info("SDR++ v" VERSION_STR); + // Load default options and parse command line + options::loadDefaults(); + if (!options::parse(argc, argv)) { return -1; } + // ======== DEFAULT CONFIG ======== json defConfig; defConfig["bandColors"]["amateur"] = "#FF0000FF"; @@ -114,8 +118,8 @@ int sdrpp_main() { defConfig["windowSize"]["w"] = 1280; // Load config - spdlog::info("Loading config"); - core::configManager.setPath(ROOT_DIR "/config.json"); + spdlog::info("Loading config {0}"); + core::configManager.setPath(options::opts.root + "/config.json"); core::configManager.load(defConfig); core::configManager.enableAutoSave(); @@ -153,7 +157,7 @@ int sdrpp_main() { // Load app icon GLFWimage icons[10]; - icons[0].pixels = stbi_load(((std::string)(ROOT_DIR "/res/icons/sdrpp.png")).c_str(), &icons[0].width, &icons[0].height, 0, 4); + icons[0].pixels = stbi_load(((std::string)(options::opts.root + "/res/icons/sdrpp.png")).c_str(), &icons[0].width, &icons[0].height, 0, 4); icons[1].pixels = (unsigned char*)malloc(16 * 16 * 4); icons[1].width = icons[1].height = 16; icons[2].pixels = (unsigned char*)malloc(24 * 24 * 4); icons[2].width = icons[2].height = 24; icons[3].pixels = (unsigned char*)malloc(32 * 32 * 4); icons[3].width = icons[3].height = 32; @@ -204,11 +208,11 @@ int sdrpp_main() { LoadingScreen::show("Loading band plans"); spdlog::info("Loading band plans"); - bandplan::loadFromDir(ROOT_DIR "/bandplans"); + bandplan::loadFromDir(options::opts.root + "/bandplans"); LoadingScreen::show("Loading band plan colors"); spdlog::info("Loading band plans color table"); - bandplan::loadColorTable(ROOT_DIR "/band_colors.json"); + bandplan::loadColorTable(options::opts.root + "/band_colors.json"); windowInit(); diff --git a/core/src/core.h b/core/src/core.h index d775193c..6a0dbde2 100644 --- a/core/src/core.h +++ b/core/src/core.h @@ -12,4 +12,4 @@ namespace core { void setInputSampleRate(double samplerate); }; -int sdrpp_main(); \ No newline at end of file +int sdrpp_main(int argc, char *argv[]); \ No newline at end of file diff --git a/core/src/gui/icons.cpp b/core/src/gui/icons.cpp index 72447e46..a2f0f979 100644 --- a/core/src/gui/icons.cpp +++ b/core/src/gui/icons.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #define STB_IMAGE_IMPLEMENTATION #include @@ -31,13 +32,13 @@ namespace icons { } void load() { - LOGO = (ImTextureID)(uintptr_t)loadTexture(ROOT_DIR "/res/icons/sdrpp.png"); - PLAY = (ImTextureID)(uintptr_t)loadTexture(ROOT_DIR "/res/icons/play.png"); - STOP = (ImTextureID)(uintptr_t)loadTexture(ROOT_DIR "/res/icons/stop.png"); - MENU = (ImTextureID)(uintptr_t)loadTexture(ROOT_DIR "/res/icons/menu.png"); - MUTED = (ImTextureID)(uintptr_t)loadTexture(ROOT_DIR "/res/icons/muted.png"); - UNMUTED = (ImTextureID)(uintptr_t)loadTexture(ROOT_DIR "/res/icons/unmuted.png"); - NORMAL_TUNING = (ImTextureID)(uintptr_t)loadTexture(ROOT_DIR "/res/icons/normal_tuning.png"); - CENTER_TUNING = (ImTextureID)(uintptr_t)loadTexture(ROOT_DIR "/res/icons/center_tuning.png"); + LOGO = (ImTextureID)(uintptr_t)loadTexture(options::opts.root + "/res/icons/sdrpp.png"); + PLAY = (ImTextureID)(uintptr_t)loadTexture(options::opts.root + "/res/icons/play.png"); + STOP = (ImTextureID)(uintptr_t)loadTexture(options::opts.root + "/res/icons/stop.png"); + MENU = (ImTextureID)(uintptr_t)loadTexture(options::opts.root + "/res/icons/menu.png"); + MUTED = (ImTextureID)(uintptr_t)loadTexture(options::opts.root + "/res/icons/muted.png"); + UNMUTED = (ImTextureID)(uintptr_t)loadTexture(options::opts.root + "/res/icons/unmuted.png"); + NORMAL_TUNING = (ImTextureID)(uintptr_t)loadTexture(options::opts.root + "/res/icons/normal_tuning.png"); + CENTER_TUNING = (ImTextureID)(uintptr_t)loadTexture(options::opts.root + "/res/icons/center_tuning.png"); } } \ No newline at end of file diff --git a/core/src/gui/main_window.cpp b/core/src/gui/main_window.cpp index e0e95de4..efde3a91 100644 --- a/core/src/gui/main_window.cpp +++ b/core/src/gui/main_window.cpp @@ -30,6 +30,7 @@ #include #include #include +#include // const int FFTSizes[] = { // 65536, @@ -143,8 +144,8 @@ void windowInit() { spdlog::info("Loading modules"); // Load modules from /module directory - if (std::filesystem::is_directory(ROOT_DIR "/modules")) { - for (const auto & file : std::filesystem::directory_iterator(ROOT_DIR "/modules")) { + if (std::filesystem::is_directory(options::opts.root + "/modules")) { + for (const auto & file : std::filesystem::directory_iterator(options::opts.root + "/modules")) { std::string path = file.path().generic_string(); if (file.path().extension().generic_string() != SDRPP_MOD_EXTENTSION) { continue; @@ -595,7 +596,6 @@ void drawWindow() { gui::waterfall.setWaterfallMin(fftMin); gui::waterfall.setWaterfallMax(fftMax); - ImGui::End(); if (showCredits) { diff --git a/core/src/gui/style.cpp b/core/src/gui/style.cpp index c22dd806..35fbca89 100644 --- a/core/src/gui/style.cpp +++ b/core/src/gui/style.cpp @@ -2,6 +2,7 @@ #include #include #include +#include namespace style { ImFont* baseFont; @@ -16,9 +17,9 @@ namespace style { ImGui::GetStyle().PopupRounding = 0.0f; ImGui::GetStyle().ScrollbarRounding = 0.0f; - baseFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(ROOT_DIR "/res/fonts/Roboto-Medium.ttf")).c_str(), 16.0f); - bigFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(ROOT_DIR "/res/fonts/Roboto-Medium.ttf")).c_str(), 42.0f); - hugeFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(ROOT_DIR "/res/fonts/Roboto-Medium.ttf")).c_str(), 128.0f); + baseFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(options::opts.root + "/res/fonts/Roboto-Medium.ttf")).c_str(), 16.0f); + bigFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(options::opts.root + "/res/fonts/Roboto-Medium.ttf")).c_str(), 42.0f); + hugeFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(options::opts.root + "/res/fonts/Roboto-Medium.ttf")).c_str(), 128.0f); ImGui::StyleColorsDark(); //ImGui::StyleColorsLight(); @@ -36,9 +37,9 @@ namespace style { ImGui::GetStyle().PopupRounding = 0.0f; ImGui::GetStyle().ScrollbarRounding = 0.0f; - baseFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(ROOT_DIR "/res/fonts/Roboto-Medium.ttf")).c_str(), 16.0f); - bigFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(ROOT_DIR "/res/fonts/Roboto-Medium.ttf")).c_str(), 42.0f); - hugeFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(ROOT_DIR "/res/fonts/Roboto-Medium.ttf")).c_str(), 128.0f); + baseFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(options::opts.root + "/res/fonts/Roboto-Medium.ttf")).c_str(), 16.0f); + bigFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(options::opts.root + "/res/fonts/Roboto-Medium.ttf")).c_str(), 42.0f); + hugeFont = ImGui::GetIO().Fonts->AddFontFromFileTTF(((std::string)(options::opts.root + "/res/fonts/Roboto-Medium.ttf")).c_str(), 128.0f); ImGui::StyleColorsDark(); diff --git a/core/src/options.cpp b/core/src/options.cpp index 53b8ab4d..6e8ba810 100644 --- a/core/src/options.cpp +++ b/core/src/options.cpp @@ -1,7 +1,29 @@ #include +#include namespace options { - void parse(char** argv, int argc) { - + CMDLineOptions opts; + + void loadDefaults() { +#ifdef _WIN32 + opts.root = "."; +#else + opts.root = "~/.sdrpp/"; +#endif + } + + bool parse(int argc, char *argv[]) { + for (int i = 1; i < argc; i++) { + char* arg = argv[i]; + if (!strcmp(arg, "-r") || !strcmp(arg, "--root")) { + if (i == argc - 1) { return false; } + opts.root = argv[++i]; + } + else { + spdlog::error("Invalid command line option: {0}", arg); + return false; + } + } + return true; } } \ No newline at end of file diff --git a/core/src/options.h b/core/src/options.h index b8087748..aec4d71e 100644 --- a/core/src/options.h +++ b/core/src/options.h @@ -1,13 +1,14 @@ #pragma once #include +#include namespace options { struct CMDLineOptions { std::string root; - bool help; }; - CMDLineOptions opts; + SDRPP_EXPORT CMDLineOptions opts; - void parse(char** argv, int argc); -} + void loadDefaults(); + bool parse(int argc, char *argv[]); +} \ No newline at end of file diff --git a/create_root.bat b/create_root.bat new file mode 100644 index 00000000..b2762497 --- /dev/null +++ b/create_root.bat @@ -0,0 +1,4 @@ +echo OFF + +mkdir root_dev +Xcopy root root_dev /E /H /C /I \ No newline at end of file diff --git a/create_root.sh b/create_root.sh new file mode 100644 index 00000000..7fd024fe --- /dev/null +++ b/create_root.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +cp -r root root_dev diff --git a/plutosdr_source/src/main.cpp b/plutosdr_source/src/main.cpp index f0851300..f4dcad91 100644 --- a/plutosdr_source/src/main.cpp +++ b/plutosdr_source/src/main.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #define CONCAT(a, b) ((std::string(a) + b).c_str()) @@ -262,7 +263,7 @@ MOD_EXPORT void _INIT_() { defConf["sampleRate"] = 4000000.0f; defConf["gainMode"] = 0; defConf["gain"] = 0.0f; - config.setPath(ROOT_DIR "/plutosdr_source_config.json"); + config.setPath(options::opts.root + "/plutosdr_source_config.json"); config.load(defConf); config.enableAutoSave(); } diff --git a/prepare_root.bat b/prepare_root.bat deleted file mode 100644 index dea93998..00000000 --- a/prepare_root.bat +++ /dev/null @@ -1,6 +0,0 @@ -echo OFF -copy /b/v/y build\Release\* root\ -copy /b/v/y build\radio\Release\radio.dll root\modules\radio.dll -copy /b/v/y build\recorder\Release\recorder.dll root\modules\recorder.dll -copy /b/v/y build\rtl_tcp_source\Release\rtl_tcp_source.dll root\modules\rtl_tcp_source.dll -copy /b/v/y build\soapy\Release\soapy.dll root\modules\soapy.dll \ No newline at end of file diff --git a/prepare_root.sh b/prepare_root.sh deleted file mode 100755 index 25212ac1..00000000 --- a/prepare_root.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -cp build/*/*.so root/modules diff --git a/radio/src/main.cpp b/radio/src/main.cpp index 250b9903..626b79d9 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #define CONCAT(a, b) ((std::string(a) + b).c_str()) @@ -197,7 +198,7 @@ private: MOD_EXPORT void _INIT_() { json def = json({}); - config.setPath(ROOT_DIR "/radio_config.json"); + config.setPath(options::opts.root + "/radio_config.json"); config.load(def); config.enableAutoSave(); } diff --git a/recorder/src/main.cpp b/recorder/src/main.cpp index 9ad50fde..a6b375b0 100644 --- a/recorder/src/main.cpp +++ b/recorder/src/main.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #define CONCAT(a, b) ((std::string(a) + b).c_str()) @@ -44,7 +45,7 @@ void sampleRateChanged(void* ctx, double sampleRate, int blockSize) { } std::string expandString(std::string input) { - input = std::regex_replace(input, std::regex("%ROOT%"), ROOT_DIR); + input = std::regex_replace(input, std::regex("%ROOT%"), options::opts.root); return std::regex_replace(input, std::regex("//"), "/"); } @@ -306,7 +307,7 @@ struct RecorderContext_t { MOD_EXPORT void _INIT_() { json def = json({}); - config.setPath(ROOT_DIR "/recorder_config.json"); + config.setPath(options::opts.root + "/recorder_config.json"); config.load(def); config.enableAutoSave(); } diff --git a/root/config.json b/root/config.json deleted file mode 100644 index 2a7a2e93..00000000 --- a/root/config.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "audio": { - "Radio": { - "device": "CABLE Input (VB-Audio Virtual Cable)", - "sampleRate": 48000.0, - "volume": 0.42578125 - }, - "Radio 1": { - "device": "CABLE-A Input (VB-Audio Cable A)", - "sampleRate": 48000.0, - "volume": 1.0 - }, - "Radio 2": { - "device": "CABLE Input (VB-Audio Virtual Cable)", - "sampleRate": 48000.0, - "volume": 1.0 - } - }, - "bandPlan": "General", - "bandPlanEnabled": true, - "fftHeight": 300, - "frequency": 98391106, - "max": 0.0, - "maximized": false, - "menuOrder": [ - "Source", - "Radio", - "Recorder", - "Audio", - "Scripting", - "Band Plan", - "Display" - ], - "menuWidth": 300, - "min": -72.05882263183594, - "showWaterfall": true, - "source": "", - "sourceSettings": {}, - "windowSize": { - "h": 720, - "w": 1280 - } -} \ No newline at end of file diff --git a/root/module_list.json b/root/module_list.json deleted file mode 100644 index 6e593fcc..00000000 --- a/root/module_list.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "Radio": "./modules/radio.dll", - "Recorder": "./modules/recorder.dll", - "Soapy": "./modules/soapy.dll", - "RTLTCPSource": "./modules/rtl_tcp_source.dll" -} diff --git a/root/radio_config.json b/root/radio_config.json deleted file mode 100644 index c6ea5a59..00000000 --- a/root/radio_config.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Radio 1": { - "demodulator":1 - } -} \ No newline at end of file diff --git a/root/res/icons/center_tuning.png b/root/res/icons/center_tuning.png new file mode 100644 index 0000000000000000000000000000000000000000..00bf8482f9f9f3ca38e76569ad00f7a0d9c0e1ad GIT binary patch literal 6667 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 l^bJX2xPCqo{Z_p9vj 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 Pf*TyNvfE!uro{apG(B^a literal 0 HcmV?d00001 diff --git a/root/res/icons/normal_tuning.png b/root/res/icons/normal_tuning.png new file mode 100644 index 0000000000000000000000000000000000000000..76d171e2d9dd0905889f79e14222e118cdda82a1 GIT binary patch literal 2785 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 literal 0 HcmV?d00001 diff --git a/root/res/icons/play.png b/root/res/icons/play.png index 93684dd27ba610dd5c696e7c813c087b4760bbd1..a5bc44df471f632b59b2d91e27773c5f179023df 100644 GIT binary patch literal 2014 zcmZ{lTUZm<7RT3&0}c`}KvnQUh~!dl5QQ2Qfe=L)6oNvnRVgVT@m5g0aS1R$gz5p} zH?iP{g~Ve~qzL*60#!*gr_hKOj&h2%T1*LwwrYroL=nzJpSvH{@4wet`|_~X-iM;2 z!ki{ep9BC-MEJ^e00=D+!0l;lPOC`+2M;$ zx*3&R>X0x!7^IGPZXM5u`FX5>b!MErI2x zCq!GNXr(|!MPAt~Xt`WiMhFUb@d0*R<^279lWBHEB4PqL3_D>q%R^JHUtL%=@u z7s0QpgDfuQe>Mqx=Ip=I=(E}qeO(z${Bhj)F0X@LB}lsLxnmuH53G_PEw#gTi#eEo!)e&O_8q#(6|MMR z3}o^#|1da3+ZFK41+8@>-zv!Mm}Zt(XTmgrVqFrZi4*GvFio~tw-wW{#G>737mKZN zM+VB7yOPkZV77DzDqx9q?U*!2K{h$)4h)I$RbDW(3ZLW(nOw{chbwOR-b{Eb#xHuojS}Wg5gePx-cSI71L9pcBAug< zvQXU}{Avb9R=eioFn<|_LP2Pu2p)|um`m$-n^xi&I1B$`;!r0mV>992jXJRxoU8m& zK__kf$vF>19&z*nOb7E>My*%|Q$JsnBQ{)osA zuvAb*4lvYj{Rm&~WH%V-?E47)2Xw@%mansj5Hd#|Y;fdG{sac}T1tLl=mfoK%REDG z1ZysIwZ#xGSbb82yjU4&Im7WSv0dc-HVDx$(dbN~^SL5)(b0cmBPX z@|C5(W>pGdtNtlRxMk!$sVWX0w1=ijB27m1cBi)pp{8#QHJN7>%`LG-VggjADvq{3 zt0WI}{uR^54uh_xVx|pCDm-b3zKmn!hJvQJzEC?GcKOFS(=%y6++-X4F1Xt=Gm}3X zoq~}1=e$;LL&Ns?Bu36u7;ZjpI!Qz&pX!rbMsx@F`(1vfu9YhZ92iq=>C&fDm)dY< zYM>3<7~{)P-8%QNAdGDF8(o3Jo-HFg=mKju3+VzoXiN=(frq~_a=#dtHTmB04t5kZ z+~Qf&sTql*n_k(AQg88Eg@yu;oI|`Yx=^o~Y1??q97dP%bu*vV?Pfl$ubJmDVY}bx zVT|0!&?0mPFtlvC8yH%;8}3#8Vm|OXce*~c6a-~_O3pPXRhMI}J~Kt|=}mLMY&e=Q zGRqZ8ubTsSu(Q)F6T!Ws#@pZ0?Wb3>kw*!P+;)sCa34c)n6_w??$Py(+&qljL%b+9 z`cg2zr#u2l={@{Q~({q44;&dFc_jQEuF`78L{+-oB4XgBa=( z2hlh~ebzywWvIQ~$T9bzpK(zzL;WZHtmHI2DH6VQ9YbCEddS6#@VRM@)9stmVA)GG@U1D-c^p%a51}QKdls(>aqb;ycvA;j12$KOfJ{XnT-&J~Ma1lHNlc`h>ky zPs45#i+Z3o6)ntM_NTYbSjx}HrH=c_CA;=foqnT&|Eh?ba^t0f-f}IsxFPAEzrzm^ avg!S_zkoUR*%R8XHRu= zFd&|+}97A#^s(^GA75OwRYI~}jz3VtQs85xRajSYy!Izgmh4#D009esXyZ_fQZ z_jB*feeS*0#mnkdWS@3ESPqzL$1jJ?)<}O~fweexkvdzhP@$Y~0 z%kw90IX2atTX?JJ2JX!J$LyuYuX?wO{kb}oimUB-w7RC8BkP~qNqew%MC<-Lo${V9 zglWzPr}D(8CEKbptwhYR1th~X? zK&!(l;%m)8af2BFH6y)CCNHS4n)qJi@$zXk##g|%-;DJn$mjZH@Es;m2${YGP=4-* zTf;!Gaq?6ZO4e!cS{y1qH6v{)ls^(UgMo`^j`QelH{hTVcCid~O_2M^cQ8xvhtiRfYw#Aa{BhpA0mgR!fyE#%j!{nF8e%Khg>S z*BP}$k#tjhc{~Es{U}%tbdq)ri_EJA#Kgd^Dnm*#padwu0!>*Cft58>MhFTBlB|j2~&t~HSl&|9*jckg6n=Qi+DUj!SnU-C^ z=fp>kv6%S&M_$(Y(YhGuB9mAKTS_(ZBo_BC8Sspp<@<4)gvF0HNW4d43gCxanss5oqv|D}Rb?#EREM{QhMK9K#jL7KzDPW7D4Lk@eHVvV~G8eQbK30&esi*+S@WN%+`o$~rh;G7Aj*L;sNJl}S*7 zMH2@p;>6&Hm$q%w84!*-+tfO}Yl_N0CB9`-jMbuC^vn=Ag zr@Zd|_27y(r^20lKzvBrpIO9>RJe;>+G#5Ic6fwELwaNJ;dY^!LVCSn{4VjF=;+eE z$HP6vB4*PYdc8GN8ciWRzjeISGzoPLR|FbQvbQ8$L7i}>a^xbdm5xhY+FfJ3uH!;b z%h@2`FPg~ML9g<6BNtOx>?OtnF)$h|Vxy8TODT!Y%<3rYReH6iI4B#MtE}`MJ>)2f z-gjVN&*kkZzVSv-%UB_wtshU)Q8S$H(w^t3MJ!^ZMQkNuUA+rCre{y+8l#YKrB_=> zXuL&Cp*H7rL~Usl5^{Vmu}E zW=XiXo?5$dB&Tv>p%j?!5*OGR{I_BJs6H|WJOa%DABjU#;QPcQ7^s*}dWZJhONZ~n zD?;}dG<8hPRRI%&k#nIP-|{$dqf1*tbvkh^sJ-K0_q4OhpG}GGi7^H;WjVZrLSaC4;70#R!)}<@|1VjJs%~!FWK7490pw zSFu<_jGyV~L3@PES{IVkF0o?nBzV_8j{aDOmVF+<`YM#CbeWprX5T>cl0m((u|25W zUCPK$izcK@7WX!fa7i(!r>C(y74~e4sB3beG~FfE?To_L8Be*BG{bLpX^$l%u&uc& z(wv>-_asI2BSrPS4S~v3rbY8Ou43~DRh zkCHzxn!sDM5qk-xjacmw0*hIBZb=wfV|-m~_5`wQ=(ygi9ZaF!+FTXct+!f3j9LfB zcLUK0m-1!D-J$4&4p!Qd>Wr-A{pUhVWM>m&WM`B2fNBxzIQbts58Lveg#1g2n(NkdU zvITyJLwCeB>BYQz|6Ok0`Sjh_t1IhH|F(T!{mu|%9WL-K*|e%)Z`}K@?)_?(GoQFj zO7`TFzcTXy!yW%3>yukmwtxHOz5416@1jics|!_@PoCqw>FbN^8zttGV|3aR&123!_R9O) zJ@MeSNimr_m@7>6>TbL}({oXhu_E`7n$F#8U}hnR`Pp-xl&zIA!+F0OExsS_yf_F{ zQ*}r!r%BzN{~X7GDfZX!#S41Wv~g{QrHuCl*ZZmwX1 zwy;^^%YCyAfywQ@`p?osdOA15jos2&9=unH_qox!^q1kutCELTUu=H;)ylI^W#_~v zKVH;EEV%5cr+zZa^xLF4UmX|NPugRgDLw5;kX-B^<1>F$9+-RD&ECPk`R|k`YiF|0 z_{y=N_`lPn&5O@7PQL3^q;>M{-1|9|EEPF(pS)F(Px*b;F{8lrMSSv{^Z)=LDu8&%r*U-=X;yi?yf_es>Y`QN{%l;A36K;jL5f3lwr$Xfkr R!E{p)-_zC4Wt~$(69D|o#Iyha literal 1733 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4YzZe+UdOTemLn`LHy|z*Ckb}Sh zhk1o8f2Vf^UuIBzb}VB%Q|qp~K(!+V{7CR+|4@6paL+R7hV1BU+vU<0*Ue-PWXfG; zJdpbKGUJ^0cCri%f95eVG$=4LFgOAOvWbU*fkl#mfy0P_K_G>JLE!`ggTsVT1*73G unjS{;1tsOff?TVH%Wp0-j*!y#!})uKFE~_KzJ+W9`PkFd&t;ucLK6U2*S@v@ diff --git a/root/res/icons/unmuted.png b/root/res/icons/unmuted.png new file mode 100644 index 0000000000000000000000000000000000000000..64fcb987d24be050ee590db052262f69701beeee GIT binary patch literal 5677 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 O4A`EwKUHIayZwK6QfT%7 literal 0 HcmV?d00001 diff --git a/root/soapy_source_config.json b/root/soapy_source_config.json deleted file mode 100644 index 376198a8..00000000 --- a/root/soapy_source_config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "device": "", - "devices": {} -} \ No newline at end of file diff --git a/root_dev/config.json b/root_dev/config.json index d5e1d5fb..ab2e2e27 100644 --- a/root_dev/config.json +++ b/root_dev/config.json @@ -1,11 +1,18 @@ { + "bandColors": { + "amateur": "#FF0000FF", + "aviation": "#00FF00FF", + "broadcast": "#0000FFFF", + "marine": "#00FFFFFF", + "military": "#FFFF00FF" + }, "bandPlan": "General", "bandPlanEnabled": true, "centerTuning": false, "fftHeight": 300, - "frequency": 7350000, - "max": -25.0, - "maximized": true, + "frequency": 105000000, + "max": 0.0, + "maximized": false, "menuOrder": [ "Source", "Radio", @@ -17,7 +24,7 @@ "Display" ], "menuWidth": 300, - "min": -63.235294342041016, + "min": -70.0, "moduleInstances": { "AirspyHF+ Source": "airspyhf_source", "Audio Sink": "audio_sink", @@ -25,7 +32,8 @@ "RTL-TCP Source": "rtl_tcp_source", "Radio": "radio", "Recorder": "recorder", - "SoapySDR Source": "soapy_source" + "SoapySDR Source": "soapy_source", + "SpyServer Source": "spyserver_source" }, "modules": [ "./radio/Release/radio.dll", @@ -34,26 +42,17 @@ "./airspyhf_source/Release/airspyhf_source.dll", "./rtl_tcp_source/Release/rtl_tcp_source.dll", "./audio_sink/Release/audio_sink.dll", - "./plutosdr_source/Release/plutosdr_source.dll" + "./plutosdr_source/Release/plutosdr_source.dll", + "./spyserver_source/Release/spyserver_source.dll" ], "offset": 0.0, "showWaterfall": true, - "source": "Airspy HF+", + "source": "SoapySDR", "streams": { "Radio": { "muted": false, "sink": "Audio", - "volume": 0.13265305757522583 - }, - "Radio 1": { - "muted": false, - "sink": "Audio", - "volume": 0.6377550959587097 - }, - "Radio 2": { - "muted": false, - "sink": "Audio", - "volume": 0.4292035400867462 + "volume": 0.5867347121238708 } }, "windowSize": { diff --git a/root_dev/plutosdr_source_config.json b/root_dev/plutosdr_source_config.json index cf337e35..697ea531 100644 --- a/root_dev/plutosdr_source_config.json +++ b/root_dev/plutosdr_source_config.json @@ -1,6 +1,6 @@ { "IP": "192.168.2.1", "gain": 0.0, - "gainMode": 2, + "gainMode": 0, "sampleRate": 4000000.0 } \ No newline at end of file diff --git a/root_dev/radio_config.json b/root_dev/radio_config.json index a91fcc6b..4f09e0fd 100644 --- a/root_dev/radio_config.json +++ b/root_dev/radio_config.json @@ -1,44 +1,5 @@ { "Radio": { - "AM": { - "bandwidth": 12500.0, - "snapInterval": 1000.0, - "squelchLevel": -100.0 - }, - "CW": { - "bandwidth": 200.0, - "snapInterval": 10.0, - "squelchLevel": -100.0 - }, - "DSB": { - "bandwidth": 6000.0, - "snapInterval": 100.0 - }, - "FM": { - "bandwidth": 12500.0, - "snapInterval": 10000.0, - "squelchLevel": -47.474998474121094 - }, - "LSB": { - "bandwidth": 3000.0, - "snapInterval": 100.0 - }, - "RAW": { - "snapInterval": 10000.0 - }, - "USB": { - "bandwidth": 3000.0, - "snapInterval": 100.0 - }, - "WFM": { - "bandwidth": 200000.0, - "deempMode": 0, - "snapInterval": 100000.0, - "squelchLevel": -100.0 - }, - "selectedDemodId": 2 - }, - "Radio 1": { "AM": { "bandwidth": 12500.0, "snapInterval": 1000.0 @@ -70,43 +31,7 @@ "bandwidth": 200000.0, "deempMode": 0, "snapInterval": 100000.0, - "squelchLevel": -100.0 - }, - "selectedDemodId": 1 - }, - "Radio 2": { - "AM": { - "bandwidth": 12500.0, - "snapInterval": 1000.0 - }, - "CW": { - "bandwidth": 200.0, - "snapInterval": 10.0 - }, - "DSB": { - "bandwidth": 6000.0, - "snapInterval": 100.0 - }, - "FM": { - "bandwidth": 12500.0, - "snapInterval": 10000.0 - }, - "LSB": { - "bandwidth": 3000.0, - "snapInterval": 100.0 - }, - "RAW": { - "snapInterval": 10000.0 - }, - "USB": { - "bandwidth": 3000.0, - "snapInterval": 100.0 - }, - "WFM": { - "bandwidth": 200000.0, - "deempMode": 1, - "snapInterval": 100000.0, - "squelchLevel": -70.2020034790039 + "squelchLevel": -60.60599899291992 }, "selectedDemodId": 1 } diff --git a/root_dev/soapy_source_config.json b/root_dev/soapy_source_config.json index 8e7495e4..01baa098 100644 --- a/root_dev/soapy_source_config.json +++ b/root_dev/soapy_source_config.json @@ -1,49 +1,12 @@ { - "device": "AirSpy HF+ [c852435de0224af7]", + "device": "Generic RTL2832U OEM :: 00000001", "devices": { - "": { + "Generic RTL2832U OEM :: 00000001": { "agc": true, "gains": { - "PGA": 0.0 + "TUNER": 0.0 }, - "sampleRate": 4000000.0 - }, - "AirSpy HF+ [c852435de0224af7]": { - "agc": false, - "gains": { - "LNA": 6.0, - "RF": -48.0 - }, - "sampleRate": 768000.0 - }, - "CABLE Output (VB-Audio Virtual Cable)": { - "sampleRate": 96000.0 - }, - "Default Device": { - "agc": false, - "sampleRate": 192000.0 - }, - "Generic RTL2832U OEM :: 00000001": { - "agc": false, - "gains": { - "TUNER": 37.3390007019043 - }, - "sampleRate": 250000.0 - }, - "HackRF One #0 901868dc282c8f8b": { - "gains": { - "AMP": 0.0, - "LNA": 24.503000259399414, - "VGA": 16.332000732421875 - }, - "sampleRate": 8000000.0 - }, - "Microphone (Realtek High Definition Audio)": { - "agc": false, - "sampleRate": 44100.0 - }, - "PulseAudio": { - "sampleRate": 96000.0 + "sampleRate": 2560000.0 } } } \ No newline at end of file diff --git a/sdrpp_0.2.5_beta_airspyhf/band_colors.json b/sdrpp_0.2.5_beta_airspyhf/band_colors.json new file mode 100644 index 00000000..2e9d8a95 --- /dev/null +++ b/sdrpp_0.2.5_beta_airspyhf/band_colors.json @@ -0,0 +1,7 @@ +{ + "broadcast": "#0000FFFF", + "amateur": "#FF0000FF", + "aviation": "#00FF00FF", + "marine": "#00FFFFFF", + "military": "#FFFF00FF" +} \ No newline at end of file diff --git a/sdrpp_0.2.5_beta_airspyhf/bandplans/general.json b/sdrpp_0.2.5_beta_airspyhf/bandplans/general.json new file mode 100644 index 00000000..600c8eef --- /dev/null +++ b/sdrpp_0.2.5_beta_airspyhf/bandplans/general.json @@ -0,0 +1,267 @@ +{ + "name": "General", + "country_name": "Worldwide", + "country_code": "--", + "author_name": "Ryzerth", + "author_url": "https://github.com/AlexandreRouma", + "bands": [ + { + "name": "Long Wave", + "type": "broadcast", + "start": 148500, + "end": 283500 + }, + { + "name": "Medium Wave", + "type": "broadcast", + "start": 526500, + "end": 1606500 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 2300000, + "end": 2468000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 3200000, + "end": 3400000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 3950000, + "end": 4000000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 4750000, + "end": 4995000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 5005000, + "end": 5060000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 5900000, + "end": 6200000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 7200000, + "end": 7450000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 9400000, + "end": 9900000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 11600000, + "end": 12100000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 13570000, + "end": 13870000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 15100000, + "end": 15800000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 17480000, + "end": 17900000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 18900000, + "end": 19020000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 21450000, + "end": 21850000 + }, + { + "name": "Shortwave Broadcast", + "type": "broadcast", + "start": 25670000, + "end": 26100000 + }, + { + "name": "FM Broadcast", + "type": "broadcast", + "start": 87500000, + "end": 108000000 + }, + { + "name": "Air Band VOR/ILS", + "type": "aviation", + "start": 108000000, + "end": 118000000 + }, + { + "name": "Air Band Voice", + "type": "aviation", + "start": 118000000, + "end": 137000000 + }, + { + "name": "160m Ham Band", + "type": "amateur", + "start": 1800000, + "end": 2000000 + }, + { + "name": "80m Ham Band", + "type": "amateur", + "start": 3500000, + "end": 3950000 + }, + { + "name": "60m Ham Band", + "type": "amateur", + "start": 5351500, + "end": 5366500 + }, + { + "name": "40m Ham Band", + "type": "amateur", + "start": 7000000, + "end": 7200000 + }, + { + "name": "30m Ham Band", + "type": "amateur", + "start": 10100000, + "end": 10150000 + }, + { + "name": "20m Ham Band", + "type": "amateur", + "start": 14000000, + "end": 14350000 + }, + { + "name": "17m Ham Band", + "type": "amateur", + "start": 18068000, + "end": 18168000 + }, + { + "name": "15m Ham Band", + "type": "amateur", + "start": 21000000, + "end": 21450000 + }, + { + "name": "12m Ham Band", + "type": "amateur", + "start": 24890000, + "end": 24990000 + }, + { + "name": "CB", + "type": "amateur", + "start": 26960000, + "end": 27410000 + }, + { + "name": "10m Ham Band", + "type": "amateur", + "start": 28000000, + "end": 29750000 + }, + { + "name": "6m Ham Band", + "type": "amateur", + "start": 50000000, + "end": 54000000 + }, + { + "name": "2m Ham Band", + "type": "amateur", + "start": 144000000, + "end": 148000000 + }, + { + "name": "Marine", + "type": "marine", + "start": 156000000, + "end": 162025000 + }, + { + "name": "1.25m Ham Band", + "type": "amateur", + "start": 222000000, + "end": 225000000 + }, + { + "name": "Military Air", + "type": "military", + "start": 225000000, + "end": 380000000 + }, + { + "name": "Military Sat", + "type": "military", + "start": 240000000, + "end": 270000000 + }, + { + "name": "70cm Ham Band", + "type": "amateur", + "start": 420000000, + "end": 450000000 + }, + { + "name": "PMR446", + "type": "amateur", + "start": 446000000, + "end": 446200000 + }, + { + "name": "33cm Ham Band", + "type": "amateur", + "start": 902000000, + "end": 928000000 + }, + { + "name": "23cm Ham Band", + "type": "amateur", + "start": 1240000000, + "end": 1300000000 + }, + { + "name": "13cm Ham Band", + "type": "amateur", + "start": 2300000000, + "end": 2310000000 + }, + { + "name": "13cm Ham Band", + "type": "amateur", + "start": 2390000000, + "end": 2450000000 + } + ] +} \ No newline at end of file diff --git a/sdrpp_0.2.5_beta_airspyhf/bandplans/germany.json b/sdrpp_0.2.5_beta_airspyhf/bandplans/germany.json new file mode 100644 index 00000000..c9568bf8 --- /dev/null +++ b/sdrpp_0.2.5_beta_airspyhf/bandplans/germany.json @@ -0,0 +1,141 @@ +{ + "name": "Germany", + "country_name": "Germany", + "country_code": "DE", + "author_name": "Tobias Mädel", + "author_url": "https://tbspace.de", + "bands": [ + { + "name": "LW", + "type": "amateur", + "start": 135700, + "end": 137800 + }, + { + "name": "630m", + "type": "amateur", + "start": 472000, + "end": 479000 + }, + { + "name": "160m", + "type": "amateur", + "start": 1810000, + "end": 2000000 + }, + { + "name": "80m", + "type": "amateur", + "start": 3500000, + "end": 3800000 + }, + { + "name": "60m", + "type": "amateur", + "start": 5351500, + "end": 5366500 + }, + { + "name": "40m", + "type": "amateur", + "start": 7000000, + "end": 7200000 + }, + { + "name": "30m", + "type": "amateur", + "start": 10100000, + "end": 10150000 + }, + { + "name": "20m", + "type": "amateur", + "start": 14000000, + "end": 14350000 + }, + { + "name": "17m", + "type": "amateur", + "start": 18068000, + "end": 18168000 + }, + { + "name": "15m", + "type": "amateur", + "start": 21000000, + "end": 21450000 + }, + { + "name": "12m", + "type": "amateur", + "start": 24890000, + "end": 24990000 + }, + { + "name": "CB", + "type": "other", + "start": 26565000, + "end": 27405000 + }, + { + "name": "10m", + "type": "amateur", + "start": 28000000, + "end": 29700000 + }, + { + "name": "6m", + "type": "amateur", + "start": 50030000, + "end": 51000000 + }, + { + "name": "4m", + "type": "amateur", + "start": 70150000, + "end": 70200000 + }, + { + "name": "FM", + "type": "broadcast", + "start": 87500000, + "end": 108000000 + }, + { + "name": "2m", + "type": "amateur", + "start": 144000000, + "end": 146000000 + }, + { + "name": "Freenet", + "type": "other", + "start": 149025000, + "end": 149115625 + }, + { + "name": "70cm", + "type": "amateur", + "start": 430000000, + "end": 440000000 + }, + { + "name": "PMR446", + "type": "other", + "start": 446006250, + "end": 446196875 + }, + { + "name": "23cm", + "type": "amateur", + "start": 1240000000, + "end": 1300000000 + }, + { + "name": "13cm", + "type": "amateur", + "start": 2320000000, + "end": 2450000000 + } + ] +} \ No newline at end of file diff --git a/sdrpp_0.2.5_beta_airspyhf/bandplans/russia.json b/sdrpp_0.2.5_beta_airspyhf/bandplans/russia.json new file mode 100644 index 00000000..3ebcb11c --- /dev/null +++ b/sdrpp_0.2.5_beta_airspyhf/bandplans/russia.json @@ -0,0 +1,135 @@ +{ + "name": "Russia", + "country_name": "Russia", + "country_code": "RU", + "author_name": "Raov", + "author_url": "https://twitter.com/raov_birbtog", + "bands": [ + { + "name": "160m CW", + "type": "amateur", + "start": 1810000, + "end": 1838000 + }, + { + "name": "160m NB", + "type": "amateur", + "start": 1838000, + "end": 1840000 + }, + { + "name": "160m + Digi", + "type": "amateur", + "start": 1840000, + "end": 1843000 + }, + { + "name": "160m", + "type": "amateur", + "start": 1843000, + "end": 2000000 + }, + { + "name": "80m CW", + "type": "amateur", + "start": 3500000, + "end": 3510000 + }, + { + "name": "80m CW Contest", + "type": "amateur", + "start": 3510000, + "end": 3560000 + }, + { + "name": "80m CW", + "type": "amateur", + "start": 3560000, + "end": 3570000 + }, + { + "name": "80m NB, Digi 200Hz", + "type": "amateur", + "start": 3570000, + "end": 3580000 + }, + { + "name": "80m NB, Digi 500Hz", + "type": "amateur", + "start": 3580000, + "end": 3600000 + }, + { + "name": "80m SSB Contest", + "type": "amateur", + "start": 3600000, + "end": 3650000 + }, + { + "name": "80m", + "type": "amateur", + "start": 3650000, + "end": 3700000 + }, + { + "name": "80m SSB Contest", + "type": "amateur", + "start": 3700000, + "end": 3800000 + }, + { + "name": "60m CW 200Hz", + "type": "amateur", + "start": 5351500, + "end": 5354000 + }, + { + "name": "60m USB", + "type": "amateur", + "start": 5354000, + "end": 5366000 + }, + { + "name": "60m CW 20Hz", + "type": "amateur", + "start": 5356000, + "end": 5366500 + }, + { + "name": "40m CW", + "type": "amateur", + "start": 7000000, + "end": 7040000 + }, + { + "name": "40m NB, Digi 500Hz", + "type": "amateur", + "start": 7040000, + "end": 7050000 + }, + { + "name": "40m", + "type": "amateur", + "start": 7050000, + "end": 7060000 + }, + { + "name": "40m SSB Contest", + "type": "amateur", + "start": 7060000, + "end": 7100000 + }, + { + "name": "40m", + "type": "amateur", + "start": 7100000, + "end": 7130000 + }, + { + "name": "40m SSB Contest", + "type": "amateur", + "start": 7130000, + "end": 7200000 + } + ] +} \ No newline at end of file diff --git a/sdrpp_0.2.5_beta_airspyhf/config.json b/sdrpp_0.2.5_beta_airspyhf/config.json new file mode 100644 index 00000000..30c71725 --- /dev/null +++ b/sdrpp_0.2.5_beta_airspyhf/config.json @@ -0,0 +1,46 @@ +{ + "bandColors": { + "amateur": "#FF0000FF", + "aviation": "#00FF00FF", + "broadcast": "#0000FFFF", + "marine": "#00FFFFFF", + "military": "#FFFF00FF" + }, + "bandPlan": "General", + "bandPlanEnabled": true, + "centerTuning": false, + "fftHeight": 300, + "frequency": 100004000, + "max": 0.0, + "maximized": false, + "menuOrder": [ + "Source", + "Radio", + "Recorder", + "Sinks", + "Audio", + "Scripting", + "Band Plan", + "Display" + ], + "menuWidth": 300, + "min": -70.0, + "moduleInstances": { + "AirspyHF+ Source": "airspyhf_source", + "Audio Sink": "audio_sink", + "PlutoSDR Source": "plutosdr_source", + "RTL-TCP Source": "rtl_tcp_source", + "Radio": "radio", + "Recorder": "recorder", + "SoapySDR Source": "soapy_source" + }, + "modules": [], + "offset": 0.0, + "showWaterfall": true, + "source": "", + "streams": {}, + "windowSize": { + "h": 720, + "w": 1280 + } +} \ No newline at end of file diff --git a/sdrpp_0.2.5_beta_airspyhf/modules/.gitkeep b/sdrpp_0.2.5_beta_airspyhf/modules/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sdrpp_0.2.5_beta_airspyhf/recordings/.gitkeep b/sdrpp_0.2.5_beta_airspyhf/recordings/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sdrpp_0.2.5_beta_airspyhf/res/fonts/Roboto-Medium.ttf b/sdrpp_0.2.5_beta_airspyhf/res/fonts/Roboto-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..39c63d7461796094c0b8889ee8fe2706d344a99a GIT binary patch literal 162588 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 cASb?` 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
  • 2a-ytx-(Y1%*Q`;e(V?9Smc22g?_xG~I&%zq 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≀A#j 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%0AHUW;|^l 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 l^bJX2xPCqo{Z_p9vj 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 Pf*TyNvfE!uro{apG(B^a literal 0 HcmV?d00001 diff --git a/sdrpp_0.2.5_beta_airspyhf/res/icons/normal_tuning.png b/sdrpp_0.2.5_beta_airspyhf/res/icons/normal_tuning.png new file mode 100644 index 0000000000000000000000000000000000000000..76d171e2d9dd0905889f79e14222e118cdda82a1 GIT binary patch literal 2785 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 literal 0 HcmV?d00001 diff --git a/sdrpp_0.2.5_beta_airspyhf/res/icons/play.png b/sdrpp_0.2.5_beta_airspyhf/res/icons/play.png new file mode 100644 index 0000000000000000000000000000000000000000..a5bc44df471f632b59b2d91e27773c5f179023df GIT binary patch literal 2014 zcmZ{lTUZm<7RT3&0}c`}KvnQUh~!dl5QQ2Qfe=L)6oNvnRVgVT@m5g0aS1R$gz5p} zH?iP{g~Ve~qzL*60#!*gr_hKOj&h2%T1*LwwrYroL=nzJpSvH{@4wet`|_~X-iM;2 z!ki{ep9BC-MEJ^e00=D+!0l;lPOC`+2M;$ zx*3&R>X0x!7^IGPZXM5u`FX5>b!MErI2x zCq!GNXr(|!MPAt~Xt`WiMhFUb@d0*R<^279lWBHEB4PqL3_D>q%R^JHUtL%=@u z7s0QpgDfuQe>Mqx=Ip=I=(E}qeO(z${Bhj)F0X@LB}lsLxnmuH53G_PEw#gTi#eEo!)e&O_8q#(6|MMR z3}o^#|1da3+ZFK41+8@>-zv!Mm}Zt(XTmgrVqFrZi4*GvFio~tw-wW{#G>737mKZN zM+VB7yOPkZV77DzDqx9q?U*!2K{h$)4h)I$RbDW(3ZLW(nOw{chbwOR-b{Eb#xHuojS}Wg5gePx-cSI71L9pcBAug< zvQXU}{Avb9R=eioFn<|_LP2Pu2p)|um`m$-n^xi&I1B$`;!r0mV>992jXJRxoU8m& zK__kf$vF>19&z*nOb7E>My*%|Q$JsnBQ{)osA zuvAb*4lvYj{Rm&~WH%V-?E47)2Xw@%mansj5Hd#|Y;fdG{sac}T1tLl=mfoK%REDG z1ZysIwZ#xGSbb82yjU4&Im7WSv0dc-HVDx$(dbN~^SL5)(b0cmBPX z@|C5(W>pGdtNtlRxMk!$sVWX0w1=ijB27m1cBi)pp{8#QHJN7>%`LG-VggjADvq{3 zt0WI}{uR^54uh_xVx|pCDm-b3zKmn!hJvQJzEC?GcKOFS(=%y6++-X4F1Xt=Gm}3X zoq~}1=e$;LL&Ns?Bu36u7;ZjpI!Qz&pX!rbMsx@F`(1vfu9YhZ92iq=>C&fDm)dY< zYM>3<7~{)P-8%QNAdGDF8(o3Jo-HFg=mKju3+VzoXiN=(frq~_a=#dtHTmB04t5kZ z+~Qf&sTql*n_k(AQg88Eg@yu;oI|`Yx=^o~Y1??q97dP%bu*vV?Pfl$ubJmDVY}bx zVT|0!&?0mPFtlvC8yH%;8}3#8Vm|OXce*~c6a-~_O3pPXRhMI}J~Kt|=}mLMY&e=Q zGRqZ8ubTsSu(Q)F6T!Ws#@pZ0?Wb3>kw*!P+;)sCa34c)n6_w??$Py(+&qljL%b+9 z`cg2zr#u2l={@{Q~({q44;&dFc_jQEuF`78L{+-oB4XgBa=( z2hlh~ebzywWvIQ~$T9bzpK(zzL;WZHtmHI2DH6VQ9YbCEddS6#@VRM@)9stmVA)GG@U1D-c^p%a51}QKdls(>aqb;ycvA;j12$KOfJ{XnT-&J~Ma1lHNlc`h>ky zPs45#i+Z3o6)ntM_NTYbSjx}HrH=c_CA;=foqnT&|Eh?ba^t0f-f}IsxFPAEzrzm^ avg!S_zEd1MnFR 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 D`>Ge= literal 0 HcmV?d00001 diff --git a/sdrpp_0.2.5_beta_airspyhf/res/icons/sdrpp.png b/sdrpp_0.2.5_beta_airspyhf/res/icons/sdrpp.png new file mode 100644 index 0000000000000000000000000000000000000000..03cf61838dddb018ecb2e3cb51ece291b80101a1 GIT binary patch literal 21113 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 literal 0 HcmV?d00001 diff --git a/sdrpp_0.2.5_beta_airspyhf/res/icons/stop.png b/sdrpp_0.2.5_beta_airspyhf/res/icons/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..6fac0cbc1fd5d64c03a81a7050578da1e71614aa GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJEi=bkQ(Ar*7p-rl%+YAM69 zkIy?yBDZ-3@%r*@ZF5wJy_LiBzj4BvrMk1E7A@L(A#D4Bl?9xa7M{J>#1g2n(NkdU zvITyJLwCeB>BYQz|6Ok0`Sjh_t1IhH|F(T!{mu|%9WL-K*|e%)Z`}K@?)_?(GoQFj zO7`TFzcTXy!yW%3>yukmwtxHOz5416@1jics|!_@PoCqw>FbN^8zttGV|3aR&123!_R9O) zJ@MeSNimr_m@7>6>TbL}({oXhu_E`7n$F#8U}hnR`Pp-xl&zIA!+F0OExsS_yf_F{ zQ*}r!r%BzN{~X7GDfZX!#S41Wv~g{QrHuCl*ZZmwX1 zwy;^^%YCyAfywQ@`p?osdOA15jos2&9=unH_qox!^q1kutCELTUu=H;)ylI^W#_~v zKVH;EEV%5cr+zZa^xLF4UmX|NPugRgDLw5;kX-B^<1>F$9+-RD&ECPk`R|k`YiF|0 z_{y=N_`lPn&5O@7PQL3^q;>M{-1|9|EEPF(pS)F(Px*b;F{8lrMSSv{^Z)=LDu8&%r*U-=X;yi?yf_es>Y`QN{%l;A36K;jL5f3lwr$Xfkr R!E{p)-_zC4Wt~$(69D|o#Iyha literal 0 HcmV?d00001 diff --git a/sdrpp_0.2.5_beta_airspyhf/res/icons/unmuted.png b/sdrpp_0.2.5_beta_airspyhf/res/icons/unmuted.png new file mode 100644 index 0000000000000000000000000000000000000000..64fcb987d24be050ee590db052262f69701beeee GIT binary patch literal 5677 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 O4A`EwKUHIayZwK6QfT%7 literal 0 HcmV?d00001 diff --git a/soapy_source/src/main.cpp b/soapy_source/src/main.cpp index 4d117360..84331c2a 100644 --- a/soapy_source/src/main.cpp +++ b/soapy_source/src/main.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #define CONCAT(a, b) ((std::string(a) + b).c_str()) @@ -386,7 +387,7 @@ private: }; MOD_EXPORT void _INIT_() { - config.setPath(ROOT_DIR "/soapy_source_config.json"); + config.setPath(options::opts.root + "/soapy_source_config.json"); json defConf; defConf["device"] = ""; defConf["devices"] = json({}); diff --git a/spyserver_source/CMakeLists.txt b/spyserver_source/CMakeLists.txt new file mode 100644 index 00000000..48a43217 --- /dev/null +++ b/spyserver_source/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.13) +project(spyserver_source) + +if (MSVC) + set(CMAKE_CXX_FLAGS "-O2 /std:c++17 /EHsc") +else() + set(CMAKE_CXX_FLAGS "-O3 -std=c++17 -fpermissive") +endif (MSVC) + +include_directories("src/") + +file(GLOB SRC "src/*.cpp") + +add_library(spyserver_source SHARED ${SRC}) +target_link_libraries(spyserver_source PRIVATE sdrpp_core) +set_target_properties(spyserver_source PROPERTIES PREFIX "") + +if(WIN32) + target_link_libraries(spyserver_source PRIVATE wsock32 ws2_32) +endif() \ No newline at end of file diff --git a/spyserver_source/src/main.cpp b/spyserver_source/src/main.cpp new file mode 100644 index 00000000..64c82a9a --- /dev/null +++ b/spyserver_source/src/main.cpp @@ -0,0 +1,178 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define CONCAT(a, b) ((std::string(a) + b).c_str()) + +SDRPP_MOD_INFO { + /* Name: */ "spyserver_source", + /* Description: */ "SpyServer source module for SDR++", + /* Author: */ "Ryzerth", + /* Version: */ 0, 1, 0, + /* Max instances */ 1 +}; + +class SpyServerSourceModule : public ModuleManager::Instance { +public: + SpyServerSourceModule(std::string name) { + this->name = name; + + sampleRate = 2560000.0; + + handler.ctx = this; + handler.selectHandler = menuSelected; + handler.deselectHandler = menuDeselected; + handler.menuHandler = menuHandler; + handler.startHandler = start; + handler.stopHandler = stop; + handler.tuneHandler = tune; + handler.stream = &client.iqStream; + sigpath::sourceManager.registerSource("SpyServer", &handler); + } + + ~SpyServerSourceModule() { + + } + + void enable() { + enabled = true; + } + + void disable() { + enabled = false; + } + + bool isEnabled() { + return enabled; + } + +private: + static void menuSelected(void* ctx) { + SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; + core::setInputSampleRate(_this->sampleRate); + spdlog::info("SpyServerSourceModule '{0}': Menu Select!", _this->name); + } + + static void menuDeselected(void* ctx) { + SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; + spdlog::info("SpyServerSourceModule '{0}': Menu Deselect!", _this->name); + } + + static void start(void* ctx) { + SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; + if (_this->running) { + return; + } + if (!_this->client.connectToSpyserver(_this->ip, _this->port)) { + spdlog::error("Could not connect to {0}:{1}", _this->ip, _this->port); + return; + } + _this->client.tune(_this->freq); + _this->client.setSampleRate(_this->sampleRate); + //_this->client.setGainIndex(_this->gain); + //_this->client.setGainMode(!_this->tunerAGC); + //_this->client.setDirectSampling(_this->directSamplingMode); + //_this->client.setAGCMode(_this->rtlAGC); + _this->running = true; + spdlog::info("SpyServerSourceModule '{0}': Start!", _this->name); + } + + static void stop(void* ctx) { + SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; + if (!_this->running) { + return; + } + _this->running = false; + _this->client.disconnect(); + spdlog::info("SpyServerSourceModule '{0}': Stop!", _this->name); + } + + static void tune(double freq, void* ctx) { + SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; + if (_this->running) { + _this->client.tune(freq); + } + _this->freq = freq; + spdlog::info("SpyServerSourceModule '{0}': Tune: {1}!", _this->name, freq); + } + + static void menuHandler(void* ctx) { + SpyServerSourceModule* _this = (SpyServerSourceModule*)ctx; + float menuWidth = ImGui::GetContentRegionAvailWidth(); + float portWidth = ImGui::CalcTextSize("00000").x + 20; + + ImGui::SetNextItemWidth(menuWidth - portWidth); + ImGui::InputText(CONCAT("##_ip_select_", _this->name), _this->ip, 1024); + ImGui::SameLine(); + ImGui::SetNextItemWidth(portWidth); + ImGui::InputInt(CONCAT("##_port_select_", _this->name), &_this->port, 0); + + ImGui::SetNextItemWidth(ImGui::CalcTextSize("OOOOOOOOOO").x); + if (ImGui::Combo("Direct sampling", &_this->directSamplingMode, "Disabled\0I branch\0Q branch\0")) { + if (_this->running) { + //_this->client.setDirectSampling(_this->directSamplingMode); + } + } + + if (ImGui::Checkbox("RTL AGC", &_this->rtlAGC)) { + if (_this->running) { + //_this->client.setAGCMode(_this->rtlAGC); + } + } + + if (ImGui::Checkbox("Tuner AGC", &_this->tunerAGC)) { + if (_this->running) { + //_this->client.setGainMode(!_this->tunerAGC); + if (!_this->tunerAGC) { + //_this->client.setGainIndex(_this->gain); + } + } + } + + if (_this->tunerAGC) { style::beginDisabled(); } + ImGui::SetNextItemWidth(menuWidth); + if (ImGui::SliderInt(CONCAT("##_gain_select_", _this->name), &_this->gain, 0, 29, "")) { + if (_this->running) { + //_this->client.setGainIndex(_this->gain); + } + } + if (_this->tunerAGC) { style::endDisabled(); } + } + + std::string name; + bool enabled = true; + dsp::stream stream; + double sampleRate; + SourceManager::SourceHandler handler; + std::thread workerThread; + SpyServerClient client; + bool running = false; + double freq; + char ip[1024] = "localhost"; + int port = 5555; + int gain = 0; + bool rtlAGC = false; + bool tunerAGC = false; + int directSamplingMode = 0; +}; + +MOD_EXPORT void _INIT_() { + // Do your one time init here +} + +MOD_EXPORT ModuleManager::Instance* _CREATE_INSTANCE_(std::string name) { + return new SpyServerSourceModule(name); +} + +MOD_EXPORT void _DELETE_INSTANCE_(ModuleManager::Instance* instance) { + delete (SpyServerSourceModule*)instance; +} + +MOD_EXPORT void _END_() { + // Do your one shutdown here +} \ No newline at end of file diff --git a/spyserver_source/src/spyserver_client.cpp b/spyserver_source/src/spyserver_client.cpp new file mode 100644 index 00000000..504af7da --- /dev/null +++ b/spyserver_source/src/spyserver_client.cpp @@ -0,0 +1,254 @@ +#include +#include + +SpyServerClient::SpyServerClient() { + +} + +bool SpyServerClient::connectToSpyserver(char* host, int port) { + if (connected) { + return true; + } + +#ifdef _WIN32 + struct addrinfo *result = NULL; + struct addrinfo *ptr = NULL; + struct addrinfo hints; + + ZeroMemory( &hints, sizeof(hints) ); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + + char buf[128]; + sprintf(buf, "%hu", port); + + int iResult = getaddrinfo(host, buf, &hints, &result); + if (iResult != 0) { + // TODO: log error + printf("A"); + WSACleanup(); + return false; + } + ptr = result; + + sock = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); + + if (sock == INVALID_SOCKET) { + // TODO: log error + printf("B"); + freeaddrinfo(result); + WSACleanup(); + return false; + } + + iResult = connect(sock, ptr->ai_addr, (int)ptr->ai_addrlen); + if (iResult == SOCKET_ERROR) { + printf("C"); + closesocket(sock); + freeaddrinfo(result); + WSACleanup(); + return false; + } + freeaddrinfo(result); +#else + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) { + // TODO: Log error + return false; + } + struct hostent *server = gethostbyname(host); + struct sockaddr_in serv_addr; + bzero(&serv_addr, sizeof(struct sockaddr_in)); + serv_addr.sin_family = AF_INET; + bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); + serv_addr.sin_port = htons(port); + if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) { + // TODO: log error + return false; + } +#endif + + // Switch to non-blocking mode +#ifdef _WIN32 + unsigned long mode = 1; + ioctlsocket(sock, FIONBIO, &mode); +#else + fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFL, 0) | O_NONBLOCK) +#endif + + connected = true; + waiting = true; + + workerThread = std::thread(&SpyServerClient::worker, this); + + printf("Connected"); + + return true; +} + +bool SpyServerClient::disconnect() { + if (!connected) { + return false; + } + waiting = false; + if (workerThread.joinable()) { + workerThread.join(); + } +#ifdef _WIN32 + closesocket(sock); + WSACleanup(); +#else + close(sockfd); +#endif + connected = false; + return true; +} + +void SpyServerClient::setSampleRate(uint32_t setSampleRate) { + +} + +void SpyServerClient::tune(uint32_t freq) { + +} + +int SpyServerClient::receive(char* buf, int count) { +#ifdef _WIN32 + return checkError(recv(sock, (char*)buf, count, 0), count); +#else + return checkError(read(sockfd, buf, count)); +#endif +} + +int SpyServerClient::checkError(int len, int expected) { +#ifdef _WIN32 + if (len != SOCKET_ERROR) { return len; } + int code = WSAGetLastError(); + if (code == WSAEWOULDBLOCK) { return 0; } + spdlog::error("{0}", code); + return -1; +#else + if (len <= expected) { + return len; + } + if (len == EAGAIN || len == EWOULDBLOCK) { return 0; } + return -1; +#endif +} + +int SpyServerClient::receiveSync(char* buf, int count) { + int len = receive(buf, count); + while (len == 0 && waiting) { + len = receive(buf, count); + } + if (!waiting) { + return 0; + } + return len; +} + +void SpyServerClient::worker() { + // Allocate dummy buffer + char* dummyBuf = (char*)malloc(1000000); + + // Send hello + hello(); + + // SETTING_STREAMING_MODE = 0, + // SETTING_STREAMING_ENABLED = 1, + // SETTING_GAIN = 2, + + // SETTING_IQ_FORMAT = 100, // 0x64 + // SETTING_IQ_FREQUENCY = 101, // 0x65 + // SETTING_IQ_DECIMATION = 102, // 0x66 + // SETTING_IQ_DIGITAL_GAIN = 103, // 0x67 + + // Set settings + setSetting(SETTING_STREAMING_MODE, STREAM_MODE_IQ_ONLY); + setSetting(SETTING_GAIN, 5); + setSetting(SETTING_IQ_FORMAT, STREAM_FORMAT_FLOAT); + setSetting(SETTING_IQ_FREQUENCY, 2000000); + setSetting(SETTING_IQ_DECIMATION, 1); + setSetting(SETTING_IQ_DIGITAL_GAIN, 1); + + // Enable stream + setSetting(SETTING_STREAMING_ENABLED, 1); + + // Main message receive loop + while (true) { + MessageHeader msgHeader; + int len = receiveSync((char*)&msgHeader, sizeof(MessageHeader)); + if (len < 0) { + spdlog::error("Socket error"); + return; + } + if (len == 0) { return; } + + int type = (msgHeader.MessageType & 0xFFFF); + + if (type == MSG_TYPE_DEVICE_INFO) { + DeviceInfo devInfo; + len = receiveSync((char*)&devInfo, sizeof(DeviceInfo)); + if (len < 0) { + spdlog::error("A Socket error"); + return; + } + if (len == 0) { return; } + + spdlog::warn("Dev type: {0}", devInfo.DeviceType); + } + // else if (type == MSG_TYPE_FLOAT_IQ) { + // //if (iqStream.aquire() < 0) { return; } + // len = receiveSync(dummyBuf, msgHeader.BodySize); + // //iqStream.write(msgHeader.BodySize); + // if (len < 0) { + // spdlog::error("T Socket error"); + // return; + // } + // if (len == 0) { return; } + // } + else if (msgHeader.BodySize > 0) { + len = receiveSync(dummyBuf, msgHeader.BodySize); + if (len < 0) { + spdlog::error("B Socket error {0}", msgHeader.ProtocolID); + return; + } + if (len == 0) { return; } + } + } + + free(dummyBuf); +} + +void SpyServerClient::sendCommand(uint32_t cmd, void* body, size_t bodySize) { + int size = sizeof(CommandHeader) + bodySize; + char* buf = new char[size]; + CommandHeader* cmdHdr = (CommandHeader*)buf; + memcpy(&buf[sizeof(CommandHeader)], body, bodySize); + cmdHdr->CommandType = cmd; + cmdHdr->BodySize = bodySize; +#ifdef _WIN32 + send(sock, buf, size, 0); +#else + write(sockfd, buf, size); +#endif + delete[] buf; +} + +void SpyServerClient::setSetting(uint32_t setting, uint32_t value) { + char buf[sizeof(SettingTarget) + sizeof(uint32_t)]; + SettingTarget* tgt = (SettingTarget*)buf; + uint32_t* val = (uint32_t*)&buf[sizeof(SettingTarget)]; + tgt->SettingType = setting; + *val = value; + sendCommand(CMD_SET_SETTING, buf, sizeof(SettingTarget) + sizeof(uint32_t)); +} + +void SpyServerClient::hello() { + char buf[1024]; + ClientHandshake* handshake = (ClientHandshake*)buf; + handshake->ProtocolVersion = SPYSERVER_PROTOCOL_VERSION; + strcpy(&buf[sizeof(ClientHandshake)], "sdr++"); + sendCommand(CMD_HELLO, buf, sizeof(ClientHandshake) + 5); +} \ No newline at end of file diff --git a/spyserver_source/src/spyserver_client.h b/spyserver_source/src/spyserver_client.h new file mode 100644 index 00000000..23f7fde6 --- /dev/null +++ b/spyserver_source/src/spyserver_client.h @@ -0,0 +1,69 @@ +#pragma once +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#include +#else +#include +#include +#include +#include +#include +#include +#endif + +#ifdef _WIN32 +#define __attribute__(x) +#pragma pack(push, 1) +#endif +struct command_t{ + unsigned char cmd; + unsigned int param; +}__attribute__((packed)); +#ifdef _WIN32 +#pragma pack(pop) +#endif + +class SpyServerClient { +public: + SpyServerClient(); + + bool connectToSpyserver(char* host, int port); + bool disconnect(); + + void start(); + void stop(); + + void setSampleRate(uint32_t setSampleRate); + + void tune(uint32_t freq); + + dsp::stream iqStream; + +private: + int receive(char* buf, int count); + int receiveSync(char* buf, int count); + int checkError(int err, int expected); + void worker(); + + void sendCommand(uint32_t cmd, void* body, size_t bodySize); + void setSetting(uint32_t setting, uint32_t value); + + void hello(); + +#ifdef _WIN32 + SOCKET sock; +#else + int sockfd; +#endif + bool connected = false; + bool waiting = false; + + std::thread workerThread; + +}; \ No newline at end of file diff --git a/spyserver_source/src/spyserver_protocol.h b/spyserver_source/src/spyserver_protocol.h new file mode 100644 index 00000000..de9ca6cb --- /dev/null +++ b/spyserver_source/src/spyserver_protocol.h @@ -0,0 +1,188 @@ +/* +SPY Server protocol structures and constants +Copyright (C) 2017 Youssef Touil youssef@live.com +*/ + + +#pragma once + +#include +#include + +#define SPYSERVER_PROTOCOL_VERSION (((2) << 24) | ((0) << 16) | (1700)) + +#define SPYSERVER_MAX_COMMAND_BODY_SIZE (256) +#define SPYSERVER_MAX_MESSAGE_BODY_SIZE (1 << 20) +#define SPYSERVER_MAX_DISPLAY_PIXELS (1 << 15) +#define SPYSERVER_MIN_DISPLAY_PIXELS (100) +#define SPYSERVER_MAX_FFT_DB_RANGE (150) +#define SPYSERVER_MIN_FFT_DB_RANGE (10) +#define SPYSERVER_MAX_FFT_DB_OFFSET (100) + +enum DeviceType +{ + DEVICE_INVALID = 0, + DEVICE_AIRSPY_ONE = 1, + DEVICE_AIRSPY_HF = 2, + DEVICE_RTLSDR = 3, +}; + +enum CommandType +{ + CMD_HELLO = 0, + CMD_GET_SETTING = 1, + CMD_SET_SETTING = 2, + CMD_PING = 3, +}; + +enum SettingType +{ + SETTING_STREAMING_MODE = 0, + SETTING_STREAMING_ENABLED = 1, + SETTING_GAIN = 2, + + SETTING_IQ_FORMAT = 100, // 0x64 + SETTING_IQ_FREQUENCY = 101, // 0x65 + SETTING_IQ_DECIMATION = 102, // 0x66 + SETTING_IQ_DIGITAL_GAIN = 103, // 0x67 + + SETTING_FFT_FORMAT = 200, // 0xc8 + SETTING_FFT_FREQUENCY = 201, // 0xc9 + SETTING_FFT_DECIMATION = 202, // 0xca + SETTING_FFT_DB_OFFSET = 203, // 0xcb + SETTING_FFT_DB_RANGE = 204, // 0xcc + SETTING_FFT_DISPLAY_PIXELS = 205, // 0xcd +}; + +enum StreamType +{ + STREAM_TYPE_STATUS = 0, + STREAM_TYPE_IQ = 1, + STREAM_TYPE_AF = 2, + STREAM_TYPE_FFT = 4, +}; + + +enum StreamingMode +{ + STREAM_MODE_IQ_ONLY = STREAM_TYPE_IQ, // 0x01 + STREAM_MODE_AF_ONLY = STREAM_TYPE_AF, // 0x02 + STREAM_MODE_FFT_ONLY = STREAM_TYPE_FFT, // 0x04 + STREAM_MODE_FFT_IQ = STREAM_TYPE_FFT | STREAM_TYPE_IQ, // 0x05 + STREAM_MODE_FFT_AF = STREAM_TYPE_FFT | STREAM_TYPE_AF, // 0x06 +}; + +enum StreamFormat +{ + STREAM_FORMAT_INVALID = 0, + STREAM_FORMAT_UINT8 = 1, + STREAM_FORMAT_INT16 = 2, + STREAM_FORMAT_INT24 = 3, + STREAM_FORMAT_FLOAT = 4, + STREAM_FORMAT_DINT4 = 5, +}; + +enum MessageType +{ + MSG_TYPE_DEVICE_INFO = 0, + MSG_TYPE_CLIENT_SYNC = 1, + MSG_TYPE_PONG = 2, + MSG_TYPE_READ_SETTING = 3, + + MSG_TYPE_UINT8_IQ = 100, // 0x64 + MSG_TYPE_INT16_IQ = 101, // 0x65 + MSG_TYPE_INT24_IQ = 102, // 0x66 + MSG_TYPE_FLOAT_IQ = 103, // 0x67 + + MSG_TYPE_UINT8_AF = 200, // 0xc8 + MSG_TYPE_INT16_AF = 201, // 0xc9 + MSG_TYPE_INT24_AF = 202, // 0xca + MSG_TYPE_FLOAT_AF = 203, // 0xcb + + MSG_TYPE_DINT4_FFT = 300, //0x12C + MSG_TYPE_UINT8_FFT = 301, //0x12D +}; + +#ifdef _WIN32 +#define __attribute__(x) +#pragma pack(push, 1) +#endif + +struct ClientHandshake +{ + uint32_t ProtocolVersion; + // SDR# doesn't seem to send this + //uint32_t ClientNameLength; +}__attribute__((packed)); + +struct CommandHeader +{ + uint32_t CommandType; + uint32_t BodySize; +}__attribute__((packed)); + +struct SettingTarget +{ + // Again, not used + //uint32_t StreamType; + uint32_t SettingType; +}__attribute__((packed)); + +struct MessageHeader +{ + uint32_t ProtocolID; + uint32_t MessageType; + uint32_t StreamType; + uint32_t SequenceNumber; + uint32_t BodySize; +}__attribute__((packed)); + +struct DeviceInfo +{ + uint32_t DeviceType; + uint32_t DeviceSerial; + uint32_t MaximumSampleRate; + uint32_t MaximumBandwidth; + uint32_t DecimationStageCount; + uint32_t GainStageCount; + uint32_t MaximumGainIndex; + uint32_t MinimumFrequency; + uint32_t MaximumFrequency; + uint32_t Resolution; + uint32_t MinimumIQDecimation; + uint32_t ForcedIQFormat; +}__attribute__((packed)); + +struct ClientSync +{ + uint32_t CanControl; + uint32_t Gain; + uint32_t DeviceCenterFrequency; + uint32_t IQCenterFrequency; + uint32_t FFTCenterFrequency; + uint32_t MinimumIQCenterFrequency; + uint32_t MaximumIQCenterFrequency; + uint32_t MinimumFFTCenterFrequency; + uint32_t MaximumFFTCenterFrequency; +}__attribute__((packed)); + +struct ComplexInt16 +{ + int16_t real; + int16_t imag; +}__attribute__((packed)); + +struct ComplexUInt8 +{ + uint8_t real; + uint8_t imag; +}__attribute__((packed)); + +#ifdef _WIN32 +#pragma pack(pop) +#endif + +enum ParserPhase { + AcquiringHeader, + ReadingData +}; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 023f73bc..d349eb46 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ #include #include -int main() { - return sdrpp_main(); +int main(int argc, char *argv[]) { + return sdrpp_main(argc, argv); } \ No newline at end of file