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: [![Travis Build 
Status](https://travis-ci.org/pothosware/SoapyRemote.svg?branch=master)](https://travis-ci.org/pothosware/SoapyRemote)
+![Build 
Status](https://github.com/pothosware/SoapyRemote/actions/workflows/ci.yml/badge.svg)
 
 ## 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

Reply via email to