Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package soapy-remote for openSUSE:Factory checked in at 2026-10-15 12:18:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/soapy-remote (Old) and /work/SRC/openSUSE:Factory/.soapy-remote.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "soapy-remote" Thu Oct 15 12:18:59 2026 rev:12 rq:1384072 version:0.5.3 Changes: -------- --- /work/SRC/openSUSE:Factory/soapy-remote/soapy-remote.changes 2026-09-01 15:48:10.369371628 +0200 +++ /work/SRC/openSUSE:Factory/.soapy-remote.new.3698736/soapy-remote.changes 2026-10-15 12:19:04.794407750 +0200 @@ -1,0 +2,14 @@ +Sun Oct 11 09:24:56 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to version 0.5.3: + * Support the ref-clock-rate and IQ-balance-auto APIs + * Support more than 31 concurrent client sockets + * Report accept() failures instead of failing silently + * Fix CS16-CS8 conversion scaling + * Modernize cmake: GNU install dirs, numeric sysctl prefix, + full bindir in the unit file + * Track upstream's sysctl rename to 10-SoapySDRServer.conf in %files + * Raise the SoapySDR requirement to 0.8.1 + * Rebase harden_SoapySDRServer.service.patch onto the new unit file + +------------------------------------------------------------------- Old: ---- soapy-remote-0.5.2.tar.gz New: ---- soapy-remote-0.5.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ soapy-remote.spec ++++++ --- /var/tmp/diff_new_pack.QCkiDi/_old 2026-10-15 12:19:05.988457694 +0200 +++ /var/tmp/diff_new_pack.QCkiDi/_new 2026-10-15 12:19:05.992457861 +0200 @@ -20,7 +20,7 @@ %define soapy_modver 0.8-3 %define soapy_modname soapysdr%{soapy_modver}-module-remote Name: soapy-remote -Version: 0.5.2 +Version: 0.5.3 Release: 0 Summary: Remote device support for Soapy SDR License: BSL-1.0 @@ -34,7 +34,8 @@ BuildRequires: cmake >= 3.5 BuildRequires: gcc-c++ BuildRequires: pkgconfig -BuildRequires: pkgconfig(SoapySDR) >= 0.4.0 +# CMakeLists.txt: find_package(SoapySDR "0.8.1" NO_MODULE REQUIRED) +BuildRequires: pkgconfig(SoapySDR) >= 0.8.1 # Without this upstream only WARNS and silently builds the no-op MDNS stub, # losing mDNS/DNS-SD discovery BuildRequires: pkgconfig(avahi-client) @@ -114,6 +115,6 @@ %{_bindir}/SoapySDRServer %{_sbindir}/rcSoapySDRServer %{_mandir}/man1/SoapySDRServer.1%{?ext_man} -%{_sysctldir}/SoapySDRServer.conf +%{_sysctldir}/10-SoapySDRServer.conf %{_unitdir}/SoapySDRServer.service ++++++ harden_SoapySDRServer.service.patch ++++++ --- /var/tmp/diff_new_pack.QCkiDi/_old 2026-10-15 12:19:06.055460497 +0200 +++ /var/tmp/diff_new_pack.QCkiDi/_new 2026-10-15 12:19:06.068461040 +0200 @@ -1,7 +1,7 @@ -Index: SoapyRemote-soapy-remote-0.5.2/system/SoapySDRServer.service.in +Index: SoapyRemote-soapy-remote-0.5.3/system/SoapySDRServer.service.in =================================================================== ---- SoapyRemote-soapy-remote-0.5.2.orig/system/SoapySDRServer.service.in -+++ SoapyRemote-soapy-remote-0.5.2/system/SoapySDRServer.service.in +--- SoapyRemote-soapy-remote-0.5.3.orig/system/SoapySDRServer.service.in ++++ SoapyRemote-soapy-remote-0.5.3/system/SoapySDRServer.service.in @@ -4,6 +4,17 @@ Wants=network-online.target After=network-online.target @@ -17,7 +17,7 @@ +ProtectControlGroups=true +RestrictRealtime=true +# end of automatic additions - ExecStart=@CMAKE_INSTALL_PREFIX@/bin/SoapySDRServer --bind + ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/SoapySDRServer --bind KillMode=process Restart=on-failure ++++++ soapy-remote-0.5.2.tar.gz -> soapy-remote-0.5.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/.github/workflows/ci.yml new/SoapyRemote-soapy-remote-0.5.3/.github/workflows/ci.yml --- old/SoapyRemote-soapy-remote-0.5.2/.github/workflows/ci.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.3/.github/workflows/ci.yml 2026-10-10 16:29:13.000000000 +0200 @@ -0,0 +1,244 @@ +name: CI +on: [push, pull_request] +jobs: + linux-ci: + name: Linux + strategy: + fail-fast: false + matrix: + build_type: [Release, Debug] + config: + - cc: gcc-10 + cxx: g++-10 + os: ubuntu-22.04 + + - cc: gcc-11 + cxx: g++-11 + os: ubuntu-22.04 + + - cc: gcc-12 + cxx: g++-12 + os: ubuntu-24.04 + + - cc: gcc-13 + cxx: g++-13 + os: ubuntu-24.04 + + - cc: gcc-14 + cxx: g++-14 + os: ubuntu-24.04 + + - cc: gcc-15 + cxx: g++-15 + os: ubuntu-26.04 + + - cc: clang-13 + cxx: clang++-13 + os: ubuntu-22.04 + + - cc: clang-14 + cxx: clang++-14 + os: ubuntu-22.04 + + - cc: clang-15 + cxx: clang++-15 + os: ubuntu-22.04 + + - cc: clang-16 + cxx: clang++-16 + os: ubuntu-24.04 + + - cc: clang-17 + cxx: clang++-17 + os: ubuntu-24.04 + + - cc: clang-18 + cxx: clang++-18 + os: ubuntu-24.04 + + - cc: clang-20 + cxx: clang++-20 + os: ubuntu-26.04 + + - cc: clang-21 + cxx: clang++-21 + os: ubuntu-26.04 + + - cc: clang-22 + cxx: clang++-22 + os: ubuntu-26.04 + + runs-on: ${{matrix.config.os}} + env: + CC: ${{matrix.config.cc}} + CXX: ${{matrix.config.cxx}} + INSTALL_PREFIX: /usr/local + steps: + - uses: actions/checkout@v7 + - name: Install dependencies + run: | + sudo apt install -y libavahi-client-dev libavahi-common-dev + + git clone https://github.com/pothosware/SoapySDR -b soapy-sdr-0.9.0 + cd SoapySDR + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DENABLE_PYTHON2=OFF -DENABLE_PYTHON3=OFF -B build + cmake --build build + sudo cmake --install build + sudo ldconfig + - name: Build SoapyRemote + run: | + cd ${{github.workspace}} + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -B build + cmake --build build + sudo cmake --install build + - name: Test module registration + run: | + SoapySDRUtil --check=remote + + osx-ci: + name: OS X + strategy: + fail-fast: false + matrix: + build_type: [Release, Debug] + config: + - cc: gcc-13 + cxx: g++-13 + os: macos-15 + + - cc: gcc-14 + cxx: g++-14 + os: macos-15 + + - cc: gcc-15 + cxx: g++-15 + os: macos-26 + + - cc: clang + cxx: clang++ + os: macos-15 + + - cc: clang + cxx: clang++ + os: macos-26 + + runs-on: ${{matrix.config.os}} + env: + CC: ${{matrix.config.cc}} + CXX: ${{matrix.config.cxx}} + INSTALL_PREFIX: /usr/local + steps: + - uses: actions/checkout@v7 + - name: Install dependencies + run: | + git clone https://github.com/pothosware/SoapySDR -b soapy-sdr-0.9.0 + cd SoapySDR + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -B build + cmake --build build + sudo cmake --install build + - name: Build SoapyRemote + run: | + cd ${{github.workspace}} + cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -B build + cmake --build build + sudo cmake --install build + - name: Test module registration + run: | + SoapySDRUtil --check=remote + + windows-ci: + name: Windows + strategy: + fail-fast: false + matrix: + build_type: [Release, Debug] + config: + - cmake_config: -G "Visual Studio 17 2022" -A "Win32" + arch: win32 + os: windows-2022 + msvc: true + + - cmake_config: -G "Visual Studio 17 2022" -A "x64" + arch: x64 + os: windows-2022 + msvc: true + + - cmake_config: -G "Visual Studio 18 2026" -A "Win32" + arch: win32 + os: windows-2025 + msvc: true + + - cmake_config: -G "Visual Studio 18 2026" -A "x64" + arch: x64 + os: windows-2025 + msvc: true + + runs-on: ${{matrix.config.os}} + env: + INSTALL_PREFIX: 'C:\Program Files\SoapySDR' + steps: + - uses: actions/checkout@v7 + - uses: ilammy/msvc-dev-cmd@v1 + if: + ${{matrix.config.msvc == true}} + with: + arch: ${{matrix.config.arch}} + - name: Install SoapySDR + run: | + cd ${{runner.workspace}} + + git clone https://github.com/pothosware/SoapySDR -b soapy-sdr-0.9.0 + cd SoapySDR + cmake ${{matrix.config.cmake_config}} -DENABLE_PYTHON2=OFF -DENABLE_PYTHON3=OFF -DCMAKE_INSTALL_PREFIX="$Env:INSTALL_PREFIX" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -B build + cmake --build build --config ${{matrix.build_type}} + cmake --install build --config ${{matrix.build_type}} + - name: Build SoapyRemote + run: | + $Env:INCLUDE += ";$Env:INSTALL_PREFIX\include" + $Env:LIB += ";$Env:INSTALL_PREFIX\lib" + cmake ${{matrix.config.cmake_config}} -DCMAKE_INSTALL_PREFIX="$Env:INSTALL_PREFIX" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -B build + cmake --build build --config ${{matrix.build_type}} + cmake --install build --config ${{matrix.build_type}} + - name: Test module registration + run: | + $Env:PATH += ";$Env:INSTALL_PREFIX\bin" + SoapySDRUtil --check=remote + + freebsd-ci: + name: FreeBSD + strategy: + fail-fast: false + matrix: + build_type: [Release, Debug] + release: ["13.5", "14.5", "15.1"] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: vmactions/freebsd-vm@v1 + name: Test in FreeBSD + with: + release: ${{matrix.release}} + copyback: false + prepare: | + pkg install -y cmake SoapySDR net/avahi + run: | + # We can't separate these steps, so add prints for clarity. + + echo + echo "----------------------------------" + echo "Building..." + echo "----------------------------------" + cmake -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -B build + cmake --build build + + echo + echo "----------------------------------" + echo "Installing..." + echo "----------------------------------" + cmake --install build + + echo + echo "----------------------------------" + echo "Testing module registration..." + echo "----------------------------------" + SoapySDRUtil --check=remote diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/.gitignore new/SoapyRemote-soapy-remote-0.5.3/.gitignore --- old/SoapyRemote-soapy-remote-0.5.2/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.3/.gitignore 2026-10-10 16:29:13.000000000 +0200 @@ -0,0 +1,6 @@ +# Ignore CMake generated output +/build +*~ +*.swp +/.vscode +/.history diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/.travis.yml new/SoapyRemote-soapy-remote-0.5.3/.travis.yml --- old/SoapyRemote-soapy-remote-0.5.2/.travis.yml 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/.travis.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,55 +0,0 @@ -######################################################################## -## Travis CI config for SoapyRemote -## -## * installs SoapySDR from source -## * confirms build and install -## * checks that drivers load -######################################################################## - -sudo: required -dist: trusty - -language: cpp - -matrix: - include: - - os: linux - compiler: gcc - env: PYTHON_EXECUTABLE=/usr/bin/python PYTHON3_EXECUTABLE=/usr/bin/python3 - - os: osx - compiler: clang - env: PYTHON_EXECUTABLE=/usr/local/bin/python2 PYTHON3_EXECUTABLE=/usr/local/bin/python3 - -env: - global: - - INSTALL_PREFIX=/usr/local - - BUILD_TYPE=Release - -# whitelist -branches: - only: - - master - - maint - -install: - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -qq libavahi-client-dev; fi; - - # install SoapySDR from source - - git clone https://github.com/pothosware/SoapySDR.git - - pushd SoapySDR - - git checkout ${SOAPY_SDR_BRANCH} - - mkdir build && cd build - - cmake ../ -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_PYTHON=OFF -DENABLE_PYTHON3=OFF - - make && sudo make install - - popd - -script: - - mkdir build && cd build - - cmake ../ -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} - - make && sudo make install - # print info about the install - - export LD_LIBRARY_PATH=${INSTALL_PREFIX}/lib:${LD_LIBRARY_PATH} - - export PATH=${INSTALL_PREFIX}/bin:${PATH} - - SoapySDRUtil --info - - SoapySDRUtil --check=remote - - SoapySDRServer --help diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/CMakeLists.txt new/SoapyRemote-soapy-remote-0.5.3/CMakeLists.txt --- old/SoapyRemote-soapy-remote-0.5.2/CMakeLists.txt 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/CMakeLists.txt 2026-10-10 16:29:13.000000000 +0200 @@ -1,9 +1,12 @@ ######################################################################## # Build Soapy SDR remote support ######################################################################## -cmake_minimum_required(VERSION 2.8.7) +cmake_minimum_required(VERSION 3.1...3.10) project(SoapyRemote CXX C) +#C++11 is a required language feature for this project +set(CMAKE_CXX_STANDARD 11) + #extract changelog version file(READ "${PROJECT_SOURCE_DIR}/Changelog.txt" changelog_txt) string(REGEX MATCH "Release ([0-9]+\\.[0-9]+\\.[0-9]+) \\(" CHANGELOG_MATCH "${changelog_txt}") @@ -32,38 +35,18 @@ endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") -#find soapy sdr -find_package(SoapySDR "0.4.0" NO_MODULE) +# Use standard GNU install paths +include(GNUInstallDirs) -#enable c++11 features -if(CMAKE_COMPILER_IS_GNUCXX) +#find soapy sdr with modern cmake support +find_package(SoapySDR "0.8.1" NO_MODULE REQUIRED) - #C++11 is a required language feature for this project - include(CheckCXXCompilerFlag) - CHECK_CXX_COMPILER_FLAG("-std=c++11" HAS_STD_CXX11) - if(HAS_STD_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - else(HAS_STD_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") - endif() - - #Thread support enabled (not the same as -lpthread) - list(APPEND SoapySDR_LIBRARIES -pthread) - -endif(CMAKE_COMPILER_IS_GNUCXX) - -#link threads in freebsd -if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") - find_package(Threads) - message(STATUS "CMAKE_THREAD_LIBS_INIT: ${CMAKE_THREAD_LIBS_INIT}") - list(APPEND SoapySDR_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) +get_filename_component(_SoapySDR_ROOT "${SoapySDR_INCLUDE_DIRS}/.." ABSOLUTE) +message(STATUS "SoapySDR root directory: ${_SoapySDR_ROOT}") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND NOT "${_SoapySDR_ROOT}" STREQUAL "/usr") + set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE ${_SoapySDR_ROOT}) endif() -#enable c++11 extensions for OSX -if (APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -Wc++11-extensions") -endif(APPLE) - if(MSVC) #we always want to use multiple cores for compilation add_compile_options(/MP) @@ -72,9 +55,6 @@ add_definitions(-DNOMINMAX) #enables std::min and std::max endif() -#common headers used by client and server -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/common) - add_subdirectory(common) add_subdirectory(client) add_subdirectory(server) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/Changelog.txt new/SoapyRemote-soapy-remote-0.5.3/Changelog.txt --- old/SoapyRemote-soapy-remote-0.5.2/Changelog.txt 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/Changelog.txt 2026-10-10 16:29:13.000000000 +0200 @@ -1,3 +1,12 @@ +Release 0.5.3 (2026-10-10) +========================== + +- Minor fixes +- Updated CMake builds +- Added support for ref clock rate API +- Added support for IQ balance auto API +- Report error message when accept() fails + Release 0.5.2 (2020-07-20) ========================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/README.md new/SoapyRemote-soapy-remote-0.5.3/README.md --- old/SoapyRemote-soapy-remote-0.5.2/README.md 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/README.md 2026-10-10 16:29:13.000000000 +0200 @@ -2,7 +2,7 @@ ## Build Status -- Travis: [](https://travis-ci.org/pothosware/SoapyRemote) + ## Dependencies diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/client/ClientStreamData.cpp new/SoapyRemote-soapy-remote-0.5.3/client/ClientStreamData.cpp --- old/SoapyRemote-soapy-remote-0.5.2/client/ClientStreamData.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/client/ClientStreamData.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -3,6 +3,7 @@ #include "ClientStreamData.hpp" #include "SoapyStreamEndpoint.hpp" +#include <ciso646> #include <cstring> //memcpy #include <cassert> #include <cstdint> @@ -104,13 +105,15 @@ case CONVERT_CS16_CS8: /////////////////////////// { + // note that we expect CS8 scaleFactor to be power of 2, usually 128 + const int scale = 32768/int(scaleFactor); for (size_t i = 0; i < recvBuffs.size(); i++) { auto in = (int8_t *)recvBuffs[i]; auto out = (int16_t *)buffs[i]; for (size_t j = 0; j < numElems*2; j++) { - out[j] = int16_t(in[j]); + out[j] = int16_t(in[j])*scale; } } } @@ -236,13 +239,15 @@ case CONVERT_CS16_CS8: /////////////////////////// { + // note that we expect CS16 scaleFactor to be a power of 2, usually 2048 + const int scale = int(scaleFactor + 1)/128; // round e.g. 2047.0 and 32767.0 for (size_t i = 0; i < sendBuffs.size(); i++) { auto in = (int16_t *)buffs[i]; auto out = (int8_t *)sendBuffs[i]; for (size_t j = 0; j < numElems*2; j++) { - out[j] = int8_t(in[j]); + out[j] = int8_t(in[j]/scale); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/client/DiscoverServers.cpp new/SoapyRemote-soapy-remote-0.5.3/client/DiscoverServers.cpp --- old/SoapyRemote-soapy-remote-0.5.2/client/DiscoverServers.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/client/DiscoverServers.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -1,10 +1,12 @@ // Copyright (c) 2018-2020 Josh Blum +// 2023 Nicholas Corgan // SPDX-License-Identifier: BSL-1.0 #include "SoapyClient.hpp" #include "SoapySSDPEndpoint.hpp" #include "SoapyMDNSEndpoint.hpp" #include "SoapyRemoteDefs.hpp" +#include <ciso646> #include <memory> #include <future> #include <mutex> @@ -50,7 +52,7 @@ for (auto it = uuidToUrl.begin(); it != uuidToUrl.end();) { int duplicates(0); - for (const auto urlPair : it->second) + for (const auto &urlPair : it->second) { duplicates += knownURLs[urlPair.first].count(urlPair.second); knownURLs[urlPair.first].insert(urlPair.second); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/client/LogAcceptor.cpp new/SoapyRemote-soapy-remote-0.5.3/client/LogAcceptor.cpp --- old/SoapyRemote-soapy-remote-0.5.2/client/LogAcceptor.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/client/LogAcceptor.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -7,6 +7,7 @@ #include "SoapyRPCPacker.hpp" #include "SoapyRPCUnpacker.hpp" #include <SoapySDR/Logger.hpp> +#include <ciso646> #include <csignal> //sig_atomic_t #include <cassert> #include <mutex> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/client/Settings.cpp new/SoapyRemote-soapy-remote-0.5.3/client/Settings.cpp --- old/SoapyRemote-soapy-remote-0.5.2/client/Settings.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/client/Settings.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2015-2017 Josh Blum +// Copyright (c) 2015-2020 Josh Blum // Copyright (c) 2016-2016 Bastille Networks // SPDX-License-Identifier: BSL-1.0 @@ -383,6 +383,49 @@ return result; } +bool SoapyRemoteDevice::hasIQBalanceMode(const int direction, const size_t channel) const +{ + std::lock_guard<std::mutex> lock(_mutex); + SoapyRPCPacker packer(_sock); + packer & SOAPY_REMOTE_HAS_IQ_BALANCE_MODE_AUTO; + packer & char(direction); + packer & int(channel); + packer(); + + SoapyRPCUnpacker unpacker(_sock); + bool result; + unpacker & result; + return result; +} + +void SoapyRemoteDevice::setIQBalanceMode(const int direction, const size_t channel, const bool automatic) +{ + std::lock_guard<std::mutex> lock(_mutex); + SoapyRPCPacker packer(_sock); + packer & SOAPY_REMOTE_SET_IQ_BALANCE_MODE_AUTO; + packer & char(direction); + packer & int(channel); + packer & automatic; + packer(); + + SoapyRPCUnpacker unpacker(_sock); +} + +bool SoapyRemoteDevice::getIQBalanceMode(const int direction, const size_t channel) const +{ + std::lock_guard<std::mutex> lock(_mutex); + SoapyRPCPacker packer(_sock); + packer & SOAPY_REMOTE_GET_IQ_BALANCE_MODE_AUTO; + packer & char(direction); + packer & int(channel); + packer(); + + SoapyRPCUnpacker unpacker(_sock); + bool result; + unpacker & result; + return result; +} + void SoapyRemoteDevice::setFrequencyCorrection(const int direction, const size_t channel, const double value) { std::lock_guard<std::mutex> lock(_mutex); @@ -847,6 +890,43 @@ packer(); SoapyRPCUnpacker unpacker(_sock); + SoapySDR::RangeList result; + unpacker & result; + return result; +} + +void SoapyRemoteDevice::setReferenceClockRate(const double rate) +{ + std::lock_guard<std::mutex> lock(_mutex); + SoapyRPCPacker packer(_sock); + packer & SOAPY_REMOTE_SET_REF_CLOCK_RATE; + packer & rate; + packer(); + + SoapyRPCUnpacker unpacker(_sock); +} + +double SoapyRemoteDevice::getReferenceClockRate(void) const +{ + std::lock_guard<std::mutex> lock(_mutex); + SoapyRPCPacker packer(_sock); + packer & SOAPY_REMOTE_GET_REF_CLOCK_RATE; + packer(); + + SoapyRPCUnpacker unpacker(_sock); + double result; + unpacker & result; + return result; +} + +SoapySDR::RangeList SoapyRemoteDevice::getReferenceClockRates(void) const +{ + std::lock_guard<std::mutex> lock(_mutex); + SoapyRPCPacker packer(_sock); + packer & SOAPY_REMOTE_GET_REF_CLOCK_RATES; + packer(); + + SoapyRPCUnpacker unpacker(_sock); SoapySDR::RangeList result; unpacker & result; return result; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/client/SoapyClient.hpp new/SoapyRemote-soapy-remote-0.5.3/client/SoapyClient.hpp --- old/SoapyRemote-soapy-remote-0.5.2/client/SoapyClient.hpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/client/SoapyClient.hpp 2026-10-10 16:29:13.000000000 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2015-2018 Josh Blum +// Copyright (c) 2015-2020 Josh Blum // Copyright (c) 2016-2016 Bastille Networks // SPDX-License-Identifier: BSL-1.0 @@ -164,6 +164,12 @@ std::complex<double> getIQBalance(const int direction, const size_t channel) const; + bool hasIQBalanceMode(const int direction, const size_t channel) const; + + void setIQBalanceMode(const int direction, const size_t channel, const bool automatic); + + bool getIQBalanceMode(const int direction, const size_t channel) const; + bool hasFrequencyCorrection(const int direction, const size_t channel) const; void setFrequencyCorrection(const int direction, const size_t channel, const double value); @@ -248,6 +254,12 @@ SoapySDR::RangeList getMasterClockRates(void) const; + void setReferenceClockRate(const double rate); + + double getReferenceClockRate(void) const; + + SoapySDR::RangeList getReferenceClockRates(void) const; + std::vector<std::string> listClockSources(void) const; void setClockSource(const std::string &source); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/client/Streaming.cpp new/SoapyRemote-soapy-remote-0.5.3/client/Streaming.cpp --- old/SoapyRemote-soapy-remote-0.5.2/client/Streaming.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/client/Streaming.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -10,6 +10,7 @@ #include "SoapyRPCPacker.hpp" #include "SoapyRPCUnpacker.hpp" #include "SoapyStreamEndpoint.hpp" +#include <ciso646> #include <algorithm> //std::min, std::find #include <memory> //unique_ptr diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/CMakeLists.txt new/SoapyRemote-soapy-remote-0.5.3/common/CMakeLists.txt --- old/SoapyRemote-soapy-remote-0.5.2/common/CMakeLists.txt 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/CMakeLists.txt 2026-10-10 16:29:13.000000000 +0200 @@ -1,7 +1,9 @@ ######################################################################## # Build the remote support library ######################################################################## -set(COMMON_SOURCES + +#build a static library +add_library(SoapySDRRemoteCommon STATIC SoapyURLUtils.cpp SoapyRPCSocket.cpp SoapyRPCPacker.cpp @@ -9,14 +11,19 @@ SoapyStreamEndpoint.cpp SoapyHTTPUtils.cpp SoapySSDPEndpoint.cpp - SoapyIfAddrs.cpp -) + SoapyIfAddrs.cpp) + +target_include_directories(SoapySDRRemoteCommon PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +target_link_libraries(SoapySDRRemoteCommon PRIVATE SoapySDR) + +set_target_properties(SoapySDRRemoteCommon PROPERTIES POSITION_INDEPENDENT_CODE TRUE) #network interface enumeration if (WIN32) - list(APPEND COMMON_SOURCES SoapyIfAddrsWindows.cpp) + target_sources(SoapySDRRemoteCommon PRIVATE SoapyIfAddrsWindows.cpp) else () - list(APPEND COMMON_SOURCES SoapyIfAddrsUnix.cpp) + target_sources(SoapySDRRemoteCommon PRIVATE SoapyIfAddrsUnix.cpp) endif () #configure ssdp defines @@ -24,7 +31,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/SoapyInfoUtils.in.cpp ${CMAKE_CURRENT_BINARY_DIR}/SoapyInfoUtils.cpp @ONLY) -list(APPEND COMMON_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/SoapyInfoUtils.cpp) +target_sources(SoapySDRRemoteCommon PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/SoapyInfoUtils.cpp) #check for platform-specific network header include(CheckIncludeFiles) @@ -45,46 +52,58 @@ CHECK_CXX_SOURCE_COMPILES("#include <cstring> int main(void){return strerror_r(0, NULL, 0);}" STRERROR_R_XSI) if (STRERROR_R_XSI) - add_definitions(-DSTRERROR_R_XSI) + target_compile_definitions(SoapySDRRemoteCommon PRIVATE -DSTRERROR_R_XSI) endif () #network libraries if (WIN32) - list(APPEND SoapySDR_LIBRARIES ws2_32) + target_link_libraries(SoapySDRRemoteCommon PRIVATE ws2_32) endif (WIN32) #avahi for discovery over mDNS/DNS-SD daemon if (UNIX AND NOT APPLE) - list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) - find_package(Avahi) - if (NOT AVAHI_FOUND) - message(WARNING - "Cannot find Avahi client development files:" - "Avahi is recommended for device discovery over mDNS." - "Please install libavahi-client-dev or equivalent.") - endif () -endif () + set(ENABLE_AVAHI AUTO CACHE STRING "Enable support for Avahi discovery") + set_property(CACHE ENABLE_AVAHI PROPERTY STRINGS AUTO ON OFF) + if(ENABLE_AVAHI) # AUTO / ON + list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + find_package(Avahi) + if(Avahi_FOUND) + message(STATUS "Avahi discovery support will be compiled.") + elseif(ENABLE_AVAHI STREQUAL "AUTO") + message(WARNING + "Could NOT find Avahi client development files: " + "Avahi is recommended for device discovery over mDNS. " + "Consider installing libavahi-client-dev or equivalent.") + else() + message(FATAL_ERROR "Avahi client for discovery support not found.") + endif() + else() + message(STATUS "Avahi discovery support disabled.") + endif() +endif() if (APPLE) - list(APPEND COMMON_SOURCES SoapyMDNSEndpointApple.cpp) -elseif (AVAHI_FOUND) - message(STATUS "AVAHI_INCLUDE_DIRS=${AVAHI_INCLUDE_DIRS}") - message(STATUS "AVAHI_LIBRARIES=${AVAHI_LIBRARIES}") - include_directories(${AVAHI_INCLUDE_DIRS}) - list(APPEND SoapySDR_LIBRARIES ${AVAHI_LIBRARIES}) - list(APPEND COMMON_SOURCES SoapyMDNSEndpointAvahi.cpp) + target_sources(SoapySDRRemoteCommon PRIVATE SoapyMDNSEndpointApple.cpp) +elseif (Avahi_FOUND) + message(STATUS "Avahi_INCLUDE_DIRS=${Avahi_INCLUDE_DIRS}") + message(STATUS "Avahi_LIBRARIES=${Avahi_LIBRARIES}") + target_include_directories(SoapySDRRemoteCommon PRIVATE ${Avahi_INCLUDE_DIRS}) + target_link_libraries(SoapySDRRemoteCommon PRIVATE ${Avahi_LIBRARIES}) + target_sources(SoapySDRRemoteCommon PRIVATE SoapyMDNSEndpointAvahi.cpp) else () - list(APPEND COMMON_SOURCES SoapyMDNSEndpointNone.cpp) + message(STATUS "No mDNS support configured...") + target_sources(SoapySDRRemoteCommon PRIVATE SoapyMDNSEndpointNone.cpp) endif () #create private include header for network compatibility -include_directories(${CMAKE_CURRENT_BINARY_DIR}) +target_include_directories(SoapySDRRemoteCommon PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/SoapySocketDefs.in.hpp ${CMAKE_CURRENT_BINARY_DIR}/SoapySocketDefs.hpp) -#build a static library -include_directories(${SoapySDR_INCLUDE_DIRS}) -add_library(SoapySDRRemoteCommon STATIC ${COMMON_SOURCES}) -target_link_libraries(SoapySDRRemoteCommon ${SoapySDR_LIBRARIES}) -set_property(TARGET SoapySDRRemoteCommon PROPERTY POSITION_INDEPENDENT_CODE TRUE) +#link threads library +find_package(Threads) +message(STATUS "CMAKE_THREAD_LIBS_INIT: ${CMAKE_THREAD_LIBS_INIT}") +if (CMAKE_THREAD_LIBS_INIT) + target_link_libraries(SoapySDRRemoteCommon PRIVATE ${CMAKE_THREAD_LIBS_INIT}) +endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/FindAvahi.cmake new/SoapyRemote-soapy-remote-0.5.3/common/FindAvahi.cmake --- old/SoapyRemote-soapy-remote-0.5.2/common/FindAvahi.cmake 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/FindAvahi.cmake 2026-10-10 16:29:13.000000000 +0200 @@ -3,7 +3,7 @@ find_path(AVAHI_INCLUDE_DIR avahi-client/publish.h) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Avahi DEFAULT_MSG AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT AVAHI_INCLUDE_DIR) -if(AVAHI_FOUND) - set(AVAHI_LIBRARIES ${AVAHI_LIBRARY-COMMON} ${AVAHI_LIBRARY-CLIENT}) - set(AVAHI_INCLUDE_DIRS ${AVAHI_INCLUDE_DIR}) +if(Avahi_FOUND) + set(Avahi_LIBRARIES ${AVAHI_LIBRARY-COMMON} ${AVAHI_LIBRARY-CLIENT}) + set(Avahi_INCLUDE_DIRS ${AVAHI_INCLUDE_DIR}) endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/SoapyMDNSEndpointAvahi.cpp new/SoapyRemote-soapy-remote-0.5.3/common/SoapyMDNSEndpointAvahi.cpp --- old/SoapyRemote-soapy-remote-0.5.2/common/SoapyMDNSEndpointAvahi.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/SoapyMDNSEndpointAvahi.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -11,6 +11,7 @@ #include <avahi-common/simple-watch.h> #include <avahi-common/error.h> #include <avahi-common/malloc.h> +#include <ciso646> #include <cstdlib> //atoi #include <chrono> #include <mutex> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/SoapyRPCSocket.cpp new/SoapyRemote-soapy-remote-0.5.3/common/SoapyRPCSocket.cpp --- old/SoapyRemote-soapy-remote-0.5.2/common/SoapyRPCSocket.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/SoapyRPCSocket.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -5,6 +5,7 @@ #include "SoapyRPCSocket.hpp" #include "SoapyURLUtils.hpp" #include <SoapySDR/Logger.hpp> +#include <ciso646> #include <cstring> //strerror #include <cerrno> //errno #include <algorithm> //max @@ -169,6 +170,7 @@ struct sockaddr_storage addr; socklen_t addrlen = sizeof(addr); int client = ::accept(_sock, (struct sockaddr*)&addr, &addrlen); + if (client == INVALID_SOCKET) this->reportError("accept()"); if (client == INVALID_SOCKET) return NULL; SoapyRPCSocket *clientSock = new SoapyRPCSocket(); clientSock->_sock = client; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/SoapyRPCUnpacker.cpp new/SoapyRemote-soapy-remote-0.5.3/common/SoapyRPCUnpacker.cpp --- old/SoapyRemote-soapy-remote-0.5.2/common/SoapyRPCUnpacker.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/SoapyRPCUnpacker.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -8,6 +8,7 @@ #include "SoapyRPCPacker.hpp" #include <SoapySDR/Logger.hpp> #include <SoapySDR/Version.hpp> //feature defines +#include <ciso646> #include <cfloat> //DBL_MANT_DIG #include <cmath> //ldexp #include <cstring> //memcpy @@ -160,7 +161,7 @@ #define UNPACK_TYPE_HELPER(expected) \ SoapyRemoteTypes type; *this & type; \ - if (type != expected) {throw std::runtime_error("SoapyRPCUnpacker type check FAIL:" #expected);} else {} + if (type != expected) {throw std::runtime_error("SoapyRPCUnpacker type check FAIL: " #expected);} else {} void SoapyRPCUnpacker::operator&(SoapyRemoteCalls &value) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/SoapyRemoteDefs.hpp new/SoapyRemote-soapy-remote-0.5.3/common/SoapyRemoteDefs.hpp --- old/SoapyRemote-soapy-remote-0.5.2/common/SoapyRemoteDefs.hpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/SoapyRemoteDefs.hpp 2026-10-10 16:29:13.000000000 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2015-2018 Josh Blum +// Copyright (c) 2015-2020 Josh Blum // Copyright (c) 2016-2016 Bastille Networks // SPDX-License-Identifier: BSL-1.0 @@ -177,6 +177,9 @@ SOAPY_REMOTE_HAS_IQ_BALANCE_MODE = 606, SOAPY_REMOTE_SET_IQ_BALANCE_MODE = 607, SOAPY_REMOTE_GET_IQ_BALANCE_MODE = 608, + SOAPY_REMOTE_HAS_IQ_BALANCE_MODE_AUTO = 609, + SOAPY_REMOTE_SET_IQ_BALANCE_MODE_AUTO = 610, + SOAPY_REMOTE_GET_IQ_BALANCE_MODE_AUTO = 611, SOAPY_REMOTE_HAS_FREQUENCY_CORRECTION = 503, SOAPY_REMOTE_SET_FREQUENCY_CORRECTION = 504, SOAPY_REMOTE_GET_FREQUENCY_CORRECTION = 505, @@ -222,6 +225,9 @@ SOAPY_REMOTE_SET_CLOCK_SOURCE = 1003, SOAPY_REMOTE_GET_CLOCK_SOURCE = 1004, SOAPY_REMOTE_GET_MASTER_CLOCK_RATES = 1008, + SOAPY_REMOTE_SET_REF_CLOCK_RATE = 1009, + SOAPY_REMOTE_GET_REF_CLOCK_RATE = 1010, + SOAPY_REMOTE_GET_REF_CLOCK_RATES = 1011, //time SOAPY_REMOTE_LIST_TIME_SOURCES = 1005, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/SoapySSDPEndpoint.cpp new/SoapyRemote-soapy-remote-0.5.3/common/SoapySSDPEndpoint.cpp --- old/SoapyRemote-soapy-remote-0.5.2/common/SoapySSDPEndpoint.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/SoapySSDPEndpoint.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -16,6 +16,7 @@ #include "SoapyHTTPUtils.hpp" #include "SoapyRPCSocket.hpp" #include "SoapyIfAddrs.hpp" +#include <ciso646> #include <csignal> //sig_atomic_t #include <memory> //unique_ptr #include <vector> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/SoapyStreamEndpoint.cpp new/SoapyRemote-soapy-remote-0.5.3/common/SoapyStreamEndpoint.cpp --- old/SoapyRemote-soapy-remote-0.5.2/common/SoapyStreamEndpoint.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/SoapyStreamEndpoint.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -8,6 +8,7 @@ #include "SoapyURLUtils.hpp" #include "SoapyRemoteDefs.hpp" #include "SoapySocketDefs.hpp" +#include <ciso646> #include <algorithm> //min/max #include <cassert> #include <cstdint> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/common/SoapyURLUtils.cpp new/SoapyRemote-soapy-remote-0.5.3/common/SoapyURLUtils.cpp --- old/SoapyRemote-soapy-remote-0.5.2/common/SoapyURLUtils.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/common/SoapyURLUtils.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -3,6 +3,7 @@ #include "SoapySocketDefs.hpp" #include "SoapyURLUtils.hpp" +#include <ciso646> #include <cstring> //memset #include <string> #include <cassert> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/debian/changelog new/SoapyRemote-soapy-remote-0.5.3/debian/changelog --- old/SoapyRemote-soapy-remote-0.5.2/debian/changelog 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/debian/changelog 2026-10-10 16:29:13.000000000 +0200 @@ -1,3 +1,9 @@ +soapyremote (0.5.3-1) unstable; urgency=low + + * Release 0.5.3 (2026-10-10) + + -- Christian W. Zuckschwerdt <[email protected]> Sat, 10 Oct 2026 15:00:00 -0000 + soapyremote (0.5.2-1) unstable; urgency=low * Release 0.5.2 (2020-07-20) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/debian/compat new/SoapyRemote-soapy-remote-0.5.3/debian/compat --- old/SoapyRemote-soapy-remote-0.5.2/debian/compat 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/debian/compat 2026-10-10 16:29:13.000000000 +0200 @@ -1 +1 @@ -9 +10 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/debian/control new/SoapyRemote-soapy-remote-0.5.3/debian/control --- old/SoapyRemote-soapy-remote-0.5.2/debian/control 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/debian/control 2026-10-10 16:29:13.000000000 +0200 @@ -1,18 +1,18 @@ Source: soapyremote Section: hamradio Priority: optional -Maintainer: Josh Blum <[email protected]> +Maintainer: Christian W. Zuckschwerdt <[email protected]> Build-Depends: - debhelper (>= 9.0.0), + debhelper, cmake, libavahi-client-dev, - libsoapysdr-dev (>= 0.3.0) + libsoapysdr-dev (>= 0.9.0) Standards-Version: 4.1.4 Homepage: https://github.com/pothosware/SoapyRemote/wiki Vcs-Git: https://github.com/pothosware/SoapyRemote.git Vcs-Browser: https://github.com/pothosware/SoapyRemote -Package: soapysdr0.7-module-remote +Package: soapysdr0.9-module-remote Architecture: any Multi-Arch: same Depends: ${shlibs:Depends}, ${misc:Depends}, avahi-daemon @@ -25,7 +25,7 @@ Package: soapysdr-module-remote Architecture: all -Depends: soapysdr0.7-module-remote, ${misc:Depends} +Depends: soapysdr0.9-module-remote, ${misc:Depends} Description: Use SoapySDR devices over network (default client module) The SoapyRemote project provides a client module and a server that make it possible on the client side to list and access hardware supported by SoapySDR diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr-server.install new/SoapyRemote-soapy-remote-0.5.3/debian/soapysdr-server.install --- old/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr-server.install 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/debian/soapysdr-server.install 2026-10-10 16:29:13.000000000 +0200 @@ -1,4 +1,3 @@ usr/bin/ -#systemd-service-file-outside-lib -usr/lib/systemd/ lib/ +usr/lib/systemd/ usr/lib/sysctl.d/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr-server.postinst new/SoapyRemote-soapy-remote-0.5.3/debian/soapysdr-server.postinst --- old/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr-server.postinst 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/debian/soapysdr-server.postinst 2026-10-10 16:29:13.000000000 +0200 @@ -5,7 +5,7 @@ #Load the new sysctl limits so they are immediately usable. #Otherwise, the limits will be always loaded at boot time. if [ -x "`which sysctl 2>/dev/null`" ]; then - sysctl --load /usr/lib/sysctl.d/SoapySDRServer.conf || true + sysctl --load /usr/lib/sysctl.d/10-SoapySDRServer.conf || true fi fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr0.7-module-remote.install new/SoapyRemote-soapy-remote-0.5.3/debian/soapysdr0.7-module-remote.install --- old/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr0.7-module-remote.install 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/debian/soapysdr0.7-module-remote.install 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -usr/lib/*/SoapySDR/modules* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr0.9-module-remote.install new/SoapyRemote-soapy-remote-0.5.3/debian/soapysdr0.9-module-remote.install --- old/SoapyRemote-soapy-remote-0.5.2/debian/soapysdr0.9-module-remote.install 1970-01-01 01:00:00.000000000 +0100 +++ new/SoapyRemote-soapy-remote-0.5.3/debian/soapysdr0.9-module-remote.install 2026-10-10 16:29:13.000000000 +0200 @@ -0,0 +1 @@ +usr/lib/*/SoapySDR/modules* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/server/CMakeLists.txt new/SoapyRemote-soapy-remote-0.5.3/server/CMakeLists.txt --- old/SoapyRemote-soapy-remote-0.5.2/server/CMakeLists.txt 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/server/CMakeLists.txt 2026-10-10 16:29:13.000000000 +0200 @@ -1,4 +1,26 @@ ######################################################################## +# Build the remote server application +######################################################################## +add_executable(SoapySDRServer + SoapyServer.cpp + ServerListener.cpp + ClientHandler.cpp + LogForwarding.cpp + ServerStreamData.cpp) + +target_link_libraries(SoapySDRServer PRIVATE SoapySDR SoapySDRRemoteCommon) + +target_include_directories(SoapySDRServer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +if (MSVC) + target_include_directories(SoapySDRServer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/msvc) +endif () + +install(TARGETS SoapySDRServer DESTINATION ${CMAKE_INSTALL_BINDIR}) + +#install man pages for the application executable +install(FILES SoapySDRServer.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) + +######################################################################## # Thread config support ######################################################################## find_library( @@ -8,32 +30,11 @@ ) if (RT_LIBRARIES) - list(APPEND SoapySDR_LIBRARIES ${RT_LIBRARIES}) + target_link_libraries(SoapySDRServer PRIVATE ${RT_LIBRARIES}) endif() if(WIN32) - list(APPEND SOAPY_SERVER_SOURCES ThreadPrioWindows.cpp) + target_sources(SoapySDRServer PRIVATE ThreadPrioWindows.cpp) elseif(UNIX) - list(APPEND SOAPY_SERVER_SOURCES ThreadPrioUnix.cpp) + target_sources(SoapySDRServer PRIVATE ThreadPrioUnix.cpp) endif() - -######################################################################## -# Build the remote server application -######################################################################## -list(APPEND SOAPY_SERVER_SOURCES - SoapyServer.cpp - ServerListener.cpp - ClientHandler.cpp - LogForwarding.cpp - ServerStreamData.cpp -) -if (MSVC) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/msvc) -endif () -include_directories(${SoapySDR_INCLUDE_DIRS}) -add_executable(SoapySDRServer ${SOAPY_SERVER_SOURCES}) -target_link_libraries(SoapySDRServer ${SoapySDR_LIBRARIES} SoapySDRRemoteCommon) -install(TARGETS SoapySDRServer DESTINATION bin) - -#install man pages for the application executable -install(FILES SoapySDRServer.1 DESTINATION share/man/man1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/server/ClientHandler.cpp new/SoapyRemote-soapy-remote-0.5.3/server/ClientHandler.cpp --- old/SoapyRemote-soapy-remote-0.5.2/server/ClientHandler.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/server/ClientHandler.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2015-2018 Josh Blum +// Copyright (c) 2015-2020 Josh Blum // Copyright (c) 2016-2016 Bastille Networks // SPDX-License-Identifier: BSL-1.0 @@ -16,6 +16,7 @@ #include <SoapySDR/Logger.hpp> #include <SoapySDR/Formats.hpp> #include <SoapySDR/Version.hpp> +#include <ciso646> #include <iostream> #include <mutex> @@ -92,6 +93,11 @@ SoapyRemoteCalls call; unpacker & call; + // every call except factory and logger calls needs a device selected + if (call >= SOAPY_REMOTE_GET_DRIVER_KEY && _dev == nullptr) { + throw std::runtime_error("SoapyClientHandler::handleOnce(" + std::to_string(int(call)) + ") FAIL: no device selected"); + } + switch (call) { @@ -643,6 +649,54 @@ } break; //////////////////////////////////////////////////////////////////// + case SOAPY_REMOTE_HAS_IQ_BALANCE_MODE_AUTO: + //////////////////////////////////////////////////////////////////// + { + char direction = 0; + int channel = 0; + unpacker & direction; + unpacker & channel; + #ifdef SOAPY_SDR_API_HAS_IQ_BALANCE_MODE + packer & _dev->hasIQBalanceMode(direction, channel); + #else + bool result(false); + packer & result; + #endif + } break; + + //////////////////////////////////////////////////////////////////// + case SOAPY_REMOTE_SET_IQ_BALANCE_MODE_AUTO: + //////////////////////////////////////////////////////////////////// + { + char direction = 0; + int channel = 0; + bool automatic = false; + unpacker & direction; + unpacker & channel; + unpacker & automatic; + #ifdef SOAPY_SDR_API_HAS_IQ_BALANCE_MODE + _dev->setIQBalanceMode(direction, channel, automatic); + #endif + packer & SOAPY_REMOTE_VOID; + } break; + + //////////////////////////////////////////////////////////////////// + case SOAPY_REMOTE_GET_IQ_BALANCE_MODE_AUTO: + //////////////////////////////////////////////////////////////////// + { + char direction = 0; + int channel = 0; + unpacker & direction; + unpacker & channel; + #ifdef SOAPY_SDR_API_HAS_IQ_BALANCE_MODE + packer & _dev->getIQBalanceMode(direction, channel); + #else + bool result(false); + packer & result; + #endif + } break; + + //////////////////////////////////////////////////////////////////// case SOAPY_REMOTE_HAS_FREQUENCY_CORRECTION: //////////////////////////////////////////////////////////////////// { @@ -1049,6 +1103,42 @@ } break; //////////////////////////////////////////////////////////////////// + case SOAPY_REMOTE_SET_REF_CLOCK_RATE: + //////////////////////////////////////////////////////////////////// + { + double rate = 0; + unpacker & rate; + #ifdef SOAPY_SDR_API_HAS_REF_CLOCK_RATE_API + _dev->setReferenceClockRate(rate); + #endif + packer & SOAPY_REMOTE_VOID; + } break; + + //////////////////////////////////////////////////////////////////// + case SOAPY_REMOTE_GET_REF_CLOCK_RATE: + //////////////////////////////////////////////////////////////////// + { + #ifdef SOAPY_SDR_API_HAS_REF_CLOCK_RATE_API + packer & _dev->getReferenceClockRate(); + #else + double result; + packer & result; + #endif + } break; + + //////////////////////////////////////////////////////////////////// + case SOAPY_REMOTE_GET_REF_CLOCK_RATES: + //////////////////////////////////////////////////////////////////// + { + #ifdef SOAPY_SDR_API_HAS_REF_CLOCK_RATE_API + packer & _dev->getReferenceClockRates(); + #else + SoapySDR::RangeList result; + packer & result; + #endif + } break; + + //////////////////////////////////////////////////////////////////// case SOAPY_REMOTE_LIST_CLOCK_SOURCES: //////////////////////////////////////////////////////////////////// { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/server/ServerListener.cpp new/SoapyRemote-soapy-remote-0.5.3/server/ServerListener.cpp --- old/SoapyRemote-soapy-remote-0.5.2/server/ServerListener.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/server/ServerListener.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -5,6 +5,7 @@ #include "SoapyRemoteDefs.hpp" #include "ClientHandler.hpp" #include "SoapyRPCSocket.hpp" +#include <ciso646> #include <thread> #include <iostream> @@ -93,7 +94,7 @@ SoapyRPCSocket *client = _sock.accept(); if (client == NULL) { - std::cerr << "SoapyServerListener::accept() FAIL:" << _sock.lastErrorMsg() << std::endl; + std::cerr << "SoapyServerListener::accept() FAIL: " << _sock.lastErrorMsg() << std::endl; return; } std::cout << "SoapyServerListener::accept(" << client->getpeername() << ")" << std::endl; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/server/ServerStreamData.cpp new/SoapyRemote-soapy-remote-0.5.3/server/ServerStreamData.cpp --- old/SoapyRemote-soapy-remote-0.5.2/server/ServerStreamData.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/server/ServerStreamData.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -7,6 +7,7 @@ #include "SoapyStreamEndpoint.hpp" #include <SoapySDR/Device.hpp> #include <SoapySDR/Logger.hpp> +#include <ciso646> #include <algorithm> //min #include <thread> #include <vector> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/server/SoapyServer.cpp new/SoapyRemote-soapy-remote-0.5.3/server/SoapyServer.cpp --- old/SoapyRemote-soapy-remote-0.5.2/server/SoapyServer.cpp 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/server/SoapyServer.cpp 2026-10-10 16:29:13.000000000 +0200 @@ -8,6 +8,7 @@ #include "SoapyRPCSocket.hpp" #include "SoapySSDPEndpoint.hpp" #include "SoapyMDNSEndpoint.hpp" +#include <ciso646> #include <cstdlib> #include <cstddef> #include <iostream> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/system/CMakeLists.txt new/SoapyRemote-soapy-remote-0.5.3/system/CMakeLists.txt --- old/SoapyRemote-soapy-remote-0.5.2/system/CMakeLists.txt 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/system/CMakeLists.txt 2026-10-10 16:29:13.000000000 +0200 @@ -1,19 +1,31 @@ ######################################################################## # SoapySDRServer systemd service ######################################################################## -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/SoapySDRServer.service.in - ${CMAKE_CURRENT_BINARY_DIR}/SoapySDRServer.service -@ONLY) - -install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/SoapySDRServer.service - DESTINATION lib/systemd/system) +option(ENABLE_SYSTEMD "Install systemd unit" ON) +if(ENABLE_SYSTEMD) + + set(SYSTEMD_UNIT_DIR "lib/systemd/system" CACHE STRING "Directory to install systemd unit") + + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/SoapySDRServer.service.in + ${CMAKE_CURRENT_BINARY_DIR}/SoapySDRServer.service + @ONLY) + + install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/SoapySDRServer.service + DESTINATION "${SYSTEMD_UNIT_DIR}") +endif() ######################################################################## # Increase the sysctl network limits ######################################################################## -install( - FILES SoapySDRServer.sysctl - RENAME SoapySDRServer.conf - DESTINATION lib/sysctl.d) +option(ENABLE_SYSCTL "Install kernel tweaks for socket buffer sizes" ON) +if(ENABLE_SYSCTL) + + set(SYSCTL_CONFIG_DIR "lib/sysctl.d" CACHE STRING "Directory to install sysctl.d configs") + + install( + FILES SoapySDRServer.sysctl + RENAME 10-SoapySDRServer.conf + DESTINATION "${SYSCTL_CONFIG_DIR}") +endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/SoapyRemote-soapy-remote-0.5.2/system/SoapySDRServer.service.in new/SoapyRemote-soapy-remote-0.5.3/system/SoapySDRServer.service.in --- old/SoapyRemote-soapy-remote-0.5.2/system/SoapySDRServer.service.in 2020-07-20 22:03:41.000000000 +0200 +++ new/SoapyRemote-soapy-remote-0.5.3/system/SoapySDRServer.service.in 2026-10-10 16:29:13.000000000 +0200 @@ -4,7 +4,7 @@ After=network-online.target [Service] -ExecStart=@CMAKE_INSTALL_PREFIX@/bin/SoapySDRServer --bind +ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/SoapySDRServer --bind KillMode=process Restart=on-failure LimitRTPRIO=99
