diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index ce255d00..02372501 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -37,7 +37,7 @@ jobs: run: 7z x libusb.7z -olibusb_old ; rm "C:/Program Files/PothosSDR/bin/libusb-1.0.dll" ; cp "libusb_old/MS64/dll/libusb-1.0.dll" "C:/Program Files/PothosSDR/bin/" - name: Download SDRPlay API - run: Invoke-WebRequest -Uri "https://drive.google.com/uc?id=12UHPMwkfa67A11QZDmpCT4iwHnyJHWuu" -OutFile ${{runner.workspace}}/SDRPlay.zip + run: Invoke-WebRequest -Uri "https://drive.google.com/uc?id=12UHPMwkfa67A11QZDmpCT4iwHnyJHWuu&confirm=t" -OutFile ${{runner.workspace}}/SDRPlay.zip - name: Install SDRPlay API run: 7z x ${{runner.workspace}}/SDRPlay.zip -o"C:/Program Files/" @@ -58,14 +58,17 @@ jobs: run: mkdir "C:/Program Files/codec2" ; mkdir "C:/Program Files/codec2/include" ; mkdir "C:/Program Files/codec2/include/codec2" ; mkdir "C:/Program Files/codec2/lib" ; cd "codec2" ; xcopy "src" "C:/Program Files/codec2/include" ; cd "build" ; xcopy "src" "C:/Program Files/codec2/lib" ; xcopy "codec2" "C:/Program Files/codec2/include/codec2" - name: Install vcpkg dependencies - run: vcpkg install fftw3:x64-windows glfw3:x64-windows portaudio:x64-windows zstd:x64-windows + run: vcpkg install fftw3:x64-windows glfw3:x64-windows portaudio:x64-windows zstd:x64-windows libusb:x64-windows - name: Install rtaudio run: git clone https://github.com/thestk/rtaudio ; cd rtaudio ; git checkout 2f2fca4502d506abc50f6d4473b2836d24cfb1e3 ; mkdir build ; cd build ; cmake .. ; cmake --build . --config Release ; cmake --install . + - name: Install libperseus-sdr + run: git clone https://github.com/AlexandreRouma/libperseus-sdr ; cd libperseus-sdr ; mkdir build ; cd build ; cmake .. "-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake" ; cmake --build . --config Release ; mkdir "C:/Program Files/PothosSDR/include/perseus-sdr" ; cp Release/perseus-sdr.dll "C:/Program Files/PothosSDR/bin" ; cp Release/perseus-sdr.lib "C:/Program Files/PothosSDR/bin" ; cd .. ; xcopy "src" "C:/Program Files/PothosSDR/include/perseus-sdr" + - name: Prepare CMake working-directory: ${{runner.workspace}}/build - run: cmake "$Env:GITHUB_WORKSPACE" "-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake" -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON + run: cmake "$Env:GITHUB_WORKSPACE" "-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake" -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_PERSEUS_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON - name: Build working-directory: ${{runner.workspace}}/build @@ -97,7 +100,7 @@ jobs: run: rm -f /usr/local/bin/2to3* /usr/local/bin/idle3* /usr/local/bin/pydoc3* /usr/local/bin/python3* /usr/local/bin/python3-config* && brew reinstall gettext - name: Install dependencies - run: brew install pkg-config libusb fftw glfw airspy airspyhf portaudio hackrf rtl-sdr libbladerf codec2 zstd && pip3 install mako + run: brew install pkg-config libusb fftw glfw airspy airspyhf portaudio hackrf rtl-sdr libbladerf codec2 zstd autoconf automake libtool && pip3 install mako - name: Install volk run: git clone --recursive https://github.com/gnuradio/volk && cd volk && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j3 && sudo make install && cd ../../ @@ -114,9 +117,12 @@ jobs: - name: Install LimeSuite run: git clone https://github.com/myriadrf/LimeSuite && cd LimeSuite && mkdir builddir && cd builddir && cmake -DCMAKE_BUILD_TYPE=Release .. && make -j3 && sudo make install && cd ../../ + - name: Install libperseus + run: git clone https://github.com/Microtelecom/libperseus-sdr && cd libperseus-sdr && autoreconf -i && ./configure --prefix=/usr/local && make && make install && cd .. + - name: Prepare CMake working-directory: ${{runner.workspace}}/build - run: cmake $GITHUB_WORKSPACE -DOPT_BUILD_PLUTOSDR_SOURCE=ON -DOPT_BUILD_SOAPY_SOURCE=OFF -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_AUDIO_SINK=OFF -DOPT_BUILD_PORTAUDIO_SINK=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_AUDIO_SOURCE=OFF -DUSE_BUNDLE_DEFAULTS=ON -DCMAKE_BUILD_TYPE=Release + run: cmake $GITHUB_WORKSPACE -DOPT_BUILD_PLUTOSDR_SOURCE=ON -DOPT_BUILD_SOAPY_SOURCE=OFF -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_AUDIO_SINK=OFF -DOPT_BUILD_PORTAUDIO_SINK=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_PERSEUS_SOURCE=ON -DOPT_BUILD_AUDIO_SOURCE=OFF -DUSE_BUNDLE_DEFAULTS=ON -DCMAKE_BUILD_TYPE=Release - name: Build working-directory: ${{runner.workspace}}/build @@ -275,7 +281,7 @@ jobs: - name: Prepare CMake working-directory: ${{runner.workspace}}/build - run: cmake $GITHUB_WORKSPACE -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_USRP_SOURCE=ON + run: cmake $GITHUB_WORKSPACE -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_USRP_SOURCE=ON -DOPT_BUILD_PERSEUS_SOURCE=ON - name: Build working-directory: ${{runner.workspace}}/build diff --git a/contributing.md b/contributing.md index 5cb4c536..d6ece389 100644 --- a/contributing.md +++ b/contributing.md @@ -1,6 +1,7 @@ # Pull Requests -TODO +**I DO NOT ACCEPT PULL-REQUEST FOR FEATURES OR BUGFIXES REQUIRING SIGNIFICANT CODE/STRUCTURE CHANGES.** +**SUCH PULL REQUESTS WILL BE CLOSED AUTOMATICALLY. OPEN AN ISSUE DETAILING FEATURE REQUESTS OR POTENTIAL BUGFIX INSTEAD.** # Code Style @@ -122,4 +123,4 @@ Please follow this guide to properly format the JSON files for custom color maps * All additions and/or bug fixes to the core must not add additional dependencies. * Use VSCode for development, VS seems to cause issues. -* DO NOT use libboost for any code meant for this repository \ No newline at end of file +* DO NOT use libboost for any code meant for this repository diff --git a/core/src/core.cpp b/core/src/core.cpp index 7a1cb96a..3ce32a47 100644 --- a/core/src/core.cpp +++ b/core/src/core.cpp @@ -179,6 +179,8 @@ int sdrpp_main(int argc, char* argv[]) { defConfig["moduleInstances"]["LimeSDR Source"]["enabled"] = true; defConfig["moduleInstances"]["PlutoSDR Source"]["module"] = "plutosdr_source"; defConfig["moduleInstances"]["PlutoSDR Source"]["enabled"] = true; + defConfig["moduleInstances"]["PerseusSDR Source"]["module"] = "perseus_source"; + defConfig["moduleInstances"]["PerseusSDR Source"]["enabled"] = true; defConfig["moduleInstances"]["RFspace Source"]["module"] = "rfspace_source"; defConfig["moduleInstances"]["RFspace Source"]["enabled"] = true; defConfig["moduleInstances"]["RTL-SDR Source"]["module"] = "rtl_sdr_source"; diff --git a/decoder_modules/meteor_demodulator/src/main.cpp b/decoder_modules/meteor_demodulator/src/main.cpp index ddd47714..bad29d50 100644 --- a/decoder_modules/meteor_demodulator/src/main.cpp +++ b/decoder_modules/meteor_demodulator/src/main.cpp @@ -57,10 +57,13 @@ public: if (config.conf[name].contains("brokenModulation")) { brokenModulation = config.conf[name]["brokenModulation"]; } + if (config.conf[name].contains("oqpsk")) { + oqpsk = config.conf[name]["oqpsk"]; + } config.release(); - vfo = sigpath::vfoManager.createVFO(name, ImGui::WaterfallVFO::REF_CENTER, 0, 150000, INPUT_SAMPLE_RATE, 150000, 150000, true); - demod.init(vfo->output, 72000.0f, INPUT_SAMPLE_RATE, 33, 0.6f, 0.1f, 0.005f, brokenModulation, 1e-6, 0.01); + vfo = sigpath::vfoManager.createVFO(name, ImGui::WaterfallVFO::REF_CENTER, 0, INPUT_SAMPLE_RATE, INPUT_SAMPLE_RATE, INPUT_SAMPLE_RATE, INPUT_SAMPLE_RATE, true); + demod.init(vfo->output, 72000.0f, INPUT_SAMPLE_RATE, 33, 0.6f, 0.1f, 0.005f, brokenModulation, oqpsk, 1e-6, 0.01); split.init(&demod.out); split.bindStream(&symSinkStream); split.bindStream(&sinkStream); @@ -99,6 +102,7 @@ public: double bw = gui::waterfall.getBandwidth(); vfo = sigpath::vfoManager.createVFO(name, ImGui::WaterfallVFO::REF_CENTER, std::clamp(0, -bw / 2.0, bw / 2.0), 150000, INPUT_SAMPLE_RATE, 150000, 150000, true); + demod.setBrokenModulation(brokenModulation); demod.setInput(vfo->output); demod.start(); @@ -151,6 +155,13 @@ private: config.release(true); } + if (ImGui::Checkbox(CONCAT("OQPSK##oqpsk", _this->name), &_this->oqpsk)) { + _this->demod.setOQPSK(_this->oqpsk); + config.acquire(); + config.conf[_this->name]["oqpsk"] = _this->oqpsk; + config.release(true); + } + if (!_this->folderSelect.pathIsValid() && _this->enabled) { style::beginDisabled(); } if (_this->recording) { @@ -245,7 +256,7 @@ private: uint64_t dataWritten = 0; std::ofstream recFile; bool brokenModulation = false; - + bool oqpsk = false; int8_t* writeBuffer; }; diff --git a/decoder_modules/meteor_demodulator/src/meteor_demod.h b/decoder_modules/meteor_demodulator/src/meteor_demod.h index 9cc8594f..4e7ea5de 100644 --- a/decoder_modules/meteor_demodulator/src/meteor_demod.h +++ b/decoder_modules/meteor_demodulator/src/meteor_demod.h @@ -11,8 +11,8 @@ namespace dsp::demod { public: Meteor() {} - Meteor(stream* in, double symbolrate, double samplerate, int rrcTapCount, double rrcBeta, double agcRate, double costasBandwidth, bool brokenModulation, double omegaGain, double muGain, double omegaRelLimit = 0.01) { - init(in, symbolrate, samplerate, rrcTapCount, rrcBeta, agcRate, costasBandwidth, brokenModulation, omegaGain, muGain); + Meteor(stream* in, double symbolrate, double samplerate, int rrcTapCount, double rrcBeta, double agcRate, double costasBandwidth, bool brokenModulation, bool oqpsk, double omegaGain, double muGain, double omegaRelLimit = 0.01) { + init(in, symbolrate, samplerate, rrcTapCount, rrcBeta, agcRate, costasBandwidth, brokenModulation, oqpsk, omegaGain, muGain); } ~Meteor() { @@ -21,11 +21,12 @@ namespace dsp::demod { taps::free(rrcTaps); } - void init(stream* in, double symbolrate, double samplerate, int rrcTapCount, double rrcBeta, double agcRate, double costasBandwidth, bool brokenModulation, double omegaGain, double muGain, double omegaRelLimit = 0.01) { + void init(stream* in, double symbolrate, double samplerate, int rrcTapCount, double rrcBeta, double agcRate, double costasBandwidth, bool brokenModulation, bool oqpsk, double omegaGain, double muGain, double omegaRelLimit = 0.01) { _symbolrate = symbolrate; _samplerate = samplerate; _rrcTapCount = rrcTapCount; _rrcBeta = rrcBeta; + _oqpsk = oqpsk; rrcTaps = taps::rootRaisedCosine(_rrcTapCount, _rrcBeta, _symbolrate, _samplerate); rrc.init(NULL, rrcTaps); @@ -129,6 +130,12 @@ namespace dsp::demod { costas.setBrokenModulation(enabled); } + void setOQPSK(bool enabled) { + assert(base_type::_block_init); + std::lock_guard lck(base_type::ctrlMtx); + _oqpsk = enabled; + } + void reset() { assert(base_type::_block_init); std::lock_guard lck(base_type::ctrlMtx); @@ -144,6 +151,18 @@ namespace dsp::demod { rrc.process(count, in, out); agc.process(count, out, out); costas.process(count, out, out); + + if (_oqpsk) { + // Single sample delay + deinterleave + for (int i = 0; i < count; i++) { + float tmp = out[i].im; + out[i].im = lastI; + lastI = tmp; + } + + // TODO: Additional 1/24th sample delay + } + return recov.process(count, out, out); } @@ -166,6 +185,8 @@ namespace dsp::demod { double _samplerate; int _rrcTapCount; double _rrcBeta; + float lastI = 0.0f; + bool _oqpsk = false; tap rrcTaps; filter::FIR rrc; diff --git a/docker_builds/debian_bullseye/do_build.sh b/docker_builds/debian_bullseye/do_build.sh index 05a0a32e..6509c192 100644 --- a/docker_builds/debian_bullseye/do_build.sh +++ b/docker_builds/debian_bullseye/do_build.sh @@ -6,7 +6,7 @@ cd /root apt update apt install -y build-essential cmake git libfftw3-dev libglfw3-dev libvolk2-dev libzstd-dev libsoapysdr-dev libairspyhf-dev libairspy-dev \ libiio-dev libad9361-dev librtaudio-dev libhackrf-dev librtlsdr-dev libbladerf-dev liblimesuite-dev p7zip-full wget portaudio19-dev \ - libcodec2-dev + libcodec2-dev autoconf libtool xxd # Install SDRPlay libraries wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run @@ -15,10 +15,20 @@ wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run cp x86_64/libsdrplay_api.so.3.07 /usr/lib/libsdrplay_api.so cp inc/* /usr/include/ +# Install libperseus +git clone https://github.com/Microtelecom/libperseus-sdr +cd libperseus-sdr +autoreconf -i +./configure +make +make install +ldconfig +cd .. + cd SDRPlusPlus mkdir build cd build -cmake .. -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON +cmake .. -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_PERSEUS_SOURCE=ON make VERBOSE=1 -j2 cd .. diff --git a/docker_builds/debian_buster/do_build.sh b/docker_builds/debian_buster/do_build.sh index cbefd63f..0a90aa11 100644 --- a/docker_builds/debian_buster/do_build.sh +++ b/docker_builds/debian_buster/do_build.sh @@ -6,7 +6,7 @@ cd /root apt update apt install -y build-essential cmake git libfftw3-dev libglfw3-dev libvolk1-dev libzstd-dev libsoapysdr-dev libairspyhf-dev libairspy-dev \ libiio-dev libad9361-dev librtaudio-dev libhackrf-dev librtlsdr-dev libbladerf-dev liblimesuite-dev p7zip-full wget portaudio19-dev \ - libcodec2-dev + libcodec2-dev autoconf libtool xxd # Install SDRPlay libraries wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run @@ -15,10 +15,20 @@ wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run cp x86_64/libsdrplay_api.so.3.07 /usr/lib/libsdrplay_api.so cp inc/* /usr/include/ +# Install libperseus +git clone https://github.com/Microtelecom/libperseus-sdr +cd libperseus-sdr +autoreconf -i +./configure +make +make install +ldconfig +cd .. + cd SDRPlusPlus mkdir build cd build -cmake .. -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_BLADERF_SOURCE=OFF -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON +cmake .. -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_BLADERF_SOURCE=OFF -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_PERSEUS_SOURCE=ON make VERBOSE=1 -j2 cd .. diff --git a/docker_builds/debian_sid/do_build.sh b/docker_builds/debian_sid/do_build.sh index 05a0a32e..6509c192 100644 --- a/docker_builds/debian_sid/do_build.sh +++ b/docker_builds/debian_sid/do_build.sh @@ -6,7 +6,7 @@ cd /root apt update apt install -y build-essential cmake git libfftw3-dev libglfw3-dev libvolk2-dev libzstd-dev libsoapysdr-dev libairspyhf-dev libairspy-dev \ libiio-dev libad9361-dev librtaudio-dev libhackrf-dev librtlsdr-dev libbladerf-dev liblimesuite-dev p7zip-full wget portaudio19-dev \ - libcodec2-dev + libcodec2-dev autoconf libtool xxd # Install SDRPlay libraries wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run @@ -15,10 +15,20 @@ wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run cp x86_64/libsdrplay_api.so.3.07 /usr/lib/libsdrplay_api.so cp inc/* /usr/include/ +# Install libperseus +git clone https://github.com/Microtelecom/libperseus-sdr +cd libperseus-sdr +autoreconf -i +./configure +make +make install +ldconfig +cd .. + cd SDRPlusPlus mkdir build cd build -cmake .. -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON +cmake .. -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_PERSEUS_SOURCE=ON make VERBOSE=1 -j2 cd .. diff --git a/docker_builds/ubuntu_bionic/do_build.sh b/docker_builds/ubuntu_bionic/do_build.sh index 2145328a..c63d8434 100644 --- a/docker_builds/ubuntu_bionic/do_build.sh +++ b/docker_builds/ubuntu_bionic/do_build.sh @@ -12,7 +12,7 @@ apt update # Install dependencies and tools apt install -y build-essential cmake git libfftw3-dev libglfw3-dev libvolk1-dev libzstd-dev libsoapysdr-dev libairspy-dev \ libiio-dev libad9361-dev librtaudio-dev libhackrf-dev librtlsdr-dev libbladerf-dev liblimesuite-dev p7zip-full wget portaudio19-dev \ - libcodec2-dev libudev-dev + libcodec2-dev libudev-dev autoconf libtool xxd # Install SDRPlay libraries wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run @@ -41,6 +41,16 @@ make install ldconfig cd ../../ +# Install libperseus +git clone https://github.com/Microtelecom/libperseus-sdr +cd libperseus-sdr +autoreconf -i +./configure +make +make install +ldconfig +cd .. + # Fix missing .pc file for codec2 echo 'prefix=/usr/' >> /usr/share/pkgconfig/codec2.pc echo 'libdir=/usr/include/x86_64-linux-gnu/' >> /usr/share/pkgconfig/codec2.pc @@ -56,7 +66,7 @@ echo 'Cflags: -I/usr/include/codec2' >> /usr/share/pkgconfig/codec2.pc cd SDRPlusPlus mkdir build cd build -cmake .. -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_BLADERF_SOURCE=OFF -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_OVERRIDE_STD_FILESYSTEM=ON -DOPT_BUILD_M17_DECODER=ON +cmake .. -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_BLADERF_SOURCE=OFF -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_OVERRIDE_STD_FILESYSTEM=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_PERSEUS_SOURCE=ON make VERBOSE=1 -j2 # Generate package diff --git a/docker_builds/ubuntu_focal/do_build.sh b/docker_builds/ubuntu_focal/do_build.sh index 05a0a32e..6509c192 100644 --- a/docker_builds/ubuntu_focal/do_build.sh +++ b/docker_builds/ubuntu_focal/do_build.sh @@ -6,7 +6,7 @@ cd /root apt update apt install -y build-essential cmake git libfftw3-dev libglfw3-dev libvolk2-dev libzstd-dev libsoapysdr-dev libairspyhf-dev libairspy-dev \ libiio-dev libad9361-dev librtaudio-dev libhackrf-dev librtlsdr-dev libbladerf-dev liblimesuite-dev p7zip-full wget portaudio19-dev \ - libcodec2-dev + libcodec2-dev autoconf libtool xxd # Install SDRPlay libraries wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run @@ -15,10 +15,20 @@ wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run cp x86_64/libsdrplay_api.so.3.07 /usr/lib/libsdrplay_api.so cp inc/* /usr/include/ +# Install libperseus +git clone https://github.com/Microtelecom/libperseus-sdr +cd libperseus-sdr +autoreconf -i +./configure +make +make install +ldconfig +cd .. + cd SDRPlusPlus mkdir build cd build -cmake .. -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON +cmake .. -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_PERSEUS_SOURCE=ON make VERBOSE=1 -j2 cd .. diff --git a/docker_builds/ubuntu_jammy/do_build.sh b/docker_builds/ubuntu_jammy/do_build.sh index 05a0a32e..6509c192 100644 --- a/docker_builds/ubuntu_jammy/do_build.sh +++ b/docker_builds/ubuntu_jammy/do_build.sh @@ -6,7 +6,7 @@ cd /root apt update apt install -y build-essential cmake git libfftw3-dev libglfw3-dev libvolk2-dev libzstd-dev libsoapysdr-dev libairspyhf-dev libairspy-dev \ libiio-dev libad9361-dev librtaudio-dev libhackrf-dev librtlsdr-dev libbladerf-dev liblimesuite-dev p7zip-full wget portaudio19-dev \ - libcodec2-dev + libcodec2-dev autoconf libtool xxd # Install SDRPlay libraries wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run @@ -15,10 +15,20 @@ wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run cp x86_64/libsdrplay_api.so.3.07 /usr/lib/libsdrplay_api.so cp inc/* /usr/include/ +# Install libperseus +git clone https://github.com/Microtelecom/libperseus-sdr +cd libperseus-sdr +autoreconf -i +./configure +make +make install +ldconfig +cd .. + cd SDRPlusPlus mkdir build cd build -cmake .. -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON +cmake .. -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_LIMESDR_SOURCE=ON -DOPT_BUILD_SDRPLAY_SOURCE=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DOPT_BUILD_PERSEUS_SOURCE=ON make VERBOSE=1 -j2 cd .. diff --git a/make_macos_bundle.sh b/make_macos_bundle.sh index 703bf107..c557d5aa 100644 --- a/make_macos_bundle.sh +++ b/make_macos_bundle.sh @@ -38,6 +38,7 @@ bundle_install_binary $BUNDLE $BUNDLE/Contents/Plugins $BUILD_DIR/source_modules bundle_install_binary $BUNDLE $BUNDLE/Contents/Plugins $BUILD_DIR/source_modules/hackrf_source/hackrf_source.dylib bundle_install_binary $BUNDLE $BUNDLE/Contents/Plugins $BUILD_DIR/source_modules/hermes_source/hermes_source.dylib bundle_install_binary $BUNDLE $BUNDLE/Contents/Plugins $BUILD_DIR/source_modules/limesdr_source/limesdr_source.dylib +bundle_install_binary $BUNDLE $BUNDLE/Contents/Plugins $BUILD_DIR/source_modules/perseus_source/perseus_source.dylib bundle_install_binary $BUNDLE $BUNDLE/Contents/Plugins $BUILD_DIR/source_modules/plutosdr_source/plutosdr_source.dylib bundle_install_binary $BUNDLE $BUNDLE/Contents/Plugins $BUILD_DIR/source_modules/rfspace_source/rfspace_source.dylib bundle_install_binary $BUNDLE $BUNDLE/Contents/Plugins $BUILD_DIR/source_modules/rtl_sdr_source/rtl_sdr_source.dylib diff --git a/make_windows_package.ps1 b/make_windows_package.ps1 index 44fdad4e..91a75320 100644 --- a/make_windows_package.ps1 +++ b/make_windows_package.ps1 @@ -32,6 +32,9 @@ cp $build_dir/source_modules/hermes_source/Release/hermes_source.dll sdrpp_windo cp $build_dir/source_modules/limesdr_source/Release/limesdr_source.dll sdrpp_windows_x64/modules/ cp 'C:/Program Files/PothosSDR/bin/LimeSuite.dll' sdrpp_windows_x64/ +cp $build_dir/source_modules/perseus_source/Release/perseus_source.dll sdrpp_windows_x64/modules/ +cp 'C:/Program Files/PothosSDR/bin/perseus-sdr.dll' sdrpp_windows_x64/ + cp $build_dir/source_modules/plutosdr_source/Release/plutosdr_source.dll sdrpp_windows_x64/modules/ cp 'C:/Program Files/PothosSDR/bin/libiio.dll' sdrpp_windows_x64/ cp 'C:/Program Files/PothosSDR/bin/libad9361.dll' sdrpp_windows_x64/ diff --git a/misc_modules/recorder/src/main.cpp b/misc_modules/recorder/src/main.cpp index 91a4b0fb..c2168ac9 100644 --- a/misc_modules/recorder/src/main.cpp +++ b/misc_modules/recorder/src/main.cpp @@ -168,7 +168,7 @@ public: // Open file std::string type = (recMode == RECORDER_MODE_AUDIO) ? "audio" : "baseband"; - std::string vfoName = (recMode == RECORDER_MODE_AUDIO) ? gui::waterfall.selectedVFO : ""; + std::string vfoName = (recMode == RECORDER_MODE_AUDIO) ? selectedStreamName : ""; std::string extension = ".wav"; std::string expandedPath = expandString(folderSelect.path + "/" + genFileName(nameTemplate, type, vfoName) + extension); if (!writer.open(expandedPath)) { diff --git a/root/res/bandplans/united-kingdom.json b/root/res/bandplans/united-kingdom.json index 589e2398..876ac8d6 100644 --- a/root/res/bandplans/united-kingdom.json +++ b/root/res/bandplans/united-kingdom.json @@ -5,6 +5,12 @@ "author_name": "John Donkersley", "author_url": "", "bands": [ + { + "name": "2200m Ham Band", + "type": "amateur", + "start": 135700, + "end": 137800 + }, { "name": "Long Wave", "type": "broadcast", @@ -209,18 +215,18 @@ "start": 15010000, "end": 15100000 }, - { - "name": "Maritime", - "type": "marine", - "start": 16360000, - "end": 17410000 - }, { "name": "19m Broadcast", "type": "broadcast", "start": 15100000, "end": 15800000 }, + { + "name": "Maritime", + "type": "marine", + "start": 16360000, + "end": 17410000 + }, { "name": "16m Broadcast", "type": "broadcast", @@ -345,7 +351,7 @@ "name": "Air Band TACAN/ILS", "type": "aviation", "start": 108000000, - "end": 118000000 + "end": 117975000 }, { "name": "Air Band Voice", @@ -371,6 +377,12 @@ "start": 147343750, "end": 147500000 }, + { + "name": "Satellites", + "type": "satellite", + "start": 148000000, + "end": 150050000 + }, { "name": "Pagers - Flex/POCSAG", "type": "PMR", @@ -425,6 +437,18 @@ "start": 230000000, "end": 400000000 }, + { + "name": "Satellites", + "type": "satellite", + "start": 399900000, + "end": 401000000 + }, + { + "name": "Weather Balloons", + "type": "aviation", + "start": 401000000, + "end": 406000000 + }, { "name": "Private Mobile Radio inc trams", "type": "PMR", @@ -462,22 +486,34 @@ "end": 455000000 }, { - "name": "Private Mobile Radio", + "name": "Private Mobile Radio inc OB", "type": "PMR", "start": 455000000, - "end": 467200000 - }, - { - "name": "Outside Broadcast Talkback", - "type": "PMR", - "start": 467200000, - "end": 468600000 + "end": 470000000 }, { "name": "Digital TV Broadcast", "type": "broadcast", "start": 470000000, - "end": 790000000 + "end": 700000000 + }, + { + "name": "Cell phones", + "type": "cellular", + "start": 703000000, + "end": 788000000 + }, + { + "name": "Band 20 Cell phone downlink", + "type": "cellular", + "start": 791000000, + "end": 821000000 + }, + { + "name": "Band 20 Cell phone uplink", + "type": "cellular", + "start": 832000000, + "end": 862000000 }, { "name": "Licence Exempt Short Range", @@ -485,12 +521,84 @@ "start": 862000000, "end": 875800000 }, + { + "name": "Band 8 Cell phone uplink", + "type": "cellular", + "start": 880100000, + "end": 914900000 + }, + { + "name": "Band 8 Cell phone downlink", + "type": "cellular", + "start": 925100000, + "end": 929500000 + }, { "name": "23cm Ham Band", "type": "amateur", "start": 1240000000, "end": 1325000000 }, + { + "name": "Band 32 Cell phone", + "type": "cellular", + "start": 1452000000, + "end": 1492000000 + }, + { + "name": "Satellite L-band", + "type": "satellite", + "start": 1518000000, + "end": 1559000000 + }, + { + "name": "Satellite L-band", + "type": "satellite", + "start": 1626500000, + "end": 1660500000 + }, + { + "name": "Satellite L-band", + "type": "satellite", + "start": 1668000000, + "end": 1675000000 + }, + { + "name": "Band 3 Cell phone uplink", + "type": "cellular", + "start": 1710000000, + "end": 1785000000 + }, + { + "name": "Band 3 Cell phone downlink", + "type": "cellular", + "start": 1805100000, + "end": 1880000000 + }, + { + "name": "DECT cordless phones", + "type": "cellular", + "start": 1880000000, + "end": 1900000000 + }, + { + "name": "Band 3 Cell phones", + "type": "cellular", + "start": 1900000000, + "end": 1920000000 + }, + { + "name": "Band 1 Cell phone uplink", + "type": "cellular", + "start": 1920000000, + "end": 1979700000 + }, + { + "name": "Band 1 Cell phone downlink", + "type": "cellular", + "start": 2110300000, + "end": 2169700000 + }, { "name": "13cm Ham Band", "type": "amateur", @@ -498,10 +606,28 @@ "end": 2302000000 }, { - "name": "13cm Ham Band", - "type": "amateur", - "start": 2310000000, - "end": 2450000000 + "name": "ISM - wifi and bluettoth", + "type": "ISM", + "start": 2400000000, + "end": 2483000000 + }, + { + "name": "Band 38 Cell phones", + "type": "cellular", + "start": 2500000000, + "end": 269000000 + }, + { + "name": "Band 42 5G Cell phones", + "type": "cellular", + "start": 3410000000, + "end": 3720000000 + }, + { + "name": "ISM - wifi", + "type": "ISM", + "start": 5150000000, + "end": 5850000000 } - ] -} \ No newline at end of file + ] +} diff --git a/sink_modules/audio_sink/src/main.cpp b/sink_modules/audio_sink/src/main.cpp index be438031..15b7c260 100644 --- a/sink_modules/audio_sink/src/main.cpp +++ b/sink_modules/audio_sink/src/main.cpp @@ -45,16 +45,20 @@ public: int count = audio.getDeviceCount(); RtAudio::DeviceInfo info; for (int i = 0; i < count; i++) { - info = audio.getDeviceInfo(i); - if (!info.probed) { continue; } - if (info.outputChannels == 0) { continue; } - if (info.isDefaultOutput) { defaultDevId = devList.size(); } - devList.push_back(info); - deviceIds.push_back(i); - txtDevList += info.name; - txtDevList += '\0'; + try { + info = audio.getDeviceInfo(i); + if (!info.probed) { continue; } + if (info.outputChannels == 0) { continue; } + if (info.isDefaultOutput) { defaultDevId = devList.size(); } + devList.push_back(info); + deviceIds.push_back(i); + txtDevList += info.name; + txtDevList += '\0'; + } + catch (std::exception e) { + flog::error("AudioSinkModule Error getting audio device info: {0}", e.what()); + } } - selectByName(device); } @@ -290,4 +294,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/source_modules/perseus_source/CMakeLists.txt b/source_modules/perseus_source/CMakeLists.txt index 1b273f3d..eb28824c 100644 --- a/source_modules/perseus_source/CMakeLists.txt +++ b/source_modules/perseus_source/CMakeLists.txt @@ -7,9 +7,9 @@ include(${SDRPP_MODULE_CMAKE}) if (MSVC) # Lib path - target_link_directories(perseus_source PRIVATE "C:/Users/ryzerth/Documents/Code/libperseus-sdr/build/Debug") + target_link_directories(perseus_source PRIVATE "C:/Program Files/PothosSDR/bin/") - target_include_directories(perseus_source PUBLIC "C:/Users/ryzerth/Documents/Code/libperseus-sdr/src") + target_include_directories(perseus_source PUBLIC "C:/Program Files/PothosSDR/include/perseus-sdr") target_link_libraries(perseus_source PRIVATE perseus-sdr) else (MSVC) diff --git a/source_modules/spectran_http_source/src/spectran_http_client.cpp b/source_modules/spectran_http_source/src/spectran_http_client.cpp index 8b886b75..77a19328 100644 --- a/source_modules/spectran_http_source/src/spectran_http_client.cpp +++ b/source_modules/spectran_http_source/src/spectran_http_client.cpp @@ -100,10 +100,11 @@ void SpectranHTTPClient::worker() { auto sampleFreqEnd = jsonData.find(',', sampleFreqBegin); std::string sampleFreqStr = jsonData.substr(sampleFreqBegin + 18, sampleFreqEnd - sampleFreqBegin - 18); sampleFreq = std::stoll(sampleFreqStr); + //flog::debug("{}", jsonData); } // Calculate and update center freq - int64_t samplerate = sampleFreqReceived ? sampleFreq : (endFreq - startFreq); + int64_t samplerate = /* sampleFreqReceived ? sampleFreq : */(endFreq - startFreq); int64_t centerFreq = round(((double)endFreq + (double)startFreq) / 2.0); if (centerFreq != _centerFreq) { flog::debug("New center freq: {}", centerFreq);