summary refs log tree commit diff
path: root/gnu/packages/radio.scm
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2023-01-30 11:33:18 +0200
committerEfraim Flashner <efraim@flashner.co.il>2023-01-30 12:39:40 +0200
commit4cf1acc7f3033b50b0bf19e02c9f522d522d338c (patch)
tree9fd64956ee60304c15387eb394cd649e49f01467 /gnu/packages/radio.scm
parentedb8c09addd186d9538d43b12af74d6c7aeea082 (diff)
parent595b53b74e3ef57a1c0c96108ba86d38a170a241 (diff)
downloadguix-4cf1acc7f3033b50b0bf19e02c9f522d522d338c.tar.gz
Merge remote-tracking branch 'origin/master' into core-updates
 Conflicts:
	doc/guix.texi
	gnu/local.mk
	gnu/packages/admin.scm
	gnu/packages/base.scm
	gnu/packages/chromium.scm
	gnu/packages/compression.scm
	gnu/packages/databases.scm
	gnu/packages/diffoscope.scm
	gnu/packages/freedesktop.scm
	gnu/packages/gnome.scm
	gnu/packages/gnupg.scm
	gnu/packages/guile.scm
	gnu/packages/inkscape.scm
	gnu/packages/llvm.scm
	gnu/packages/openldap.scm
	gnu/packages/pciutils.scm
	gnu/packages/ruby.scm
	gnu/packages/samba.scm
	gnu/packages/sqlite.scm
	gnu/packages/statistics.scm
	gnu/packages/syndication.scm
	gnu/packages/tex.scm
	gnu/packages/tls.scm
	gnu/packages/version-control.scm
	gnu/packages/xml.scm
	guix/build-system/copy.scm
	guix/scripts/home.scm
Diffstat (limited to 'gnu/packages/radio.scm')
-rw-r--r--gnu/packages/radio.scm565
1 files changed, 413 insertions, 152 deletions
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index f4c9d866df..3e5ada8c48 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -2,15 +2,16 @@
 ;;; Copyright © 2017, 2018, 2019, 2020, 2022 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2019, 2020 Christopher Howard <christopher@librehacker.com>
 ;;; Copyright © 2019, 2020 Evan Straw <evan.straw99@gmail.com>
-;;; Copyright © 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2020 Charlie Ritter <chewzerita@posteo.net>
-;;; Copyright © 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 João Pedro Simas <jpsimas@gmail.com>
 ;;; Copyright © 2021 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
 ;;; Copyright © 2022 Sheng Yang <styang@fastmail.com>
 ;;; Copyright © 2022 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2022 Ryan Tolboom <ryan@using.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -89,6 +90,7 @@
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tcl)
@@ -173,7 +175,7 @@ used as a drop-in substitute for @code{libfec}.")
 (define-public liquid-dsp
   (package
     (name "liquid-dsp")
-    (version "1.4.0")
+    (version "1.5.0")
     (source
      (origin (method git-fetch)
              (uri (git-reference
@@ -181,21 +183,25 @@ used as a drop-in substitute for @code{libfec}.")
                    (commit (string-append "v" version))))
              (file-name (git-file-name name version))
              (sha256
-              (base32 "0mr86z37yycrqwbrmsiayi1vqrgpjq0pn1c3p1qrngipkw45jnn0"))))
+              (base32 "0m0bhj80rs9yhfwnrlx960lii1cqijz1wr8q93i7m2z91h3v3w0j"))))
     (build-system gnu-build-system)
     (native-inputs
      (list autoconf automake))
     (inputs
      (list fftwf libfec))
     (arguments
-     `(;; For reproducibility, disable use of SSE3, SSE4.1, etc.
-       #:configure-flags '("--enable-simdoverride")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'delete-static-library
-           (lambda* (#:key outputs #:allow-other-keys)
-             (delete-file (string-append (assoc-ref outputs "out")
-                                         "/lib/libliquid.a")))))))
+     (list
+      ;; For reproducibility, disable use of SSE3, SSE4.1, etc.
+      #:configure-flags #~(list "--enable-simdoverride")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'delete-static-library
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((version #$(version-major+minor
+                                (package-version this-package))))
+                (delete-file (string-append #$output
+                                            "/lib/libliquid.a."
+                                            version))))))))
     (home-page "https://liquidsdr.org")
     (synopsis "Signal processing library for software-defined radios")
     (description
@@ -421,33 +427,36 @@ controls for certain tuners which may be paired with an audio device.")
       (license license:expat))))
 
 (define-public soapyhackrf
-  (package
-    (name "soapyhackrf")
-    (version "0.3.4")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/pothosware/SoapyHackRF")
-             (commit (string-append "soapy-hackrf-" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0wnnsm3c4ivwcbs1b68svbyds13aajws9mqk2xjc2pqgj0fdhcvz"))))
-    (build-system cmake-build-system)
-    (inputs
-     (list hackrf soapysdr))
-    (arguments
-     `(#:tests? #f))  ; No test suite
-    (home-page "https://github.com/pothosware/SoapyHackRF/wiki")
-    (synopsis "SoapySDR HackRF module")
-    (description
-     "This package provides HackRF devices support to the SoapySDR library.")
-    (license license:expat)))
+  ;; Some fixes are not yet in a tagged release.
+  (let ((commit "6c0c33f0aa44c3080674e6bca0273184d3e9eb44")
+        (revision "1"))
+    (package
+      (name "soapyhackrf")
+      (version (git-version "0.3.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/pothosware/SoapyHackRF")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1khplrp6iphdclj1wrybxs7pw42rf9112fhfhw7x2fvds8yiswm7"))))
+      (build-system cmake-build-system)
+      (inputs
+       (list hackrf soapysdr))
+      (arguments
+       `(#:tests? #f))  ; No test suite
+      (home-page "https://github.com/pothosware/SoapyHackRF/wiki")
+      (synopsis "SoapySDR HackRF module")
+      (description
+       "This package provides HackRF devices support to the SoapySDR library.")
+      (license license:expat))))
 
 (define-public soapyrtlsdr
   (package
     (name "soapyrtlsdr")
-    (version "0.3.2")
+    (version "0.3.3")
     (source
      (origin
        (method git-fetch)
@@ -456,7 +465,7 @@ controls for certain tuners which may be paired with an audio device.")
              (commit (string-append "soapy-rtl-sdr-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1dlnryj6k20pk7w7v4v13y099r7ikhvlzbgzgphmi5cxkdv0shrd"))))
+        (base32 "0g1d69lpqw9c8hkir0h61nh40rgyz9p9x04xcfdih7iw26n5vai1"))))
     (build-system cmake-build-system)
     (inputs
      (list rtl-sdr soapysdr))
@@ -468,10 +477,90 @@ controls for certain tuners which may be paired with an audio device.")
      "This package provides RTL-SDR devices support to the SoapySDR library.")
     (license license:expat)))
 
+(define-public python-simplesoapy
+  (package
+    (name "python-simplesoapy")
+    (version "1.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "SimpleSoapy" version))
+       (sha256
+        (base32 "0bh02m5zj82mp7sxpvwr24ylmrbp3p4r9q7psqcfnxl628w3b4hl"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-numpy soapysdr))
+    (home-page "https://github.com/xmikos/simplesoapy")
+    (synopsis "Python wrapper for SoapySDR")
+    (description
+     "This package provide a simple pythonic wrapper for the SoapySDR
+library.")
+    (license license:expat)))
+
+(define-public soapy-power
+  (package
+    (name "soapy-power")
+    (version "1.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "soapy_power" version))
+       (sha256
+        (base32 "1rajmygcqvv5ph7yk65r4w581lfszrz0f48csvfmma1ami0lirdm"))))
+    (build-system python-build-system)
+    (inputs
+     (list python-numpy
+           python-scipy
+           python-simplesoapy
+           python-simplespectral))
+    (home-page "https://github.com/xmikos/soapy_power")
+    (synopsis "Obtain power spectrum from SDR devices")
+    (description "The @code{soapy_power} obtains the power spectrum from SDR
+devices that are supported by the SoapySDR library.")
+    (license license:expat)))
+
+(define-public qspectrumanalyzer
+  (package
+    (name "qspectrumanalyzer")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "QSpectrumAnalyzer" version))
+       (sha256
+        (base32 "1bhl8zp4z7v3595ailyivx9vb7y5si6kr22aylphb5pf60jxqhn0"))))
+    (build-system python-build-system)
+    (inputs
+     (list bash-minimal
+           python-pyqt
+           python-pyqtgraph
+           python-qt.py
+           python-simplespectral
+           python-simplesoapy
+           soapy-power))
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'wrap-path
+                 ;; Add the location of the default backend to PATH.
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (wrap-program (string-append #$output
+                                                "/bin/qspectrumanalyzer")
+                     `("PATH" ":" prefix
+                       (,(string-append (assoc-ref inputs "soapy-power")
+                                        "/bin")))))))))
+    (home-page "https://github.com/xmikos/qspectrumanalyzer")
+    (synopsis "Spectrum analyzer for multiple SDR platforms")
+    (description
+     "This package provides a spectrum analyzer for multiple SDR platforms.
+It is a GUI for @code{soapy_power}, @code{hackrf_sweep}, @code{rtl_power},
+@code{rx_power} and other backends.")
+    (license license:gpl3)))
+
 (define-public aptdec
   ;; No release since 2013, use commit directly.
-  (let ((commit "51405971fd4e97714d1e987269e49c6edfe4e0da")
-        (revision "2"))
+  (let ((commit "4d4a0c9787a27d1eba26b9299c23ae9c66e56716")
+        (revision "3"))
     (package
       (name "aptdec")
       (version (git-version "1.7" revision commit))
@@ -480,10 +569,11 @@ controls for certain tuners which may be paired with an audio device.")
          (method git-fetch)
          (uri (git-reference
                (url "https://github.com/Xerbo/aptdec")
-               (commit commit)))
+               (commit commit)
+               (recursive? #t)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0fzkhqnbkc2dd39jzb5m5mwcl31b0x3w0yykpx4s195llq4bdvis"))))
+          (base32 "09dvvwk4bs9d4bf9z74ixvhzghwzmlbqbx1dn20hbhpm0bgxwk8m"))))
       (build-system cmake-build-system)
       (inputs
        (list libpng libsndfile))
@@ -798,6 +888,61 @@ primitives for SDR (Software Defined Radio).")
     (home-page "https://osmocom.org/projects/libosmo-dsp")
     (license license:gpl2+)))
 
+(define-public gr-dsd
+  ;; The bundled DSD has been modified to bypass the soundcard.
+  (let ((commit "f9b99360b9b15a568befec1b8cc262f7806898e9")
+        (revision "0"))
+    (package
+      (name "gr-dsd")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/argilo/gr-dsd")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1axxb8jdbjbf69csp17gpfis8id66ijjrqp2wbyvz1p66m0svldr"))))
+      (build-system cmake-build-system)
+      (native-inputs
+       (list cppunit
+             doxygen
+             pkg-config
+             pybind11
+             python-numpy))
+      (inputs
+       (list boost
+             gmp
+             gnuradio
+             itpp
+             libsndfile
+             log4cpp
+             spdlog
+             volk))
+      (arguments
+       (list ;; Tests fail with:
+             ;;   from dsd import dsd_block_ff
+             ;;   ModuleNotFoundError: No module named 'dsd'
+             #:tests? #f
+             #:phases
+             #~(modify-phases %standard-phases
+                 (add-after 'unpack 'fix-itpp-detection
+                   (lambda _
+                     (substitute* "dsd/cmake/FindITPP.cmake"
+                       (("libitpp\\.dll")
+                        "itpp_debug")))))))
+      (synopsis "GNU Radio block for Digital Speech Decoder")
+      (description
+       "This package provides a GNU Radio block interfacing with Digital
+Speech Decoder (DSD) to decode several digital voice protocols, like D-STAR,
+DMR, NXDN, P25, etc.")
+      (home-page "https://github.com/argilo/gr-dsd")
+      (license (list license:bsd-3
+                     license:gpl2
+                     license:gpl3+
+                     license:isc)))))
+
 (define-public gr-iqbal
   ;; No tag for version supporting Gnuradio 3.9; use commit.
   (let ((commit "fbee239a6fb36dd2fb564f6e6a0d393c4bc844db")
@@ -899,7 +1044,7 @@ satellites.")
 (define-public gqrx
   (package
     (name "gqrx")
-    (version "2.15.8")
+    (version "2.15.9")
     (source
      (origin
        (method git-fetch)
@@ -908,7 +1053,7 @@ satellites.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ph7fnjxfv7rfdlh17c8j4djvkfqjnalmcvnafhnq7agjy428727"))))
+        (base32 "1a70lmcidp5ccmpvlvpfk1g7pshyp8xq2k0kgxrplf8za5hns019"))))
     (build-system qt-build-system)
     (native-inputs
      (list pkg-config))
@@ -937,6 +1082,29 @@ using GNU Radio and the Qt GUI toolkit.")
     (home-page "https://gqrx.dk/")
     (license license:gpl3+)))
 
+(define-public gqrx-scanner
+  (package
+    (name "gqrx-scanner")
+    (version "1.0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/neural75/gqrx-scanner")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ar8kqfrd768l6y4kqgq3467xckrrpaq8zlwzz5l7lp8r41w5plr"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f)) ; No test suite
+    (synopsis "Frequency scanner for Gqrx")
+    (description
+     "This package provides a frequency scanner for the Gqrx software-defined
+radio receiver.")
+    (home-page "https://github.com/neural75/gqrx-scanner")
+    (license license:expat)))
+
 (define-public fldigi
   (package
     (name "fldigi")
@@ -1083,39 +1251,35 @@ for correctness.")
 (define-public hackrf
   (package
     (name "hackrf")
-    (version "2021.03.1")
+    (version "2022.09.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/mossmann/hackrf")
+             (url "https://github.com/greatscottgadgets/hackrf")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "12fkgimjy5ia291c1rn4y59pn9r5wdvz5x9z5xc8zr1xr96iyhfs"))))
+        (base32 "0m9j160q5zb3jimszv1lb6j76zf5lwijvpfl1k28d832rh847vvk"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:configure-flags
-       (list "-DUDEV_RULES_GROUP=dialout"
-             (string-append "-DUDEV_RULES_PATH="
-                            (assoc-ref %outputs "out")
-                            "/lib/udev/rules.d"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'enter-source-directory
-           (lambda _
-             (chdir "host")
-             #t))
-         (add-after 'install 'delete-static-library
-           (lambda* (#:key outputs #:allow-other-keys)
-             (delete-file (string-append (assoc-ref outputs "out")
-                                         "/lib/libhackrf.a"))
-             #t))
-         (add-before 'install-license-files 'leave-source-directory
-           (lambda _
-             (chdir "..")
-             #t)))
-       #:tests? #f)) ; no test suite
+     (list #:configure-flags
+           #~(list "-DUDEV_RULES_GROUP=dialout"
+                   (string-append "-DUDEV_RULES_PATH="
+                                  #$output
+                                  "/lib/udev/rules.d"))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'enter-source-directory
+                 (lambda _
+                   (chdir "host")))
+               (add-after 'install 'delete-static-library
+                 (lambda _
+                   (delete-file (string-append #$output "/lib/libhackrf.a"))))
+               (add-before 'install-license-files 'leave-source-directory
+                 (lambda _
+                   (chdir ".."))))
+           #:tests? #f)) ; no test suite
     (native-inputs
      (list pkg-config))
     (inputs
@@ -1144,20 +1308,35 @@ you must extend 'udev-service-type' with this package.  E.g.:
         (base32 "11r4i8gmxnb6ixpk4ns38c9xwj3qibp2v3pkhy2z0lhz0xxi1w4b"))))
     (build-system gnu-build-system)
     (native-inputs
-     (list doxygen
-           lua
+     (list autoconf
+           automake
+           doxygen
+           libtool
            pkg-config
            python-wrapper
-           swig
-           tcl))
+           swig))
     (inputs
-     (list gd libusb libxml2 readline))
+     (list gd
+           libusb
+           libxml2
+           lua
+           python
+           readline
+           tcl))
     (arguments
-     `(#:configure-flags '("--disable-static"
-                           "--with-lua-binding"
-                           "--with-python-binding"
-                           "--with-tcl-binding"
-                           "--with-xml-support")))
+     `(#:configure-flags
+       '("--disable-static"
+         "--with-lua-binding"
+         "--with-python-binding"
+         "--with-tcl-binding"
+         "--with-xml-support")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'bootstrap 'force-bootstrap
+           ;; The included configure script is misbuilt.  It will never find
+           ;; pkg-config, and hence any libraries that rely on it.  Rebuild it.
+           (lambda _
+             (delete-file "configure"))))))
     (synopsis "Tools and API to control radios")
     (description
      "The Ham Radio Control Library (Hamlib) is a project to provide programs
@@ -1415,14 +1594,14 @@ operators.")
 (define-public xnec2c
   (package
     (name "xnec2c")
-    (version "4.4.11")
+    (version "4.4.12")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.xnec2c.org/releases/xnec2c-v"
                            version ".tar.gz"))
        (sha256
-        (base32 "13ybnb1v1y9wjmj49s8ir2rpfsz7h8r9jwv0qd4if9wsn44jg29k"))))
+        (base32 "1ibj2bjzn4dp988w0yayjsiccv44icsm02gr0g6gk389p7lg32p9"))))
     (build-system gnu-build-system)
     (native-inputs
      (list autoconf
@@ -1461,7 +1640,7 @@ gain and standing wave ratio.")
 (define-public dump1090
   (package
     (name "dump1090")
-    (version "7.1")
+    (version "8.2")
     (source
      (origin
        (method git-fetch)
@@ -1470,25 +1649,26 @@ gain and standing wave ratio.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1702qv5g27sgpqf98sj2qbg36sqzc7r3kssslzzgljqkr5jgrw6m"))))
+        (base32 "16ylywy2fdwf5kqr8kgl9lbzy1zwx4ckj9y122k3h86pfkswljs9"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config))
     (inputs
      (list hackrf libusb ncurses rtl-sdr))
     (arguments
-     `(#:test-target "test"
-       #:make-flags
-       (list (string-append "CC=" ,(cc-for-target))
-             "BLADERF=no")
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
-               (install-file "dump1090" bin)
-               (install-file "view1090" bin)))))))
+     (list
+      #:test-target "test"
+      #:make-flags
+      #~(list (string-append "CC=" #$(cc-for-target))
+              "BLADERF=no")
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (replace 'install
+            (lambda _
+              (let ((bin (string-append #$output "/bin/")))
+                (install-file "dump1090" bin)
+                (install-file "view1090" bin)))))))
     (synopsis "Mode S decoder for rtl-sdr devices")
     (description
      "Dump1090 is a Mode S decoder specifically designed for rtl-sdr devices.
@@ -1500,7 +1680,7 @@ their position, altitude, speed, etc.")
 (define-public rtl-433
   (package
     (name "rtl-433")
-    (version "21.12")
+    (version "22.11")
     (source
      (origin
        (method git-fetch)
@@ -1509,7 +1689,7 @@ their position, altitude, speed, etc.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ygxs35zvgnamhqdwk1akcwagcirzpi4wndzgf9d23faiv4cm01a"))))
+        (base32 "0qx89qmf0zn0qa05vraipny4ihx6lm72s830mbfyzw2znyk3wdm8"))))
     (build-system cmake-build-system)
     (native-inputs
      (list pkg-config))
@@ -1525,7 +1705,7 @@ from devices on the 433 MHz, 868 MHz, 315 MHz, 345 MHz and 915 MHz ISM bands.")
 (define-public multimon-ng
   (package
     (name "multimon-ng")
-    (version "1.1.9")
+    (version "1.2.0")
     (source
      (origin
        (method git-fetch)
@@ -1534,7 +1714,7 @@ from devices on the 433 MHz, 868 MHz, 315 MHz, 345 MHz and 915 MHz ISM bands.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "01716cfhxfzsab9zjply9giaa4nn4b7rm3p3vizrwi7n253yiwm2"))))
+        (base32 "0hm7391z1iz2sk4xkwfphqz8qvihqjzsh45csz14gb4jfs1p6ks2"))))
     (build-system cmake-build-system)
     (inputs
      (list libx11 pulseaudio))
@@ -1562,7 +1742,7 @@ modes:
 (define-public nanovna-saver
   (package
     (name "nanovna-saver")
-    (version "0.3.9")
+    (version "0.5.3")
     (source
      (origin
        (method git-fetch)
@@ -1571,7 +1751,7 @@ modes:
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1h5k402wjlj7xjniggwf0x7a5srlgglc2x4hy6lz6c30zwa7z8fm"))))
+        (base32 "1h0wzva8j7fqnpf0qy42bw9rdclgq3jdq902ajvd9v5iqcqs78n0"))))
     (build-system python-build-system)
     (native-inputs
      (list python-cython))
@@ -2101,6 +2281,41 @@ Codec.")
 Audio Broadcasting}.")
       (license license:gpl2+))))
 
+(define-public dsd
+  (let ((commit "59423fa46be8b41ef0bd2f3d2b45590600be29f0")
+        (revision "1"))
+    (package
+      (name "dsd")
+      (version (git-version "1.7.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/szechyjs/dsd")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "128gvgkanvh4n5bjnzkfk419hf5fdbad94fb8d8lv67h94vfchyd"))))
+      (build-system cmake-build-system)
+      (native-inputs
+       (list pkg-config))
+      (inputs
+       (list itpp libsndfile mbelib portaudio))
+      (arguments
+       (list #:phases
+             #~(modify-phases %standard-phases
+                 (add-after 'unpack 'fix-itpp-detection
+                   (lambda _
+                     (substitute* "cmake/FindITPP.cmake"
+                       (("libitpp\\.dll")
+                        "itpp_debug")))))))
+      (synopsis "Digital speech decoder")
+      (description
+       "DSD is able to decode several digital voice formats used in radio
+transmissions.")
+      (home-page "https://github.com/szechyjs/dsd")
+      (license (list license:expat license:gpl2)))))
+
 (define-public dsdcc
   (package
     (name "dsdcc")
@@ -2143,7 +2358,7 @@ voice formats.")
 (define-public sdrangel
   (package
     (name "sdrangel")
-    (version "7.6.2")
+    (version "7.8.5")
     (source
      (origin
        (method git-fetch)
@@ -2152,7 +2367,7 @@ voice formats.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "193iwwb4mbr29mlgaqb67j8214k10k2q0ky9fcl1ja52vmdzz71b"))))
+        (base32 "0kfzmxbhfpvs8csfbhnl5nij6nlbr00s43392wfq35vnnkbgk5lv"))))
     (build-system qt-build-system)
     (native-inputs
      (list doxygen graphviz pkg-config))
@@ -2209,13 +2424,18 @@ voice formats.")
                                #$(this-package-input "soapysdr")))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-boost-compatibility
+         (add-after 'unpack 'fix-CPU-extension-detection
+           ;; ‘Fix’ in the static sense.  TODO: Make this -tune'able.
            (lambda _
-             (substitute*
-                 '("plugins/channelrx/noisefigure/noisefigure.cpp"
-                   "plugins/channelrx/noisefigure/noisefigureenrdialog.cpp")
-               (("boost::math::barycentric_rational<double>")
-                "boost::math::interpolators::barycentric_rational<double>")))))))
+             (let ((file "cmake/Modules/DetectArchitecture.cmake"))
+               ;; Disable all build-time CPU extension detection…
+               (substitute* file
+                 (("detect_extensions\\(.*") ""))
+               (when ,(target-x86-64?)
+                 ;; …but force extensions that are guaranteed to be available.
+                 (substitute* file
+                   ((".*cmake_pop_check_state" eof)
+                    (string-append "force_ext_available(SSE2)\n" eof))))))))))
     (home-page "https://github.com/f4exb/sdrangel/wiki")
     (synopsis "Software defined radio")
     (description
@@ -2300,19 +2520,27 @@ software-defined radio receivers.")
 (define-public wfview
   (package
     (name "wfview")
-    (version "1.2d")
+    (version "1.50")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://gitlab.com/eliggett/wfview")
-             (commit version)))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1kpkwxhcacgmprbr8xz840rj9a22513vxrh2q7d3js5i1dva8j2z"))))
+        (base32 "1djgn1z4hibzci53mrvskz47jfq6hk8lhhqckpa93pvsi9kadl4k"))))
     (build-system qt-build-system)
     (inputs
-     (list opus qcustomplot qtbase-5 qtmultimedia-5 qtserialport))
+     (list eigen
+           opus
+           portaudio
+           pulseaudio
+           qcustomplot
+           qtbase-5
+           qtmultimedia-5
+           qtserialport
+           rtaudio))
     (arguments
      `(#:tests? #f  ; No test suite.
        #:phases
@@ -2376,46 +2604,42 @@ Caller-ID.")
     (license license:gpl3+)))
 
 (define-public rfcat
-  ;; Use a commit for now because some fixes to make rfcat work with
-  ;; Python 3 instead of Python 2 are not in a release yet.
-  (let ((commit "725bf79af27d47cdec64107317c1c8fe3f7ad7b8")
-        (revision "1"))
-    (package
-      (name "rfcat")
-      (version (git-version "1.9.5" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/atlas0fd00m/rfcat")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0dbc6n4pxsa73wzxny773khc73r1dn3ma5hi7xv76vcykjvzkdi3"))))
-      (build-system python-build-system)
-      (inputs
-       (list python-future
-             python-ipython
-             python-numpy
-             python-pyserial
-             python-pyside-2
-             python-pyusb))
-      (arguments
-       `(#:tests? #f  ; Tests want to use a serial port
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'fix-permissions
-             (lambda _
-               (make-file-writable "rflib/rflib_version.py")))
-           (add-after 'install 'install-udev-rules
-             (lambda* (#:key outputs #:allow-other-keys)
-               (install-file "etc/udev/rules.d/20-rfcat.rules"
-                             (string-append (assoc-ref outputs "out")
-                                            "/lib/udev/rules.d")))))))
-      (home-page "https://github.com/atlas0fd00m/rfcat")
-      (synopsis "Program to control some radio dongles")
-      (description
-       "@code{rfcat} is a program to control some radio dongles operating in
+  (package
+    (name "rfcat")
+    (version "1.9.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/atlas0fd00m/rfcat")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0zmgbgf1025ln2v6lc27dmkmwv8pxjgrmhmpk34rkkixhvnk69pf"))))
+    (build-system python-build-system)
+    (inputs
+     (list python-future
+           python-ipython
+           python-numpy
+           python-pyserial
+           python-pyside-2
+           python-pyusb))
+    (arguments
+     (list
+      #:tests? #f  ; Tests want to use a serial port
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-permissions
+            (lambda _
+              (make-file-writable "rflib/rflib_version.py")))
+          (add-after 'install 'install-udev-rules
+            (lambda* _
+              (install-file "etc/udev/rules.d/20-rfcat.rules"
+                            (string-append #$output "/lib/udev/rules.d")))))))
+    (home-page "https://github.com/atlas0fd00m/rfcat")
+    (synopsis "Program to control some radio dongles")
+    (description
+     "@code{rfcat} is a program to control some radio dongles operating in
 ISM bands.
 
 Supported dongles:
@@ -2428,8 +2652,8 @@ Supported dongles:
 
 To install the rfcat udev rules, you must extend @code{udev-service-type} with
 this package.  E.g.: @code{(udev-rules-service 'rfcat rfcat)}")
-      (license (list license:bsd-3
-                     license:gpl2)))))
+    (license (list license:bsd-3
+                   license:gpl2))))
 
 (define-public rx-tools
   ;; No tagged release since 2016, use commit instead.
@@ -2588,3 +2812,40 @@ the navigation message, computation of observables and, finally, computation of
 position fixes) the signals of the BeiDou, Galileo, GLONASS and GPS Global
 Navigation Satellite System.")
     (license license:gpl3+)))
+
+(define-public qdmr
+  (package
+    (name "qdmr")
+    (version "0.11.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/hmatuschek/qdmr")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1xbp4ica6bgsiwc57wzm8744dqik2fw77kh1gb8s3sa1q9my2vlx"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list #:tests? #f ;no tests
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-paths
+                 (lambda _
+                   (substitute* "lib/CMakeLists.txt"
+                     (("(DESTINATION \")/etc/udev/" _ directive)
+                      (string-append directive #$output "/lib/udev/"))))))))
+    (inputs (list libusb qtbase-5 qtlocation qtserialport yaml-cpp))
+    (native-inputs (list qttools-5))
+    (home-page "https://dm3mat.darc.de/qdmr/")
+    (synopsis "GUI application and command line tool to program DMR radios")
+    (description
+     "qdmr is a graphical user interface (GUI) application that allows one to
+program several types of DMR radios.  It is comparable to the Customer
+Programming Software (CPS) bundled with these radios but aims to be a more
+universal tool.
+
+To install the qdmr udev rules, you must extend @code{udev-service-type} with this
+package.  E.g.: @code{(udev-rules-service 'qdmr qdmr)}")
+    (license license:gpl3+)))