projects/guix·blob python-team · refs

3820 lines · 132.9 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2017, 2018, 2019, 2020, 2022 Arun Isaac <[email protected]>
3;;; Copyright © 2019, 2020 Christopher Howard <[email protected]>
4;;; Copyright © 2019, 2020 Evan Straw <[email protected]>
5;;; Copyright © 2020-2025 Guillaume Le Vaillant <[email protected]>
6;;; Copyright © 2020 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2020 Charlie Ritter <[email protected]>
8;;; Copyright © 2020–2022 Tobias Geerinckx-Rice <[email protected]>
9;;; Copyright © 2021 João Pedro Simas <[email protected]>
10;;; Copyright © 2021 Jack Hill <[email protected]>
11;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
12;;; Copyright © 2022 Sheng Yang <[email protected]>
13;;; Copyright © 2022 Greg Hogan <[email protected]>
14;;; Copyright © 2022, 2025 Ryan Tolboom <[email protected]>
15;;; Copyright © 2023-2026 Sharlatan Hellseher <[email protected]>
16;;; Copyright © 2023, 2025 Efraim Flashner <[email protected]>
17;;; Copyright © 2024 Andy Tai <[email protected]>
18;;; Copyright © 2024 Noisytoot <[email protected]>
19;;; Copyright © 2025 Rutherther <[email protected]>
20;;; Copyright © 2025 Jordan Moore <[email protected]>
21;;; Copyright © 2025 Artyom V. Poptsov <[email protected]>
22;;; Copyright © 2025 Laura Kirsch <[email protected]>
23;;; Copyright © 2026 bdunahu <[email protected]>
24;;; Copyright © 2026 Mattia Bunel <[email protected]>
25;;;
26;;; This file is part of GNU Guix.
27;;;
28;;; GNU Guix is free software; you can redistribute it and/or modify it
29;;; under the terms of the GNU General Public License as published by
30;;; the Free Software Foundation; either version 3 of the License, or (at
31;;; your option) any later version.
32;;;
33;;; GNU Guix is distributed in the hope that it will be useful, but
34;;; WITHOUT ANY WARRANTY; without even the implied warranty of
35;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36;;; GNU General Public License for more details.
37;;;
38;;; You should have received a copy of the GNU General Public License
39;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
40
41(define-module (gnu packages radio)
42 #:use-module ((guix licenses) #:prefix license:)
43 #:use-module (guix gexp)
44 #:use-module (guix packages)
45 #:use-module (guix download)
46 #:use-module (guix git-download)
47 #:use-module (guix utils)
48 #:use-module (gnu packages)
49 #:use-module (gnu packages admin)
50 #:use-module (gnu packages algebra)
51 #:use-module (gnu packages assembly)
52 #:use-module (gnu packages astronomy)
53 #:use-module (gnu packages audio)
54 #:use-module (gnu packages autotools)
55 #:use-module (gnu packages base)
56 #:use-module (gnu packages bash)
57 #:use-module (gnu packages bison)
58 #:use-module (gnu packages boost)
59 #:use-module (gnu packages check)
60 #:use-module (gnu packages compression)
61 #:use-module (gnu packages curl)
62 #:use-module (gnu packages databases)
63 #:use-module (gnu packages dns)
64 #:use-module (gnu packages documentation)
65 #:use-module (gnu packages engineering)
66 #:use-module (gnu packages compiler-tools)
67 #:use-module (gnu packages gcc)
68 #:use-module (gnu packages gd)
69 #:use-module (gnu packages geo)
70 #:use-module (gnu packages gettext)
71 #:use-module (gnu packages ghostscript)
72 #:use-module (gnu packages gl)
73 #:use-module (gnu packages glib)
74 #:use-module (gnu packages gnome)
75 #:use-module (gnu packages golang-xyz)
76 #:use-module (gnu packages gps)
77 #:use-module (gnu packages graphviz)
78 #:use-module (gnu packages gstreamer)
79 #:use-module (gnu packages gtk)
80 #:use-module (gnu packages image)
81 #:use-module (gnu packages image-processing)
82 #:use-module (gnu packages javascript)
83 #:use-module (gnu packages jemalloc)
84 #:use-module (gnu packages libedit)
85 #:use-module (gnu packages libusb)
86 #:use-module (gnu packages linux)
87 #:use-module (gnu packages logging)
88 #:use-module (gnu packages lua)
89 #:use-module (gnu packages man)
90 #:use-module (gnu packages maths)
91 #:use-module (gnu packages mp3)
92 #:use-module (gnu packages multiprecision)
93 #:use-module (gnu packages ncurses)
94 #:use-module (gnu packages networking)
95 #:use-module (gnu packages openstack)
96 #:use-module (gnu packages perl)
97 #:use-module (gnu packages pkg-config)
98 #:use-module (gnu packages popt)
99 #:use-module (gnu packages pulseaudio)
100 #:use-module (gnu packages protobuf)
101 #:use-module (gnu packages pretty-print)
102 #:use-module (gnu packages python)
103 #:use-module (gnu packages python-build)
104 #:use-module (gnu packages python-check)
105 #:use-module (gnu packages python-crypto)
106 #:use-module (gnu packages python-science)
107 #:use-module (gnu packages python-web)
108 #:use-module (gnu packages python-xyz)
109 #:use-module (gnu packages qt)
110 #:use-module (gnu packages readline)
111 #:use-module (gnu packages ruby-xyz)
112 #:use-module (gnu packages sdl)
113 #:use-module (gnu packages serialization)
114 #:use-module (gnu packages sphinx)
115 #:use-module (gnu packages sqlite)
116 #:use-module (gnu packages swig)
117 #:use-module (gnu packages tcl)
118 #:use-module (gnu packages tex)
119 #:use-module (gnu packages texinfo)
120 #:use-module (gnu packages tls)
121 #:use-module (gnu packages toolkits)
122 #:use-module (gnu packages video)
123 #:use-module (gnu packages web)
124 #:use-module (gnu packages wxwidgets)
125 #:use-module (gnu packages xiph)
126 #:use-module (gnu packages xml)
127 #:use-module (gnu packages xorg)
128 #:use-module (guix build-system cmake)
129 #:use-module (guix build-system glib-or-gtk)
130 #:use-module (guix build-system gnu)
131 #:use-module (guix build-system go)
132 #:use-module (guix build-system pyproject)
133 #:use-module (guix build-system qt))
134
135(define-public acarsdec
136 (package
137 (name "acarsdec")
138 (version "4.4.1")
139 (source
140 (origin
141 (method git-fetch)
142 (uri (git-reference
143 (url "https://github.com/f00b4r0/acarsdec")
144 (commit (string-append "v" version))))
145 (file-name (git-file-name name version))
146 (sha256
147 (base32 "1wxb6gldhn11ans36hxw8n0v610v2fyq5m9p1n6d2fpwhn7m93ks"))))
148 (build-system cmake-build-system)
149 (arguments
150 (list
151 #:tests? #f ;no tests
152 #:build-type "Release"))
153 (native-inputs
154 (list pkg-config))
155 (inputs
156 (list libacars
157 rtl-sdr alsa-lib))
158 (home-page "https://github.com/TLeconte/acarsdec")
159 (synopsis "ACARS SDR decoder")
160 (description
161 "Acarsdec is a multi-channels acars decoder with built-in rtl_sdr,
162airspy front end or sdrplay device. Since 3.0, it comes with acarsserv to
163store received acars messages.")
164 (license license:gpl2)))
165
166(define-public libfec
167 ;; Use commit to get compilation fixes that are not in a release yet.
168 (let ((commit "9750ca0a6d0a786b506e44692776b541f90daa91")
169 (revision "1"))
170 (package
171 (name "libfec")
172 (version (git-version "1.0" revision commit))
173 (source
174 (origin
175 (method git-fetch)
176 (uri (git-reference
177 (url "https://github.com/quiet/libfec")
178 (commit commit)))
179 (file-name (git-file-name name version))
180 (sha256
181 (base32 "0i6jhrdswr1wglyb9h39idpz5v9z13yhidvlbj34vxpyngrkhlvs"))))
182 (build-system cmake-build-system)
183 (arguments
184 (list
185 #:configure-flags #~'("-DBUILD_SHARED_LIBS=ON")
186 #:modules '((guix build cmake-build-system)
187 ((guix build gnu-build-system) #:prefix gnu:)
188 (guix build utils))
189 #:phases
190 #~(modify-phases %standard-phases
191 (replace 'check
192 (lambda* (#:rest args)
193 (apply (assoc-ref gnu:%standard-phases 'check)
194 #:test-target "test_all" args))))))
195 (home-page "https://github.com/quiet/libfec")
196 (synopsis "Forward error correction algorithms library")
197 (description
198 "This package provides a set of functions that implement several popular
199@dfn{forward error correction} (FEC) algorithms and several low-level routines
200useful in modems implemented with @dfn{digital signal processing} (DSP).")
201 (license license:lgpl2.1))))
202
203(define-public libcorrect
204 (let ((commit "f5a28c74fba7a99736fe49d3a5243eca29517ae9")
205 (revision "1"))
206 (package
207 (name "libcorrect")
208 (version (git-version "0" revision commit))
209 (source
210 (origin
211 (method git-fetch)
212 (uri (git-reference
213 (url "https://github.com/quiet/libcorrect")
214 (commit commit)))
215 (file-name (git-file-name name version))
216 (sha256
217 (base32 "0qc9k8x51k2xfvp6cx8vdiyb3g6fl1y657z4m201aw2m06hs1hzg"))))
218 (build-system cmake-build-system)
219 (arguments
220 (list
221 #:modules '((guix build cmake-build-system)
222 ((guix build gnu-build-system) #:prefix gnu:)
223 (guix build utils))
224 #:phases
225 #~(modify-phases %standard-phases
226 (add-after 'build 'build-libfec-compatibility-layer
227 (lambda _
228 (invoke "make" "shim")))
229 (replace 'check (assoc-ref gnu:%standard-phases 'check))
230 (add-after 'install 'delete-static-libraries
231 (lambda _
232 (delete-file (string-append #$output "/lib/libcorrect.a"))
233 (delete-file (string-append #$output "/lib/libfec.a")))))))
234 (home-page "https://github.com/quiet/libcorrect")
235 (synopsis "Forward error correction library")
236 (description
237 "This library provides convolutional and Reed-Solomon codes for forward
238error correction. It also includes a compatibility layer so that it can be
239used as a drop-in substitute for @code{libfec}.")
240 (license license:bsd-3))))
241
242(define-public libiio
243 (package
244 (name "libiio")
245 (version "0.26")
246 (source
247 (origin
248 (method git-fetch)
249 (uri (git-reference
250 (url "https://github.com/analogdevicesinc/libiio")
251 (commit (string-append "v" version))))
252 (file-name (git-file-name name version))
253 (sha256
254 (base32 "18cmaszfmn6kaa9gi26kkgjk506xqb8zsd4bq6yp8hzxr1qldfly"))))
255 (arguments
256 (list
257 #:tests? #f
258 #:configure-flags
259 #~(list
260 (string-append "-DUDEV_RULES_INSTALL_DIR="
261 #$output "/lib/udev/rules.d")
262 "-DOSX_PACKAGE=off"
263 "-DOSX_FRAMEWORK=off"
264 (string-append "-DPython_EXECUTABLE="
265 (search-input-file %build-inputs "/bin/python3"))
266 "-DPYTHON_BINDINGS=on")
267 #:phases
268 #~(modify-phases %standard-phases
269 (add-after 'unpack 'patch
270 (lambda _
271 (substitute* "bindings/python/iio.py"
272 (("_iiolib = \"iio\"")
273 (string-append "_iiolib = \"" #$output "/lib/libiio.so\""))
274 (("find_library\\(_iiolib\\)") "_iiolib"))
275 ;; Libiio is not installed at the time of the build. The check
276 ;; is unnecessary, to do it the upstream way, we would have to
277 ;; configure, build, install without the bindings first, and then
278 ;; second time with the bindings...
279 (substitute* "bindings/python/setup.py.cmakein"
280 (("self._check_libiio_installed()") "")))))))
281 (native-inputs
282 (list pkg-config
283 flex
284 bison
285 python
286 python-setuptools))
287 (inputs
288 (list avahi
289 libaio
290 libxml2
291 libusb))
292 (build-system cmake-build-system)
293 (home-page "https://github.com/analogdevicesinc/libiio")
294 (synopsis "Library for interfacing with Linux IIO devices")
295 (description
296 "Libiio is used to interface to the Linux Industrial Input/Output (IIO)
297Subsystem. The Linux IIO subsystem is intended to provide support for devices
298that in some sense are analog to digital or digital to analog converters
299(ADCs, DACs). This includes, but is not limited to ADCs, Accelerometers,
300Gyros, IMUs, Capacitance to Digital Converters (CDCs), Pressure Sensors,
301Color, Light and Proximity Sensors, Temperature Sensors, Magnetometers, DACs,
302DDS (Direct Digital Synthesis), PLLs (Phase Locked Loops),
303Variable/Programmable Gain Amplifiers (VGA, PGA), and RF transceivers. You can
304use libiio natively on an embedded Linux target (local mode), or use libiio to
305communicate remotely to that same target from a host Linux, Windows or MAC
306over USB or Ethernet or Serial.")
307 (license (list license:lgpl2.1 license:gpl2))))
308
309(define-public libad9361
310 (package
311 (name "libad9361")
312 (version "0.3")
313 (source
314 (origin
315 (method git-fetch)
316 (uri (git-reference
317 (url "https://github.com/analogdevicesinc/libad9361-iio")
318 (commit (string-append "v" version))))
319 (file-name (git-file-name name version))
320 (sha256
321 (base32 "1inv39xfg8gqz1v7k1n2a7p9zzlb6gq98gcnnpdcr9fa5alvmvpm"))))
322 (inputs
323 (list libiio))
324 (build-system cmake-build-system)
325 (license license:lgpl2.1+)
326 (home-page "https://github.com/analogdevicesinc/libad9361-iio")
327 (synopsis
328 "IIO AD9361 library for filter design and handling, multi-chip sync, etc.")
329 (description
330 "This is a simple library used for userspace, which manages multi-chip
331sync (on platforms (FMCOMMS5) where multiple AD9361 devices are use) and can
332create AD9361 specific FIR filters on the fly.")))
333
334(define-public liquid-dsp
335 (package
336 (name "liquid-dsp")
337 (version "1.7.0")
338 (source
339 (origin (method git-fetch)
340 (uri (git-reference
341 (url "https://github.com/jgaeddert/liquid-dsp")
342 (commit (string-append "v" version))))
343 (file-name (git-file-name name version))
344 (sha256
345 (base32 "0c1mwydpm3nasic2fgbp32s8ajr4hgcv4ir0safl6wlr0p257nrr"))))
346 (build-system gnu-build-system)
347 (native-inputs
348 (list autoconf automake))
349 (inputs
350 (list fftwf libfec))
351 (arguments
352 (list
353 ;; For reproducibility, disable use of SSE3, SSE4.1, etc.
354 #:configure-flags #~(list "--enable-simdoverride")
355 #:phases
356 #~(modify-phases %standard-phases
357 (add-after 'install 'delete-static-library
358 (lambda _
359 (delete-file (string-append #$output "/lib/libliquid.a")))))))
360 (home-page "https://liquidsdr.org")
361 (synopsis "Signal processing library for software-defined radios")
362 (description
363 "Liquid DSP is a @dfn{digital signal processing} (DSP) library designed
364specifically for software-defined radios on embedded platforms. The aim is to
365provide a lightweight DSP library that does not rely on a myriad of external
366dependencies or proprietary and otherwise cumbersome frameworks. All signal
367processing elements are designed to be flexible, scalable, and dynamic,
368including filters, filter design, oscillators, modems, synchronizers, complex
369mathematical operations, and much more.")
370 (license license:expat)))
371
372(define-public rtl-sdr
373 (package
374 (name "rtl-sdr")
375 (version "2.0.1")
376 (source
377 (origin
378 (method git-fetch)
379 (uri (git-reference
380 (url "https://git.osmocom.org/rtl-sdr/")
381 (commit (string-append "v" version))))
382 (file-name (git-file-name name version))
383 (sha256
384 (base32 "0z8dn0gdava894fb9fs9gcwvmik31fcj6ldkggylc0mhgw5145pr"))))
385 (build-system cmake-build-system)
386 (inputs
387 (list libusb))
388 (native-inputs
389 (list pkg-config))
390 (arguments
391 `(#:configure-flags '("-DDETACH_KERNEL_DRIVER=ON"
392 "-DINSTALL_UDEV_RULES=ON")
393 #:tests? #f ; No tests
394 #:phases
395 (modify-phases %standard-phases
396 (add-after 'unpack 'fix-paths
397 (lambda* (#:key outputs #:allow-other-keys)
398 (substitute* "CMakeLists.txt"
399 (("DESTINATION \"/etc/udev/")
400 (string-append "DESTINATION \""
401 (assoc-ref outputs "out")
402 "/lib/udev/")))))
403 (add-after 'fix-paths 'fix-udev-rules
404 (lambda _
405 (substitute* "rtl-sdr.rules"
406 ;; The plugdev group does not exist; use dialout as in
407 ;; the hackrf package.
408 (("GROUP=\"plugdev\"")
409 "GROUP=\"dialout\"")))))))
410 (home-page "https://osmocom.org/projects/sdr/wiki/rtl-sdr")
411 (synopsis "Software defined radio driver for Realtek RTL2832U")
412 (description "DVB-T dongles based on the Realtek RTL2832U can be used as a
413cheap software defined radio, since the chip allows transferring the raw I/Q
414samples to the host. @code{rtl-sdr} provides drivers for this purpose.
415
416The default Linux driver managing DVB-T dongles as TV devices doesn't work for
417SDR purposes and clashes with this package. Therefore you must prevent the
418kernel from loading it automatically by adding the following line to your
419system configuration:
420
421@lisp
422(kernel-arguments '(\"modprobe.blacklist=dvb_usb_rtl28xxu\"))
423@end lisp
424
425To install the rtl-sdr udev rules, you must extend 'udev-service-type' with
426this package. E.g.: @code{(udev-rules-service 'rtl-sdr rtl-sdr)}")
427 (license license:gpl2+)))
428
429(define-public airspy
430 (let ((commit "6f92f47146aa8a8fce59b60927cf8c53da6851b3")
431 (revision "1"))
432 (package
433 (name "airspy")
434 (version (git-version "1.0.10" revision commit))
435 (source
436 (origin
437 (method git-fetch)
438 (uri (git-reference
439 (url "https://github.com/airspy/airspyone_host")
440 (commit commit)))
441 (file-name (git-file-name name version))
442 (sha256
443 (base32 "0y2yz8agp4v36z1766hi92msgs35yvy32brfcscijxdkgswdgbkd"))))
444 (build-system cmake-build-system)
445 (native-inputs
446 (list pkg-config))
447 (inputs
448 (list libusb))
449 (arguments
450 (list #:configure-flags #~(list "-DINSTALL_UDEV_RULES=ON")
451 #:tests? #f ; No tests
452 #:phases
453 #~(modify-phases %standard-phases
454 (add-after 'unpack 'fix-paths
455 (lambda _
456 (substitute* "airspy-tools/CMakeLists.txt"
457 (("DESTINATION \"/etc/udev/")
458 (string-append "DESTINATION \""
459 #$output
460 "/lib/udev/")))))
461 (add-after 'fix-paths 'fix-udev-rules
462 (lambda _
463 (substitute* "airspy-tools/52-airspy.rules"
464 ;; The plugdev group does not exist; use dialout as in
465 ;; the hackrf package.
466 (("GROUP=\"plugdev\"")
467 "GROUP=\"dialout\"")))))))
468 (home-page "https://github.com/airspy/airspyone_host")
469 (synopsis "Software defined radio driver for Airspy")
470 (description
471 "This package provides the driver and utilities for controlling the
472Airspy Software Defined Radio (SDR) over USB.
473
474To install the airspy udev rules, you must extend @code{udev-service-type}
475with this package. E.g.: @code{(udev-rules-service 'airspy airspy)}")
476 (license (list license:bsd-3
477 license:expat
478 license:gpl2+)))))
479
480(define-public airspyhf
481 (let ((commit "40836c59d35d989fe00ac12ef774df736a36c6e4")
482 (revision "1"))
483 (package
484 (name "airspyhf")
485 (version (git-version "1.6.8" revision commit))
486 (source
487 (origin
488 (method git-fetch)
489 (uri (git-reference
490 (url "https://github.com/airspy/airspyhf")
491 (commit commit)))
492 (file-name (git-file-name name version))
493 (sha256
494 (base32 "1s3fm856smvja3cg6fy615igir8wb0dzbp0q25v3vls0qj6pvprb"))))
495 (build-system cmake-build-system)
496 (native-inputs
497 (list pkg-config))
498 (inputs
499 (list libusb))
500 (arguments
501 '(#:configure-flags '("-DINSTALL_UDEV_RULES=ON")
502 #:tests? #f ; No tests
503 #:phases
504 (modify-phases %standard-phases
505 (add-after 'unpack 'fix-paths
506 (lambda* (#:key outputs #:allow-other-keys)
507 (substitute* "tools/CMakeLists.txt"
508 (("DESTINATION \"/etc/udev/")
509 (string-append "DESTINATION \""
510 (assoc-ref outputs "out")
511 "/lib/udev/")))))
512 (add-after 'fix-paths 'fix-udev-rules
513 (lambda _
514 (substitute* "tools/52-airspyhf.rules"
515 ;; The plugdev group does not exist; use dialout as in
516 ;; the hackrf package.
517 (("GROUP=\"plugdev\"")
518 "GROUP=\"dialout\"")))))))
519 (home-page "https://github.com/airspy/airspyhf")
520 (synopsis "Software defined radio driver for Airspy HF+")
521 (description
522 "This package provides the driver and utilities for controlling the
523Airspy HF+ Software Defined Radio (SDR) over USB.
524
525To install the airspyhf udev rules, you must extend @code{udev-service-type}
526with this package. E.g.: @code{(udev-rules-service 'airspyhf airspyhf)}")
527 (license license:bsd-3))))
528
529(define-public soapysdr
530 (package
531 (name "soapysdr")
532 (version "0.8.1")
533 (source
534 (origin
535 (method git-fetch)
536 (uri (git-reference
537 (url "https://github.com/pothosware/SoapySDR")
538 (commit (string-append "soapy-sdr-" version))))
539 (file-name (git-file-name name version))
540 (sha256
541 (base32 "19f2x0pkxvf9figa0pl6xqlcz8fblvqb19mcnj632p0l8vk6qdv2"))))
542 (build-system cmake-build-system)
543 (native-inputs
544 (list python python-setuptools swig-4.0))
545 (native-search-paths
546 (list (search-path-specification
547 (variable "SOAPY_SDR_PLUGIN_PATH")
548 (files (list (string-append "lib/SoapySDR/modules"
549 (version-major+minor version)))))))
550 (home-page "https://github.com/pothosware/SoapySDR/wiki")
551 (synopsis "Vendor and platform neutral SDR support library")
552 (description
553 "SoapySDR is a library designed to support several kinds of software
554defined radio hardware devices with a common API.")
555 (license license:boost1.0)))
556
557(define-public soapyairspy
558 (package
559 (name "soapyairspy")
560 (version "0.2.0")
561 (source
562 (origin
563 (method git-fetch)
564 (uri (git-reference
565 (url "https://github.com/pothosware/SoapyAirspy")
566 (commit (string-append "soapy-airspy-" version))))
567 (file-name (git-file-name name version))
568 (sha256
569 (base32 "0g23yybnmq0pg2m8m7dbhif8lw0hdsmnnjym93fdyxfk5iln7fsc"))))
570 (build-system cmake-build-system)
571 (inputs
572 (list airspy soapysdr))
573 (arguments
574 (list #:tests? #f)) ; No test suite
575 (home-page "https://github.com/pothosware/SoapyAirspy/wiki")
576 (synopsis "SoapySDR Airspy module")
577 (description "This package provides Airspy devices support to the
578SoapySDR library.")
579 (license license:expat)))
580
581(define-public soapyairspyhf
582 (package
583 (name "soapyairspyhf")
584 (version "0.2.0")
585 (source
586 (origin
587 (method git-fetch)
588 (uri (git-reference
589 (url "https://github.com/pothosware/SoapyAirspyHF")
590 (commit (string-append "soapy-airspyhf-" version))))
591 (file-name (git-file-name name version))
592 (sha256
593 (base32 "04krqinglgkjvx7klqik6yn8rb4mlpwzb6zvnmvm7szqci2agggz"))))
594 (build-system cmake-build-system)
595 (inputs
596 (list airspyhf soapysdr))
597 (arguments
598 `(#:tests? #f)) ; No test suite
599 (home-page "https://github.com/pothosware/SoapyAirspyHF/wiki")
600 (synopsis "SoapySDR Airspy HF+ module")
601 (description "This package provides Airspy HF+ devices support to the
602SoapySDR library.")
603 (license license:expat)))
604
605(define-public soapyaudio
606 ;; Use commit directly because fixes for recent hamlib are not in the latest
607 ;; release (0.1.1).
608 (let ((commit "79129c9bb98deca3294c05108fdc545579af6418")
609 (revision "0"))
610 (package
611 (name "soapyaudio")
612 (version (git-version "0.1.1" revision commit))
613 (source
614 (origin
615 (method git-fetch)
616 (uri (git-reference
617 (url "https://github.com/pothosware/SoapyAudio")
618 (commit commit)))
619 (file-name (git-file-name name version))
620 (sha256
621 (base32 "0mrcnd3k0j599x3k93dkpi5zgr0l7nblz8am9f0s6zs3dikfncvb"))
622 (modules '((guix build utils)))
623 (snippet
624 '(begin
625 ;; Delete bundled rtaudio.
626 (delete-file-recursively "RtAudio")))))
627 (build-system cmake-build-system)
628 (native-inputs
629 (list pkg-config))
630 (inputs
631 (list alsa-lib
632 hamlib
633 jack-1
634 libusb
635 pulseaudio
636 rtaudio
637 soapysdr))
638 (arguments
639 `(#:configure-flags '("-DUSE_HAMLIB=ON")
640 #:tests? #f ; No test suite
641 #:phases
642 (modify-phases %standard-phases
643 (add-after 'unpack 'fix-rtaudio-detection
644 ;; CMake only finds rtaudio if it looks for it before looking
645 ;; for hamlib, not sure why...
646 (lambda _
647 (substitute* "CMakeLists.txt"
648 (("option\\(USE_HAMLIB OFF" all)
649 (string-append "find_package(RtAudio)\n" all))))))))
650 (home-page "https://github.com/pothosware/SoapyAudio/wiki")
651 (synopsis "SoapySDR module for audio devices")
652 (description
653 "This package provides support for sound card devices to the SoapySDR
654library. It also adds hamlib support, which provides basic gain and frequency
655controls for certain tuners which may be paired with an audio device.")
656 (license license:expat))))
657
658(define-public soapybladerf
659 (package
660 (name "soapybladerf")
661 (version "0.4.2")
662 (source
663 (origin
664 (method git-fetch)
665 (uri (git-reference
666 (url "https://github.com/pothosware/SoapyBladeRF")
667 (commit (string-append "soapy-bladerf-" version))))
668 (file-name (git-file-name name version))
669 (sha256
670 (base32 "1jhhqslpn9kpif9znsdxc9zwlz7hhlzk87lpcg9m4xl2x2xy454n"))))
671 (build-system cmake-build-system)
672 (inputs (list bladerf soapysdr))
673 (arguments (list #:tests? #f)) ; No test suite
674 (home-page "https://github.com/pothosware/SoapyBladeRF/wiki")
675 (synopsis "SoapySDR BladeRF module")
676 (description "This package provides BladeRF devices support to the
677SoapySDR library.")
678 (license license:lgpl2.1+)))
679
680(define-public soapyhackrf
681 ;; Some fixes are not yet in a tagged release.
682 (let ((commit "6c0c33f0aa44c3080674e6bca0273184d3e9eb44")
683 (revision "1"))
684 (package
685 (name "soapyhackrf")
686 (version (git-version "0.3.4" revision commit))
687 (source
688 (origin
689 (method git-fetch)
690 (uri (git-reference
691 (url "https://github.com/pothosware/SoapyHackRF")
692 (commit commit)))
693 (file-name (git-file-name name version))
694 (sha256
695 (base32 "1khplrp6iphdclj1wrybxs7pw42rf9112fhfhw7x2fvds8yiswm7"))))
696 (build-system cmake-build-system)
697 (inputs
698 (list hackrf soapysdr))
699 (arguments
700 `(#:tests? #f)) ; No test suite
701 (home-page "https://github.com/pothosware/SoapyHackRF/wiki")
702 (synopsis "SoapySDR HackRF module")
703 (description
704 "This package provides HackRF devices support to the SoapySDR library.")
705 (license license:expat))))
706
707(define-public soapymultisdr
708 (let ((commit "e8bd3298afaec04cb7ce2c8c516cb9cd8bd3bc9d")
709 (revision "1"))
710 (package
711 (name "soapymultisdr")
712 (version (git-version "0.0.0" revision commit))
713 (source
714 (origin
715 (method git-fetch)
716 (uri (git-reference
717 (url "https://github.com/pothosware/SoapyMultiSDR")
718 (commit commit)))
719 (file-name (git-file-name name version))
720 (sha256
721 (base32 "0f7d39s2zpgfi677i2aqp4zkf5c6cv8mpm7w8s7xj45bfhf94acl"))))
722 (build-system cmake-build-system)
723 (inputs
724 (list soapysdr))
725 (home-page "https://github.com/pothosware/SoapyMultiSDR")
726 (synopsis "Multi-device support module for SoapySDR")
727 (description
728 "This is a SoapySDR module to use multiple supported devices under
729a single device wrapper.")
730 (license license:boost1.0))))
731
732(define-public soapyremote
733 (let ((commit "f375555e7380acfd2517acde598e2e553e08df88")
734 (revision "1"))
735 (package
736 (name "soapyremote")
737 (version (git-version "0.5.2" revision commit))
738 (source
739 (origin
740 (method git-fetch)
741 (uri (git-reference
742 (url "https://github.com/pothosware/SoapyRemote")
743 (commit commit)))
744 (file-name (git-file-name name version))
745 (sha256
746 (base32 "0whn87wck7agsk3af4lh7nyyjn0ncs3xdny4vsd94qbjikfl6x5z"))))
747 (build-system cmake-build-system)
748 (inputs
749 (list avahi soapysdr))
750 (arguments
751 '(#:tests? #f)) ; No test suite
752 (home-page "https://github.com/pothosware/SoapyRemote")
753 (synopsis "Remote support for Soapy SDR")
754 (description
755 "This is a SoapySDR module to use a supported device transparently over
756a local network link.")
757 (license license:boost1.0))))
758
759(define-public soapyrtlsdr
760 (package
761 (name "soapyrtlsdr")
762 (version "0.3.3")
763 (source
764 (origin
765 (method git-fetch)
766 (uri (git-reference
767 (url "https://github.com/pothosware/SoapyRTLSDR")
768 (commit (string-append "soapy-rtl-sdr-" version))))
769 (file-name (git-file-name name version))
770 (sha256
771 (base32 "0g1d69lpqw9c8hkir0h61nh40rgyz9p9x04xcfdih7iw26n5vai1"))))
772 (build-system cmake-build-system)
773 (inputs
774 (list rtl-sdr soapysdr))
775 (arguments
776 `(#:tests? #f)) ; No test suite
777 (home-page "https://github.com/pothosware/SoapyRTLSDR/wiki")
778 (synopsis "SoapySDR RTL-SDR module")
779 (description
780 "This package provides RTL-SDR devices support to the SoapySDR library.")
781 (license license:expat)))
782
783(define-public python-simplesoapy
784 (package
785 (name "python-simplesoapy")
786 (version "1.5.1")
787 (source
788 (origin
789 (method url-fetch)
790 (uri (pypi-uri "SimpleSoapy" version))
791 (sha256
792 (base32 "0bh02m5zj82mp7sxpvwr24ylmrbp3p4r9q7psqcfnxl628w3b4hl"))))
793 (build-system pyproject-build-system)
794 (native-inputs
795 (list python-setuptools
796 python-wheel))
797 (propagated-inputs
798 (list python-numpy soapysdr))
799 (arguments
800 (list #:tests? #f)) ; No tests
801 (home-page "https://github.com/xmikos/simplesoapy")
802 (synopsis "Python wrapper for SoapySDR")
803 (description
804 "This package provide a simple pythonic wrapper for the SoapySDR
805library.")
806 (license license:expat)))
807
808(define-public soapy-power
809 (package
810 (name "soapy-power")
811 (version "1.6.1")
812 (source
813 (origin
814 (method url-fetch)
815 (uri (pypi-uri "soapy_power" version))
816 (sha256
817 (base32 "1rajmygcqvv5ph7yk65r4w581lfszrz0f48csvfmma1ami0lirdm"))))
818 (build-system pyproject-build-system)
819 (arguments
820 (list #:tests? #f)) ; no tests in PyPI or Git
821 (native-inputs
822 (list python-setuptools
823 python-wheel))
824 (inputs
825 (list python-numpy
826 python-scipy
827 python-simplesoapy
828 python-simplespectral))
829 (home-page "https://github.com/xmikos/soapy_power")
830 (synopsis "Obtain power spectrum from SDR devices")
831 (description "The @code{soapy_power} obtains the power spectrum from SDR
832devices that are supported by the SoapySDR library.")
833 (license license:expat)))
834
835(define-public python-meshtastic
836 (package
837 (name "python-meshtastic")
838 (version "2.7.8")
839 (source
840 (origin
841 (method git-fetch)
842 (uri (git-reference
843 (url "https://github.com/meshtastic/python")
844 (commit version)
845 (recursive? #t))) ;TODO: package meshtastic/protobufs subproject
846 (file-name (git-file-name name version))
847 (sha256
848 (base32 "0fdxlwdf1ga00wa7vbfvhhd0dpwcxakdlmrjs24zhd6pq5k7jicf"))))
849 (build-system pyproject-build-system)
850 (arguments
851 (list
852 ;; tests: 220 passed, 3 skipped, 77 deselected
853 #:test-flags
854 ;; requires pytap2 input, which is not in Guix
855 #~(list "-k not test_tunnel_tunnel_arg")))
856 (native-inputs
857 (list python-poetry-core
858 python-pytest))
859 ;; unpackaged (optional) inputs: python-print-color, python-dash
860 ;; python-pytap2, python-dash-bootstrap-components
861 (propagated-inputs
862 (list python-argcomplete
863 python-bleak
864 python-dotmap
865 python-packaging
866 python-pandas
867 python-pandas-stubs
868 python-protobuf
869 python-pypubsub
870 python-pyqrcode
871 python-pyserial
872 python-pyyaml
873 python-requests
874 python-tabulate
875 python-wcwidth))
876 (home-page "https://github.com/meshtastic/python")
877 (synopsis "Python library and CLI for talking to Meshtastic devices")
878 (description
879 "@url{https://meshtastic.org/,Meshtastic} Python is a small library which
880provides an easy API for sending and receiving messages over mesh radios. It
881provides access to any of the operations/data available in the device user
882interface or the Android applications. Events are delivered using a
883publish-subscribe model, and you can subscribe to only the message types you
884are interested in.")
885 (license license:gpl3))) ;XXX: both python API and protobufs
886
887(define-public python-pycayennelpp
888 (package
889 (name "python-pycayennelpp")
890 (version "2.4.0")
891 (source
892 (origin
893 (method git-fetch)
894 (uri (git-reference
895 (url "https://github.com/smlng/pycayennelpp")
896 (commit (string-append "v" version))))
897 (file-name (git-file-name name version))
898 (sha256
899 (base32 "0bsi8m8jnj1r7zf3rpfrvr2xsfrg4qksgqjg5qj8i14bxsy33p8p"))))
900 (build-system pyproject-build-system)
901 (native-inputs
902 (list python-pytest
903 python-setuptools))
904 (home-page "https://github.com/smlng/pycayennelpp")
905 (synopsis "CayenneLPP decoder and encoder")
906 (description
907 "PyCayenneLPP offers a concise interface with proper encoding and
908decoding functionality for the Cayenne Low Power Payload format, supporting
909many sensor types.")
910 (license license:expat)))
911
912(define-public python-meshcore
913 (package
914 (name "python-meshcore")
915 (version "2.3.14")
916 (source
917 (origin
918 (method git-fetch)
919 (uri (git-reference
920 (url "https://github.com/meshcore-dev/meshcore_py")
921 (commit (string-append "v" version))))
922 (file-name (git-file-name name version))
923 (sha256
924 (base32 "0dyakb1gp69bwj2c4535infagizw2ah8s72nfk7l2ahm4q9f6kgs"))))
925 (build-system pyproject-build-system)
926 (arguments
927 (list
928 #:test-flags
929 #~(list
930 ;; The following tests fail for a unknown reason
931 "-k" "not test_send_cmd and \
932not test_advert_path_preserves_embedded_zero_bytes")))
933 (propagated-inputs
934 (list python-bleak
935 python-pycayennelpp
936 python-pycryptodome
937 python-pyserial-asyncio-fast))
938 (native-inputs
939 (list python-hatchling
940 python-pytest
941 python-pytest-asyncio))
942 (home-page "https://meshcore.io/")
943 (synopsis "Python bindings for MeshCore")
944 (description
945 "Python library for interacting with MeshCore companion radio nodes.")
946 (license license:expat)))
947
948(define-public meshcore-cli
949 (package
950 (name "meshcore-cli")
951 (version "1.6.4")
952 (source
953 (origin
954 (method git-fetch)
955 (uri (git-reference
956 (url "https://github.com/meshcore-dev/meshcore-cli")
957 (commit (string-append "v" version))))
958 (file-name (git-file-name name version))
959 (sha256
960 (base32 "1ix2jsnx92sirshc9sb6jwicraw6p8686xq46cbzc8hv4j83nsv2"))))
961 (build-system pyproject-build-system)
962 (arguments
963 (list #:tests? #f)) ; No tests
964 (inputs
965 (list python-bleak
966 python-prompt-toolkit
967 python-meshcore
968 python-requests))
969 (native-inputs (list python-hatchling))
970 (home-page "https://meshcore.io/")
971 (synopsis "Command line interface to MeshCore node")
972 (description
973 "This package provides @code{meshcore-cli}, a tool that connects to
974your companion radio node (meshcore client) over BLE, TCP or Serial and lets
975you interact with it from a terminal using a command line interface.")
976 (license license:expat)))
977
978(define-public qspectrumanalyzer
979 (package
980 (name "qspectrumanalyzer")
981 (version "2.1.0")
982 (source
983 (origin
984 (method url-fetch)
985 (uri (pypi-uri "QSpectrumAnalyzer" version))
986 (sha256
987 (base32 "1bhl8zp4z7v3595ailyivx9vb7y5si6kr22aylphb5pf60jxqhn0"))))
988 (build-system pyproject-build-system)
989 (arguments
990 (list
991 #:tests? #f ; No tests
992 #:phases
993 #~(modify-phases %standard-phases
994 (add-after 'wrap 'wrap-path
995 ;; Add the location of the default backend to PATH.
996 (lambda* (#:key inputs #:allow-other-keys)
997 (wrap-program (string-append #$output "/bin/qspectrumanalyzer")
998 `("PATH" ":" prefix
999 (,(dirname (search-input-file inputs
1000 "bin/soapy_power"))))))))))
1001 (native-inputs (list python-setuptools))
1002 (inputs
1003 (list bash-minimal
1004 python-pyqt
1005 python-pyqtgraph
1006 python-qt-py
1007 python-simplespectral
1008 python-simplesoapy
1009 soapy-power))
1010 (home-page "https://github.com/xmikos/qspectrumanalyzer")
1011 (synopsis "Spectrum analyzer for multiple SDR platforms")
1012 (description
1013 "This package provides a spectrum analyzer for multiple SDR platforms.
1014It is a GUI for @code{soapy_power}, @code{hackrf_sweep}, @code{rtl_power},
1015@code{rx_power} and other backends.")
1016 (license license:gpl3)))
1017
1018(define-public aptdec
1019 ;; No release since 2013, use commit directly.
1020 (let ((commit "4d4a0c9787a27d1eba26b9299c23ae9c66e56716")
1021 (revision "3"))
1022 (package
1023 (name "aptdec")
1024 (version (git-version "1.7" revision commit))
1025 (source
1026 (origin
1027 (method git-fetch)
1028 (uri (git-reference
1029 (url "https://github.com/Xerbo/aptdec")
1030 (commit commit)
1031 (recursive? #t)))
1032 (file-name (git-file-name name version))
1033 (sha256
1034 (base32 "09dvvwk4bs9d4bf9z74ixvhzghwzmlbqbx1dn20hbhpm0bgxwk8m"))))
1035 (build-system cmake-build-system)
1036 (inputs
1037 (list libpng libsndfile))
1038 (arguments
1039 `(#:tests? #f)) ; no tests
1040 (home-page "https://github.com/Xerbo/aptdec")
1041 (synopsis "NOAA Automatic Picture Transmission (APT) decoder")
1042 (description "Aptdec decodes Automatic Picture Transmission (APT) images.
1043These are medium resolution images of the Earth transmitted by, among other
1044satellites, the POES NOAA weather satellite series. These transmissions are
1045on a frequency of 137 MHz. They can be received using an inexpensive antenna
1046and a dedicated receiver.")
1047 (license license:gpl2+))))
1048
1049(define-public redsea
1050 (package
1051 (name "redsea")
1052 (version "0.20")
1053 (source (origin
1054 (method git-fetch)
1055 (uri (git-reference
1056 (url "https://github.com/windytan/redsea")
1057 (commit (string-append "v" version))))
1058 (file-name (git-file-name name version))
1059 (sha256
1060 (base32
1061 "1bx4l87vz935cj5hapdh1dkjlmlfg73cgsjaf27314n7p4xkv50v"))))
1062 (build-system gnu-build-system)
1063 (arguments
1064 `(#:phases
1065 (modify-phases %standard-phases
1066 ;; The configure.ac file does not explicitly link against libiconv
1067 ;; except on Mac OS, causing the build to fail. This phase comments
1068 ;; out the original AC_SUBST macro (located inside a conditional) and
1069 ;; adds an explicit use of it underneath, so that libiconv is always
1070 ;; linked against.
1071 (add-after 'unpack 'patch-libiconv
1072 (lambda _
1073 (substitute* "configure.ac"
1074 (("^ +AC_SUBST")
1075 "# AC_SUBST")
1076 (("esac")
1077 "esac\nAC_SUBST([ICONV], [\"-liconv\"])"))
1078 #t)))))
1079 (inputs
1080 (list libiconv libsndfile liquid-dsp))
1081 (native-inputs
1082 (list autoconf automake))
1083 (home-page "https://github.com/windytan/redsea")
1084 (synopsis "Lightweight RDS to JSON decoder")
1085 (description "redsea is a lightweight command-line @dfn{FM Radio Data
1086System} (FM-RDS) decoder. Redsea can be used with any RTL-SDR USB radio stick
1087with the rtl_fm tool, or any other @dfn{software-defined radio} (SDR) via
1088csdr, for example. It can also decode raw ASCII bitstream, the hex format
1089used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
1090 (license license:expat)))
1091
1092(define-public gnuradio
1093 (package
1094 (name "gnuradio")
1095 (version "3.10.12.0")
1096 (source
1097 (origin
1098 (method git-fetch)
1099 (uri (git-reference
1100 (url "https://github.com/gnuradio/gnuradio")
1101 (commit (string-append "v" version))))
1102 (file-name (git-file-name name version))
1103 (sha256
1104 (base32 "0al8rci1fpz8sqkk4i2ncy8lc0hd5d04in9wj7isw7gsmirlzkz3"))))
1105 (build-system cmake-build-system)
1106 (arguments
1107 (list
1108 #:modules `((guix build cmake-build-system)
1109 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
1110 ((guix build pyproject-build-system) #:prefix py:)
1111 (guix build utils)
1112 (ice-9 match))
1113 #:imported-modules (append %cmake-build-system-modules
1114 %glib-or-gtk-build-system-modules
1115 %pyproject-build-system-modules)
1116 #:configure-flags
1117 #~(list "-DENABLE_GRC=ON"
1118 (string-append "-DMATHJAX2_ROOT="
1119 (assoc-ref %build-inputs "js-mathjax")
1120 "/share/javascript/mathjax"))
1121 #:phases
1122 #~(modify-phases %standard-phases
1123 (add-after 'unpack 'make-source-writable
1124 (lambda _
1125 ;; The test_add and test_newmod open(sources, "w") for some reason.
1126 (for-each make-file-writable
1127 (find-files "." ".*"))))
1128 (add-after 'unpack 'fix-paths
1129 (lambda* (#:key inputs #:allow-other-keys)
1130 (let ((qwt (assoc-ref inputs "qwt")))
1131 (substitute* "cmake/Modules/FindQwt.cmake"
1132 (("/usr/include")
1133 (string-append qwt "/include"))
1134 (("/usr/lib")
1135 (string-append qwt "/lib"))
1136 (("qwt6-\\$\\{QWT_QT_VERSION\\}")
1137 "qwt")))
1138 (substitute* "cmake/Modules/GrPython.cmake"
1139 (("dist-packages")
1140 "site-packages"))
1141 (substitute* '("gr-vocoder/include/gnuradio/vocoder/codec2.h"
1142 "gr-vocoder/include/gnuradio/vocoder/freedv_api.h")
1143 (("<codec2/")
1144 "<"))))
1145 (add-before 'check 'set-test-environment
1146 (lambda* (#:key inputs #:allow-other-keys)
1147 (setenv "HOME" "/tmp")
1148 (system "Xvfb :1 &")
1149 (setenv "DISPLAY" ":1")))
1150 (replace 'check
1151 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
1152 (invoke "ctest"
1153 "-j"
1154 (if parallel-tests?
1155 (number->string (parallel-job-count))
1156 "1")
1157 "--output-on-failure"
1158 ;;disable broken tests
1159 "-E"
1160 (string-join
1161 '( ;; https://github.com/gnuradio/gnuradio/issues/3871
1162 "qa_header_payload_demux"
1163 ;; https://github.com/gnuradio/gnuradio/issues/4348
1164 "qa_packet_headerparser_b"
1165 ;; qa_rotator_cc sometimes fails, it looks like
1166 ;; a floating point number precision issue.
1167 "qa_rotator_cc")
1168 "|"))))
1169 (add-after 'install 'wrap-python
1170 (assoc-ref py:%standard-phases 'wrap))
1171 (add-after 'wrap-python 'wrap-glib-or-gtk
1172 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
1173 (add-after 'wrap-glib-or-gtk 'wrap-with-GI_TYPELIB_PATH
1174 (lambda* (#:key inputs #:allow-other-keys)
1175 (wrap-program (string-append #$output "/bin/gnuradio-companion")
1176 `("GI_TYPELIB_PATH" ":" prefix
1177 ,(filter file-exists?
1178 (map (match-lambda
1179 ((output . directory)
1180 (string-append directory
1181 "/lib/girepository-1.0")))
1182 inputs)))))))))
1183 (native-inputs
1184 (list doxygen
1185 ghostscript
1186 js-mathjax
1187 orc
1188 pkg-config
1189 pybind11-2
1190 python-cheetah
1191 python-mako
1192 python-pyzmq
1193 python-scipy
1194 python-sphinx
1195 (texlive-local-tree (list texlive-newunicodechar))
1196 xorg-server-for-tests))
1197 (inputs
1198 (list alsa-lib
1199 bash-minimal
1200 boost-1.83
1201 cairo
1202 codec2
1203 cppzmq
1204 fftwf
1205 gmp
1206 gsl
1207 gsm
1208 gtk+
1209 jack-1
1210 libsndfile
1211 log4cpp
1212 pango
1213 portaudio
1214 python
1215 python-click
1216 python-click-plugins
1217 python-jsonschema
1218 python-lxml
1219 python-matplotlib
1220 python-numpy
1221 python-pycairo
1222 python-pygobject-3.50
1223 python-pyqt-6
1224 python-pyqtgraph
1225 python-pyyaml
1226 qtbase
1227 qwt
1228 sdl
1229 soapysdr
1230 spdlog
1231 volk
1232 zeromq))
1233 (native-search-paths
1234 ;; Variables required to find third-party plugins at runtime.
1235 (list (search-path-specification
1236 (variable "GRC_BLOCKS_PATH")
1237 (files '("share/gnuradio/grc/blocks")))
1238 (search-path-specification
1239 (variable "GUIX_PYTHONPATH")
1240 (files (list (string-append "lib/python"
1241 (version-major+minor
1242 (package-version python))
1243 "/site-packages"))))))
1244 (synopsis "Toolkit for software-defined radios")
1245 (description
1246 "GNU Radio is a development toolkit that provides signal processing blocks
1247to implement software radios. It can be used with external RF hardware to
1248create software-defined radios, or without hardware in a simulation-like
1249environment.")
1250 (home-page "https://www.gnuradio.org")
1251 (license license:gpl3+)))
1252
1253(define-public gr-osmosdr
1254 (package
1255 (name "gr-osmosdr")
1256 (version "0.2.4")
1257 (source
1258 (origin
1259 (method git-fetch)
1260 (uri (git-reference
1261 (url "https://git.osmocom.org/gr-osmosdr")
1262 (commit (string-append "v" version))))
1263 (file-name (git-file-name name version))
1264 (sha256
1265 (base32 "1qpa908bb7iagvaa7h541k1x092mb6dfrmw5ayy4p51qks45nj3p"))))
1266 (build-system cmake-build-system)
1267 (arguments
1268 (list
1269 #:tests? #f
1270 #:modules '((guix build cmake-build-system)
1271 ((guix build pyproject-build-system) #:prefix py:)
1272 (guix build utils))
1273 #:imported-modules (append %cmake-build-system-modules
1274 %pyproject-build-system-modules)
1275 #:phases
1276 #~(modify-phases %standard-phases
1277 (add-after 'unpack 'fix-gnuradio-iqbalance-detection
1278 (lambda* (#:key inputs #:allow-other-keys)
1279 (substitute* "CMakeLists.txt"
1280 (("find_package\\(gnuradio-iqbalance PATHS \\$\\{Gnuradio_DIR\\}\\)")
1281 (format #f "find_package(gnuradio-iqbalance PATHS ~a)"
1282 (search-input-directory inputs
1283 "/lib/cmake/gnuradio"))))))
1284 (add-after 'install 'wrap-python
1285 (assoc-ref py:%standard-phases 'wrap)))))
1286 (native-inputs
1287 (list doxygen pkg-config pybind11-2 python-mako python-six))
1288 (inputs
1289 (list airspy
1290 airspyhf
1291 bladerf
1292 boost-1.83
1293 fftwf
1294 gmp
1295 gnuradio
1296 gr-iqbal
1297 hackrf
1298 libsndfile
1299 log4cpp
1300 python
1301 python-numpy
1302 python-pyqt
1303 rtl-sdr
1304 soapysdr
1305 spdlog
1306 volk))
1307 (synopsis "GNU Radio block for interfacing with various radio hardware")
1308 (description "This is a block for GNU Radio allowing to use a common API
1309to access different radio hardware.")
1310 (home-page "https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR")
1311 (license license:gpl3+)))
1312
1313(define-public libosmo-dsp
1314 (package
1315 (name "libosmo-dsp")
1316 (version "0.4.0")
1317 (source
1318 (origin
1319 (method git-fetch)
1320 (uri (git-reference
1321 (url "https://git.osmocom.org/libosmo-dsp")
1322 (commit version)))
1323 (file-name (git-file-name name version))
1324 (sha256
1325 (base32 "00plihnpym1gkfpflah8il9463qxzm9kx2f07jyvbkszpj8viq5g"))))
1326 (build-system gnu-build-system)
1327 (native-inputs
1328 `(("autoconf" ,autoconf)
1329 ("automake" ,automake)
1330 ("bash-minimal" ,bash-minimal)
1331 ("doxygen" ,doxygen)
1332 ("libtool" ,libtool)
1333 ("pkg-config" ,pkg-config)
1334 ("texlive" ,(texlive-local-tree (list texlive-newunicodechar)))))
1335 (inputs
1336 (list fftwf))
1337 (arguments
1338 `(#:phases
1339 (modify-phases %standard-phases
1340 (add-after 'unpack 'fix-paths
1341 (lambda* (#:key inputs #:allow-other-keys)
1342 (substitute* "git-version-gen"
1343 (("/bin/sh")
1344 (search-input-file inputs "/bin/bash"))))))))
1345 (synopsis "DSP primitives for SDR")
1346 (description
1347 "This a C-language library for common DSP (Digital Signal Processing)
1348primitives for SDR (Software Defined Radio).")
1349 (home-page "https://osmocom.org/projects/libosmo-dsp")
1350 (license license:gpl2+)))
1351
1352(define-public gr-dsd
1353 ;; The bundled DSD has been modified to bypass the soundcard.
1354 (let ((commit "f9b99360b9b15a568befec1b8cc262f7806898e9")
1355 (revision "0"))
1356 (package
1357 (name "gr-dsd")
1358 (version (git-version "1.0.0" revision commit))
1359 (source
1360 (origin
1361 (method git-fetch)
1362 (uri (git-reference
1363 (url "https://github.com/argilo/gr-dsd")
1364 (commit commit)))
1365 (file-name (git-file-name name version))
1366 (sha256
1367 (base32 "1axxb8jdbjbf69csp17gpfis8id66ijjrqp2wbyvz1p66m0svldr"))))
1368 (build-system cmake-build-system)
1369 (native-inputs
1370 (list cppunit
1371 doxygen
1372 pkg-config
1373 pybind11-2
1374 python-numpy))
1375 (inputs
1376 (list boost-1.83
1377 gmp
1378 gnuradio
1379 itpp
1380 libsndfile
1381 log4cpp
1382 spdlog
1383 volk))
1384 (arguments
1385 (list ;; Tests fail with:
1386 ;; from dsd import dsd_block_ff
1387 ;; ModuleNotFoundError: No module named 'dsd'
1388 #:tests? #f
1389 #:phases
1390 #~(modify-phases %standard-phases
1391 (add-after 'unpack 'fix-itpp-detection
1392 (lambda _
1393 (substitute* "dsd/cmake/FindITPP.cmake"
1394 (("libitpp\\.dll")
1395 "itpp_debug")))))))
1396 (synopsis "GNU Radio block for Digital Speech Decoder")
1397 (description
1398 "This package provides a GNU Radio block interfacing with Digital
1399Speech Decoder (DSD) to decode several digital voice protocols, like D-STAR,
1400DMR, NXDN, P25, etc.")
1401 (home-page "https://github.com/argilo/gr-dsd")
1402 (license (list license:bsd-3
1403 license:gpl2
1404 license:gpl3+
1405 license:isc)))))
1406
1407(define-public gr-iqbal
1408 (package
1409 (name "gr-iqbal")
1410 (version "0.38.3")
1411 (source
1412 (origin
1413 (method git-fetch)
1414 (uri (git-reference
1415 (url "https://git.osmocom.org/gr-iqbal")
1416 (commit (string-append "v" version))))
1417 (file-name (git-file-name name version))
1418 (sha256
1419 (base32 "08qnirnwkxida1k4gdjm43jfvk2j32afcl0212kyb1ixw2gwc2wy"))))
1420 (build-system cmake-build-system)
1421 (arguments (list #:tests? #f)) ;no tests
1422 (native-inputs
1423 (list doxygen
1424 pkg-config
1425 pybind11
1426 python
1427 python-numpy))
1428 (inputs
1429 (list boost-1.88
1430 fftwf
1431 gmp
1432 gnuradio
1433 libosmo-dsp
1434 log4cpp
1435 spdlog
1436 volk))
1437 (synopsis "GNU Radio block to correct IQ imbalance")
1438 (description
1439 "This is a GNU Radio block to correct IQ imbalance in quadrature
1440receivers. It's composed of two main block:
1441@itemize
1442@item Fix: Given a phase and amplitude error, it will correct a complex signal.
1443@item Optimize: Attempts to auto-detect the phase and amplitude error to feed
1444to the fix block above.
1445@end itemize")
1446 (home-page "https://git.osmocom.org/gr-iqbal/")
1447 (license license:gpl3+)))
1448
1449(define-public gr-satellites
1450 (package
1451 (name "gr-satellites")
1452 (version "5.9.0")
1453 (source
1454 (origin
1455 (method git-fetch)
1456 (uri (git-reference
1457 (url "https://github.com/daniestevez/gr-satellites")
1458 (commit (string-append "v" version))))
1459 (file-name (git-file-name name version))
1460 (sha256
1461 (base32 "0fjc6fdcfh4j0asn7g1qph3g5lz0mswhv284ckl9d0p9dg91i489"))))
1462 (build-system cmake-build-system)
1463 (arguments
1464 (list
1465 ;; TODO: CMake struggles to find Python module: ModuleNotFoundError: No
1466 ;; module named 'satellites'.
1467 #:tests? #f
1468 #:modules `((guix build cmake-build-system)
1469 ((guix build pyproject-build-system) #:prefix py:)
1470 (guix build utils))
1471 #:imported-modules (append %cmake-build-system-modules
1472 %pyproject-build-system-modules)
1473 #:phases
1474 #~(modify-phases %standard-phases
1475 (add-before 'check 'set-test-environment
1476 (lambda _
1477 (setenv "HOME" "/tmp")))
1478 (add-after 'install 'wrap-python
1479 (assoc-ref py:%standard-phases 'wrap)))))
1480 (native-inputs
1481 (list pkg-config
1482 pybind11))
1483 (inputs
1484 (list boost-1.88
1485 gmp
1486 gnuradio
1487 log4cpp
1488 python
1489 python-construct
1490 python-numpy
1491 python-pyaml
1492 python-pyzmq
1493 python-requests
1494 spdlog
1495 volk))
1496 (synopsis "GNU Radio decoders for several Amateur satellites")
1497 (description
1498 "@code{gr-satellites} is a GNU Radio out-of-tree module encompassing
1499a collection of telemetry decoders that supports many different Amateur
1500satellites.")
1501 (home-page "https://github.com/daniestevez/gr-satellites")
1502 (license (list license:asl2.0
1503 license:gpl3+
1504 license:lgpl2.1))))
1505
1506(define-public gqrx
1507 (package
1508 (name "gqrx")
1509 (version "2.17.7")
1510 (source
1511 (origin
1512 (method git-fetch)
1513 (uri (git-reference
1514 (url "https://github.com/gqrx-sdr/gqrx")
1515 (commit (string-append "v" version))))
1516 (file-name (git-file-name name version))
1517 (sha256
1518 (base32 "0vsg39b8m1rq7l4krwnkayiqljn3dgfya124gch48dk7kb38iwms"))))
1519 (build-system qt-build-system)
1520 (native-inputs
1521 (list pkg-config))
1522 (inputs
1523 (list alsa-lib
1524 boost-1.88
1525 fftwf
1526 gmp
1527 gnuradio
1528 gr-iqbal
1529 gr-osmosdr
1530 jack-2
1531 libsndfile
1532 log4cpp
1533 portaudio
1534 pulseaudio
1535 qtbase
1536 qtsvg
1537 qtwayland
1538 spdlog
1539 volk))
1540 (arguments
1541 `(#:tests? #f)) ; no tests
1542 (synopsis "Software defined radio receiver")
1543 (description "Gqrx is a software defined radio (SDR) receiver implemented
1544using GNU Radio and the Qt GUI toolkit.")
1545 (home-page "https://gqrx.dk/")
1546 (license license:gpl3+)))
1547
1548(define-public gqrx-scanner
1549 (package
1550 (name "gqrx-scanner")
1551 (version "1.0.5")
1552 (source
1553 (origin
1554 (method git-fetch)
1555 (uri (git-reference
1556 (url "https://github.com/neural75/gqrx-scanner")
1557 (commit (string-append "v" version))))
1558 (file-name (git-file-name name version))
1559 (sha256
1560 (base32 "0swciyqx5fnqmbb6d55cnjrc2bysr9vamyp0lzsvwgh2g2r29i7w"))))
1561 (build-system cmake-build-system)
1562 (arguments
1563 '(#:tests? #f)) ; No test suite
1564 (synopsis "Frequency scanner for Gqrx")
1565 (description
1566 "This package provides a frequency scanner for the Gqrx software-defined
1567radio receiver.")
1568 (home-page "https://github.com/neural75/gqrx-scanner")
1569 (license license:expat)))
1570
1571(define-public fldigi
1572 (package
1573 (name "fldigi")
1574 (version "4.2.11")
1575 (source
1576 (origin
1577 (method git-fetch)
1578 (uri (git-reference
1579 (url "https://git.code.sf.net/p/fldigi/fldigi")
1580 (commit (string-append "v" version))))
1581 (file-name (git-file-name name version))
1582 (sha256
1583 (base32 "1zf8sxf3bfbdcsj2a566bjgkdyb5q59nxc71yxv16c178livm1w8"))))
1584 (build-system gnu-build-system)
1585 (native-inputs
1586 (list autoconf-2.71 automake gettext-minimal pkg-config))
1587 (inputs
1588 (list alsa-lib
1589 fltk
1590 eudev
1591 hamlib
1592 libpng
1593 libsamplerate
1594 libusb
1595 libx11
1596 libxext
1597 libxfixes
1598 libxft
1599 portaudio
1600 pulseaudio))
1601 (synopsis "Software modem for amateur radio use")
1602 (description
1603 "Fldigi is a software modem for amateur radio use. It is a sound card
1604based program that is used for both transmitting and receiving data by
1605connecting the microphone and headphone connections of a computer to some radio
1606hardware.")
1607 (home-page "http://www.w1hkj.com/")
1608 (license license:gpl3+)))
1609
1610(define-public flrig
1611 (package
1612 (name "flrig")
1613 (version "2.0.04")
1614 (source
1615 (origin
1616 (method git-fetch)
1617 (uri (git-reference
1618 (url "https://git.code.sf.net/p/fldigi/flrig")
1619 (commit (string-append "v" version))))
1620 (file-name (git-file-name name version))
1621 (sha256
1622 (base32 "0q8zwg5l9x62qls71sqqw31c79y9df7cmin91w1v5pbigxac4v9v"))))
1623 (build-system gnu-build-system)
1624 (native-inputs
1625 (list autoconf automake pkg-config))
1626 (inputs
1627 (list eudev fltk libx11 libxext libxfixes libxft))
1628 (synopsis "Radio transceiver control program")
1629 (description
1630 "Flrig is a transceiver control program for amateur radio use.
1631It provides computer aided control of various radios using a serial
1632or USB connection.")
1633 (home-page "http://www.w1hkj.com/")
1634 (license license:gpl3+)))
1635
1636(define-public flamp
1637 (package
1638 (name "flamp")
1639 (version "2.2.12")
1640 (source
1641 (origin
1642 (method git-fetch)
1643 (uri (git-reference
1644 (url "https://git.code.sf.net/p/fldigi/flamp")
1645 (commit (string-append "v" version))))
1646 (file-name (git-file-name name version))
1647 (sha256
1648 (base32 "0739x3b8a2f74s91mzpb43r5h71h81v0i12qjz0h0gg07ndzj3j7"))))
1649 (build-system gnu-build-system)
1650 (native-inputs
1651 (list autoconf automake pkg-config))
1652 (inputs
1653 (list fltk libx11 libxext libxfixes libxft))
1654 (synopsis "Tool for AMP file transfer")
1655 (description
1656 "FLAMP is a program for transferring files by radio waves using AMP
1657(Amateur Multicast Protocol).")
1658 (home-page "http://www.w1hkj.com/")
1659 (license license:gpl3+)))
1660
1661(define-public flmsg
1662 (package
1663 (name "flmsg")
1664 (version "4.0.23")
1665 (source
1666 (origin
1667 (method git-fetch)
1668 (uri (git-reference
1669 (url "https://git.code.sf.net/p/fldigi/flmsg")
1670 (commit (string-append "v" version))))
1671 (file-name (git-file-name name version))
1672 (sha256
1673 (base32 "0nn2ai97a2izckg6lcnxa36ipmrz0pa4d8gdvk47fhwxlcr7pdrl"))))
1674 (build-system gnu-build-system)
1675 (native-inputs
1676 (list autoconf-2.71 automake pkg-config))
1677 (inputs
1678 (list fltk libx11 libxext libxfixes libxft))
1679 (synopsis "NBEMS messaging system")
1680 (description
1681 "FLMSG is a Narrow Band Emergency Messaging Software (NBEMS).
1682It can be used to manage, send and receive the forms that are used as basis
1683for emergency communications data transfers (like ICS213 forms).")
1684 (home-page "http://www.w1hkj.com/")
1685 (license license:gpl3+)))
1686
1687(define-public flwrap
1688 (package
1689 (name "flwrap")
1690 (version "1.3.6")
1691 (source
1692 (origin
1693 (method git-fetch)
1694 (uri (git-reference
1695 (url "https://git.code.sf.net/p/fldigi/flwrap")
1696 (commit (string-append "v" version))))
1697 (file-name (git-file-name name version))
1698 (sha256
1699 (base32 "0kd8jpgqyff3ck103i2nfvlxv2vqwn9ks02s8yddk7scww8raziy"))))
1700 (build-system gnu-build-system)
1701 (native-inputs
1702 (list autoconf automake pkg-config))
1703 (inputs
1704 (list fltk-1.3 libx11 libxext libxfixes libxft))
1705 (synopsis "File encapsulation program")
1706 (description
1707 "Flwrap is a software utility for amateur radio use. Its purpose is to
1708encapsulate both text and binary files in a way that allows them to be
1709transmitted over any of several digital modes and verified at the receipt end
1710for correctness.")
1711 (home-page "http://www.w1hkj.com/")
1712 (license license:gpl3+)))
1713
1714(define-public hackrf
1715 (package
1716 (name "hackrf")
1717 (version "2024.02.1")
1718 (source
1719 (origin
1720 (method git-fetch)
1721 (uri (git-reference
1722 (url "https://github.com/greatscottgadgets/hackrf")
1723 (commit (string-append "v" version))))
1724 (file-name (git-file-name name version))
1725 (sha256
1726 (base32 "07dzp2lnwwpv2pf518fr3l52k0386jvhz4i00pc95scg9npccybg"))))
1727 (build-system cmake-build-system)
1728 (arguments
1729 (list #:configure-flags
1730 #~(list "-DUDEV_RULES_GROUP=dialout"
1731 (string-append "-DUDEV_RULES_PATH="
1732 #$output
1733 "/lib/udev/rules.d"))
1734 #:phases
1735 #~(modify-phases %standard-phases
1736 (add-before 'configure 'enter-source-directory
1737 (lambda _
1738 (chdir "host")))
1739 (add-after 'install 'delete-static-library
1740 (lambda _
1741 (delete-file (string-append #$output "/lib/libhackrf.a"))))
1742 (add-before 'install-license-files 'leave-source-directory
1743 (lambda _
1744 (chdir ".."))))
1745 #:tests? #f)) ; no test suite
1746 (native-inputs
1747 (list pkg-config))
1748 (inputs
1749 (list fftw fftwf libusb))
1750 (home-page "https://greatscottgadgets.com/hackrf/")
1751 (synopsis "User-space library and utilities for HackRF SDR")
1752 (description
1753 "Command line utilities and a C library for controlling the HackRF
1754Software Defined Radio (SDR) over USB. Installing this package installs the
1755userspace hackrf utilities and C library. To install the hackrf udev rules,
1756you must extend 'udev-service-type' with this package. E.g.:
1757@code{(udev-rules-service 'hackrf hackrf #:groups '(\"dialout\"))}.")
1758 (license license:gpl2)))
1759
1760(define-public bladerf
1761 (package
1762 (name "bladerf")
1763 (version "2025.10")
1764 (source
1765 (origin
1766 (method git-fetch)
1767 (uri (git-reference
1768 (url "https://github.com/Nuand/bladeRF")
1769 (commit version)
1770 (recursive? #t)))
1771 (file-name (git-file-name name version))
1772 (sha256
1773 (base32 "1vi4m03jdpb0lqnl49f5sihwpphsz7amhi72wdn6c22416f8x7w2"))))
1774 (build-system cmake-build-system)
1775 (native-inputs (list doxygen graphviz-minimal help2man pkg-config))
1776 (inputs (list curl libedit libusb ncurses))
1777 (arguments
1778 (list #:configure-flags #~(list "-DTAGGED_RELEASE=ON"
1779 (string-append "-DUDEV_RULES_PATH="
1780 #$output
1781 "/lib/udev/rules.d")
1782 "-DBLADERF_GROUP=dialout"
1783 "-DBUILD_DOCUMENTATION=ON")
1784 #:tests? #f)) ; Tests require device
1785 (home-page "https://www.nuand.com/")
1786 (synopsis "User-space library and utilities for BladeRF SDR")
1787 (description
1788 "This package contains a library and command line utilities for
1789controlling the BladeRF Software Defined Radio (SDR) over USB. To install the
1790bladerf udev rules, you must extend 'udev-service-type' with this package.
1791E.g.: @code{(udev-rules-service 'bladerf bladerf)}.")
1792 (license (list license:bsd-3
1793 license:expat
1794 license:gpl2+
1795 license:lgpl2.1+))))
1796
1797(define-public hamlib
1798 (package
1799 (name "hamlib")
1800 (version "4.6.2")
1801 (source
1802 (origin
1803 (method git-fetch)
1804 (uri (git-reference
1805 (url "https://github.com/Hamlib/Hamlib")
1806 (commit version)))
1807 (file-name (git-file-name name version))
1808 (sha256
1809 (base32 "1vq5ppn5hipklpp49wvq252br4s35mjc2z9dr23yhrx4qxby6gnr"))))
1810 (build-system gnu-build-system)
1811 (native-inputs
1812 (list autoconf
1813 automake
1814 doxygen
1815 libtool
1816 pkg-config
1817 python-wrapper
1818 swig-4.0))
1819 (inputs
1820 (list gd
1821 libusb
1822 libxml2
1823 lua
1824 python
1825 readline
1826 tcl))
1827 (arguments
1828 `(#:configure-flags
1829 '("--disable-static"
1830 "--with-lua-binding"
1831 "--with-python-binding"
1832 "--with-tcl-binding"
1833 "--with-xml-support")))
1834 (synopsis "Tools and API to control radios")
1835 (description
1836 "The Ham Radio Control Library (Hamlib) is a project to provide programs
1837with a consistent Application Programming Interface (API) for controlling the
1838myriad of radios and rotators available to amateur radio and communications
1839users.")
1840 (home-page "https://hamlib.github.io/")
1841 (license (list license:gpl2+ license:lgpl2.1+))))
1842
1843(define-public jtdx-hamlib
1844 ;; Fork of hamlib with custom patches used by jtdx.
1845 (package
1846 (inherit hamlib)
1847 (name "jtdx-hamlib")
1848 (version "2.2.158")
1849 (source
1850 (origin
1851 (method git-fetch)
1852 (uri (git-reference
1853 (url "https://github.com/jtdx-project/jtdxhamlib.git")
1854 (commit "158")))
1855 (file-name (git-file-name name version))
1856 (sha256
1857 (base32 "0m9i5k1n6j0nvmsqcy12x2ngqzjvxxlc3jg29igh93hb7lprlkjv"))))
1858 (native-inputs
1859 (modify-inputs native-inputs
1860 (prepend autoconf automake libtool texinfo)))
1861 (arguments
1862 `(#:configure-flags '("--disable-shared"
1863 "--enable-static"
1864 "--without-cxx-binding"
1865 "--disable-winradio")))))
1866
1867(define-public tlf
1868 (package
1869 (name "tlf")
1870 (version "1.4.1")
1871 (source
1872 (origin
1873 (method git-fetch)
1874 (uri (git-reference
1875 (url "https://github.com/tlf/tlf")
1876 (commit (string-append "tlf-" version))))
1877 (file-name (git-file-name name version))
1878 (sha256
1879 (base32 "1xpgs4k27pjd9mianfknknp6mf34365bcp96wrv5xh4dhph573rj"))
1880 (patches
1881 (search-patches "tlf-support-hamlib-4.2+.patch"))))
1882 (build-system gnu-build-system)
1883 (arguments
1884 '(#:configure-flags
1885 (list "--enable-fldigi-xmlrpc")))
1886 (native-inputs
1887 (list autoconf automake gcc-13 perl pkg-config))
1888 (inputs
1889 (list cmocka
1890 glib
1891 hamlib
1892 libusb ;`Requires.private: libusb-1.0` in hamlib pkg-config
1893 ncurses
1894 xmlrpc-c))
1895 (home-page "https://tlf.github.io/")
1896 (synopsis "Amateur radio contest logging for the terminal")
1897 (description "TLF is a @acronym{Text User Interface, TUI} amateur radio
1898contest logging program. It integrates with radios supported by hamlib and
1899other ham radio programs like fldigi. Many contests are supported including:
1900
1901@itemize
1902@item CQWW (SO, M/S and M/M)
1903@item WPX (SO, M/S and M/M)
1904@item ARRL Sweepstakes (SO, M/S )
1905@item EU SPRINT
1906@item EUHFC
1907@item ARRL-DX (both sides)
1908@item ARRL-FD
1909@item ARRL 10m
1910@item ARRL 160m
1911@item Region1 field day
1912@item SP DX contest
1913@item PACC (both sides)
1914@item NRAU - scandinavian
1915@item Wysiwyg mults mode (per band or per contest)
1916@item WAEDX
1917@end itemize
1918
1919It also supports connecting to DX clusters, log synchronization with other TLF
1920instances over the network, and general QSO and DXpedition logging.")
1921 (license license:gpl2+)))
1922
1923(define-public wsjtx
1924 (package
1925 (name "wsjtx")
1926 (version "2.7.0")
1927 (source
1928 (origin
1929 (method git-fetch)
1930 (uri (git-reference
1931 (url "https://git.code.sf.net/p/wsjt/wsjtx.git")
1932 (commit (string-append "wsjtx-" version))))
1933 (file-name (git-file-name name version))
1934 (sha256
1935 (base32 "1d000ndqxh7chkzaig848xp3any0mr6swzf0vdzprkr1jm6dj0q0"))))
1936 (build-system qt-build-system)
1937 (arguments
1938 (list #:tests? #f ; No test suite
1939 #:configure-flags
1940 (if (this-package-native-input "ruby-asciidoctor")
1941 #~'()
1942 #~(list "-DWSJT_GENERATE_DOCS=OFF"))))
1943 (native-inputs
1944 (append (list asciidoc
1945 gfortran
1946 pkg-config
1947 qttools-5)
1948 (if (supported-package? ruby-asciidoctor/minimal)
1949 (list ruby-asciidoctor/minimal)
1950 '())))
1951 (inputs
1952 (list boost
1953 fftw
1954 fftwf
1955 hamlib
1956 libusb
1957 qtbase-5
1958 qtmultimedia-5
1959 qtserialport-5
1960 qtwayland-5))
1961 (home-page "https://wsjt.sourceforge.io/wsjtx.html")
1962 (synopsis "Weak-signal ham radio communication program")
1963 (description
1964 "WSJT-X implements communication protocols or modes called FT4, FT8,
1965JT4, JT9, JT65, QRA64, ISCAT, MSK144, and WSPR, as well as one called Echo for
1966detecting and measuring your own radio signals reflected from the Moon. These
1967modes were all designed for making reliable, confirmed QSOs under extreme
1968weak-signal conditions.")
1969 (license license:gpl3)))
1970
1971(define-public js8call
1972 (package
1973 (name "js8call")
1974 (version "2.2.0")
1975 (source
1976 (origin
1977 (method url-fetch)
1978 (uri (string-append "http://files.js8call.com/" version
1979 "/js8call-" version ".tgz"))
1980 (sha256
1981 (base32 "149sjwc4zg6ckgq26af93p4fxappa4k9dh7rdy67g8ajfjad4cd8"))
1982 (modules '((guix build utils)))
1983 (snippet
1984 #~(begin
1985 ;; Delete bundled boost to use the shared one.
1986 (delete-file-recursively "boost")))))
1987 (build-system qt-build-system)
1988 (arguments
1989 (list
1990 #:phases
1991 #~(modify-phases %standard-phases
1992 (add-after 'unpack 'fix-paths
1993 (lambda _
1994 ;; XXX: How to get the /tmp/<build-name>.drv-<num> path? Use
1995 ;; output path for after install check phase instead.
1996 (substitute* "media/tests/test"
1997 (("~/js8call-prefix/build/js8")
1998 (string-append #$output "/bin/js8"))
1999 (("/opt/js8call/bin/js8")
2000 (string-append #$output "/bin/js8")))
2001 (substitute* "CMakeLists.txt"
2002 (("DESTINATION /usr/share")
2003 (string-append "DESTINATION " #$output "/share")))))
2004 (add-after 'unpack 'fix-hamlib
2005 (lambda _
2006 (substitute* "CMake/Modules/Findhamlib.cmake"
2007 (("set \\(ENV\\{PKG_CONFIG_PATH\\}.*\\)")
2008 "set (__pc_path $ENV{PKG_CONFIG_PATH})
2009 list (APPEND __pc_path \"${__hamlib_pc_path}\")
2010 set (ENV{PKG_CONFIG_PATH} \"${__pc_path}\")"))))
2011 (delete 'check)
2012 (add-after 'install 'check
2013 (lambda* (#:key tests? #:allow-other-keys)
2014 (when tests?
2015 (with-directory-excursion "../js8call/media/tests"
2016 (invoke "./test"))))))))
2017 (native-inputs
2018 (list asciidoc
2019 gfortran
2020 pkg-config
2021 qttools-5))
2022 (inputs
2023 (list boost
2024 fftw
2025 fftwf
2026 hamlib
2027 libusb
2028 qtbase-5
2029 qtmultimedia-5
2030 qtserialport-5
2031 qtwayland-5))
2032 (home-page "http://js8call.com/")
2033 (synopsis "Weak-signal ham radio communication program")
2034 (description
2035 "JS8Call is a software using the JS8 digital mode (a derivative of the FT8
2036mode) providing weak signal keyboard to keyboard messaging to amateur radio
2037operators.")
2038 (license license:gpl3)))
2039
2040(define-public limesuite-ng
2041 (package
2042 (name "limesuite-ng")
2043 (version "25.1.0")
2044 (source
2045 (origin
2046 (method git-fetch)
2047 (uri (git-reference
2048 (url "https://github.com/myriadrf/LimeSuiteNG.git")
2049 (commit (string-append "v" version))))
2050 (file-name (git-file-name name version))
2051 (sha256
2052 (base32 "1riawgl7x89n6384y1j6brak3yzslap1vsnr5i33rwqf7hbrl4kh"))))
2053 (build-system cmake-build-system)
2054 (arguments
2055 (list
2056 #:configure-flags
2057 #~(list
2058 ;; Do not build pcie drivers, as they require
2059 ;; kernel specific headers.
2060 "-DBUILD_DRIVERS_LIMEPCIE=false"
2061 ;; Specify the udev rules installation path into
2062 ;; the output profile.
2063 (string-append "-DUDEV_RULES_INSTALL_PATH="
2064 #$output "/lib/udev/rules.d")
2065 ;; Do not reload udev rules after build.
2066 "-DUDEV_RULES_RELOAD_ON_INSTALL=false")
2067 #:phases
2068 #~(modify-phases %standard-phases
2069 ;; The test binary requires different build options, so we
2070 ;; re-issue a cmake configure + build before running the tests.
2071 (replace 'check
2072 (lambda* (#:key tests? #:allow-other-keys)
2073 (when tests?
2074 (with-directory-excursion "../source"
2075 (substitute* "tests/CMakeLists.txt"
2076 ;; Provide google test locally instead of remote fetch.
2077 (("fetchcontent_makeavailable\\(googletest\\)")
2078 "find_package(GTest REQUIRED)"))
2079 ;; Configure the test build.
2080 (invoke "cmake"
2081 "-B"
2082 "../tests"
2083 "-DCMAKE_BUILD_TYPE=Debug"
2084 "-DBUILD_SHARED_LIBS=OFF"
2085 "-DENABLE_UNIT_TESTS=on"
2086 "-DBUILD_GUI=off"))
2087 ;; Build and run the test binary.
2088 (with-directory-excursion "../tests"
2089 (invoke "cmake"
2090 "--build"
2091 "tests"
2092 "--parallel"
2093 (number->string (parallel-job-count))
2094 "--config"
2095 "Debug"
2096 "--target"
2097 "gtest-runner")
2098 (invoke "./bin/gtest-runner"))))))))
2099 (native-inputs (list pkg-config))
2100 (inputs (list boost
2101 fftw
2102 glew
2103 gmp
2104 gnuplot
2105 gnuradio
2106 googletest
2107 libusb
2108 mesa
2109 pybind11-2
2110 python
2111 python-numpy
2112 soapysdr
2113 wxwidgets
2114 ;; GnuRadio-specific dependencies we need for the plugin,
2115 ;; if one is not present, then it will silently omit the
2116 ;; GnuRadio plugin from the build. Necessary dependencies
2117 ;; can be found in the path `cmake/Modules/GnuradioConfig.cmake`
2118 ;; in the GnuRadio source code checkout and by grepping for
2119 ;; "Gnuradio_NOT_FOUND_MESSAGE" in CMake build logs.
2120 spdlog
2121 volk))
2122 (home-page "https://github.com/myriadrf/LimeSuiteNG")
2123 (synopsis "C++ library and tools for LimeSDR devices (LMS7002M)")
2124 (description
2125 "Lime Suite NG is a collection of software supporting several hardware
2126 platforms based on the LMS7002M transceiver under the LimeSDR name.
2127 It provides a C++ API, command-line tools, a GUI, and plugins for
2128 multiple SDR tools.")
2129 (license license:expat)))
2130
2131(define-public xnec2c
2132 (package
2133 (name "xnec2c")
2134 (version "4.4.16")
2135 (source
2136 (origin
2137 (method url-fetch)
2138 (uri (string-append "https://www.xnec2c.org/releases/xnec2c-v"
2139 version ".tar.gz"))
2140 (sha256
2141 (base32 "0sdfmaaipcz23807xiaxjkxw0m0px4plgr73lp37hz76jzr649jy"))))
2142 (build-system gnu-build-system)
2143 (native-inputs
2144 (list autoconf
2145 automake
2146 gettext-minimal
2147 `(,glib "bin")
2148 libtool
2149 pkg-config))
2150 (inputs
2151 (list gtk+ openblas))
2152 (arguments
2153 `(#:configure-flags
2154 ,#~(list (string-append "--with-openblas-incdir="
2155 #$(this-package-input "openblas")
2156 "/include"))
2157 #:phases
2158 (modify-phases %standard-phases
2159 (add-after 'unpack 'fix-paths
2160 (lambda* (#:key inputs #:allow-other-keys)
2161 (substitute* "src/Makefile.am"
2162 (("\\$\\(GLIB_COMPILE_RESOURCES\\)")
2163 (search-input-file inputs "bin/glib-compile-resources")))
2164 (substitute* "src/mathlib.c"
2165 (("libopenblas\\.so")
2166 (search-input-file inputs "lib/libopenblas.so"))))))))
2167 (synopsis "Antenna modeling software")
2168 (description
2169 "Xnec2c is a GTK3-based graphical version of nec2c, a translation to the
2170C language of NEC2, the FORTRAN Numerical Electromagnetics Code commonly used
2171for antenna simulation and analysis. It can be used to define the geometry of
2172an antenna, and then plot the radiation pattern or frequency-related data like
2173gain and standing wave ratio.")
2174 (home-page "https://www.xnec2c.org/")
2175 (license license:gpl3+)))
2176
2177(define-public dump1090
2178 (package
2179 (name "dump1090")
2180 (version "10.2")
2181 (source
2182 (origin
2183 (method git-fetch)
2184 (uri (git-reference
2185 (url "https://github.com/flightaware/dump1090")
2186 (commit (string-append "v" version))))
2187 (file-name (git-file-name name version))
2188 (sha256
2189 (base32 "0dc1f18n1xlamdhxg96db6cm6kp04cqzxb36qmd141d0rca7qcli"))
2190 (modules '((guix build utils)))
2191 (snippet
2192 '(begin
2193 ;; Remove FPGA firmware binary.
2194 (delete-file-recursively "bladerf")))))
2195 (build-system gnu-build-system)
2196 (native-inputs
2197 (list pkg-config))
2198 (inputs
2199 (list bladerf hackrf libusb ncurses rtl-sdr soapysdr))
2200 (arguments
2201 (list
2202 #:test-target "test"
2203 #:make-flags
2204 #~(list (string-append "CC=" #$(cc-for-target)))
2205 #:phases
2206 #~(modify-phases %standard-phases
2207 (delete 'configure)
2208 (replace 'install
2209 (lambda _
2210 (let ((bin (string-append #$output "/bin/")))
2211 (install-file "dump1090" bin)
2212 (install-file "view1090" bin)))))))
2213 (synopsis "Mode S decoder for rtl-sdr devices")
2214 (description
2215 "Dump1090 is a Mode S decoder specifically designed for rtl-sdr devices.
2216It can be used to decode the ADS-B signals that planes emit to indicate
2217their position, altitude, speed, etc.")
2218 (home-page "https://github.com/flightaware/dump1090")
2219 (license license:gpl2+)))
2220
2221(define-public libacars
2222 (package
2223 (name "libacars")
2224 (version "2.2.0")
2225 (source
2226 (origin
2227 (method git-fetch)
2228 (uri (git-reference
2229 (url "https://github.com/szpajder/libacars")
2230 (commit (string-append "v" version))))
2231 (file-name (git-file-name name version))
2232 (sha256
2233 (base32 "08cadcqzhl3i7hpd8jwph33kx52vdwbrj1rlagwrkwb2mfw6szfs"))))
2234 (build-system cmake-build-system)
2235 (inputs (list jansson libxml2 zlib))
2236 (arguments (list #:tests? #f)) ; No test suite
2237 (synopsis "Decoder for ACARS messages")
2238 (description "This package provides a library for decoding the contents of
2239ACARS messages used by planes.")
2240 (home-page "https://github.com/szpajder/libacars")
2241 (license (list license:bsd-2
2242 license:expat))))
2243
2244(define-public dumpvdl2
2245 (package
2246 (name "dumpvdl2")
2247 (version "2.3.0")
2248 (source
2249 (origin
2250 (method git-fetch)
2251 (uri (git-reference
2252 (url "https://github.com/szpajder/dumpvdl2")
2253 (commit (string-append "v" version))))
2254 (file-name (git-file-name name version))
2255 (sha256
2256 (base32 "1zxv24fg2ciy7bfiqhx95v0h8b1bnbs3ax06n9ywsssbf4ndas4n"))))
2257 (build-system cmake-build-system)
2258 (native-inputs (list pkg-config))
2259 (inputs
2260 (list glib
2261 libacars
2262 protobuf-c
2263 rtl-sdr
2264 soapysdr
2265 sqlite
2266 zeromq))
2267 (arguments (list #:tests? #f)) ; No test suite
2268 (synopsis "VDL Mode 2 message decoder")
2269 (description "This package provides a decoder for VDL Mode 2 messages used
2270by planes.")
2271 (home-page "https://github.com/szpajder/dumpvdl2")
2272 (license license:gpl3+)))
2273
2274(define-public rtl-433
2275 (package
2276 (name "rtl-433")
2277 (version "23.11")
2278 (source
2279 (origin
2280 (method git-fetch)
2281 (uri (git-reference
2282 (url "https://github.com/merbanan/rtl_433")
2283 (commit version)))
2284 (file-name (git-file-name name version))
2285 (sha256
2286 (base32 "11qigwnaa22vgd43jvzk2byiancahdkhxpsh6cp74q2ywb0wy9x8"))))
2287 (build-system cmake-build-system)
2288 (native-inputs
2289 (list pkg-config))
2290 (inputs
2291 (list libusb openssl rtl-sdr soapysdr))
2292 (synopsis "Decoder for radio transmissions in ISM bands")
2293 (description
2294 "This is a generic data receiver, mainly for decoding radio transmissions
2295from devices on the 433 MHz, 868 MHz, 315 MHz, 345 MHz and 915 MHz ISM bands.")
2296 (home-page "https://github.com/merbanan/rtl_433")
2297 (license license:gpl2+)))
2298
2299(define-public multimon-ng
2300 (package
2301 (name "multimon-ng")
2302 (version "1.3.1")
2303 (source
2304 (origin
2305 (method git-fetch)
2306 (uri (git-reference
2307 (url "https://github.com/EliasOenal/multimon-ng")
2308 (commit version)))
2309 (file-name (git-file-name name version))
2310 (sha256
2311 (base32 "00v8ix51gn30mc6bhm7fi37cyksaf8vs27xsi1435kpix9askcla"))))
2312 (build-system cmake-build-system)
2313 (inputs
2314 (list libx11 pulseaudio))
2315 (arguments
2316 '(#:tests? #f)) ; no test suite
2317 (home-page "https://github.com/EliasOenal/multimon-ng")
2318 (synopsis "Decoder for digital radio transmission modes")
2319 (description "Multimon-ng can decode several digital radio transmission
2320modes:
2321@itemize
2322@item POCSAG512, POCSAG1200, POCSAG2400
2323@item FLEX
2324@item EAS
2325@item UFSK1200, CLIPFSK, AFSK1200, AFSK2400, AFSK2400_2, AFSK2400_3
2326@item HAPN4800
2327@item FSK9600
2328@item DTMF
2329@item ZVEI1, ZVEI2, ZVEI3, DZVEI, PZVEI
2330@item EEA, EIA, CCIR
2331@item MORSE CW
2332@item X10
2333@end itemize")
2334 (license license:gpl2+)))
2335
2336(define-public nanovna-saver
2337 (package
2338 (name "nanovna-saver")
2339 (version "0.6.4")
2340 (source
2341 (origin
2342 (method git-fetch)
2343 (uri (git-reference
2344 (url "https://github.com/NanoVNA-Saver/nanovna-saver")
2345 (commit (string-append "v" version))))
2346 (file-name (git-file-name name version))
2347 (sha256
2348 (base32 "07mih8jgpnnq101yqwv82sihbfjqi47dkvni34minbp19676q1bw"))))
2349 (build-system pyproject-build-system)
2350 (native-inputs
2351 (list python-cython python-setuptools-scm python-wheel))
2352 (inputs
2353 (list python-numpy python-pyqt-6 python-pyserial python-scipy))
2354 (arguments
2355 (list #:tests? #f))
2356 (home-page "https://github.com/NanoVNA-Saver/nanovna-saver")
2357 (synopsis "GUI for NanoVNA devices")
2358 (description
2359 "NanoVNA-Saver is a tool for reading, displaying and saving data from the
2360NanoVNA vector network analyzers.")
2361 (license license:gpl3+)))
2362
2363(define-public qsstv
2364 (package
2365 (name "qsstv")
2366 (version "9.5.8")
2367 (source
2368 (origin
2369 (method url-fetch)
2370 (uri (string-append "http://users.telenet.be/on4qz/qsstv/downloads/"
2371 "qsstv_" version ".tar.gz"))
2372 (sha256
2373 (base32 "0s3sivc0xan6amibdiwfnknrl3248wzgy98w6gyxikl0qsjpygy0"))))
2374 (build-system qt-build-system)
2375 (native-inputs
2376 (list pkg-config))
2377 (inputs
2378 (list alsa-lib
2379 fftw
2380 fftwf
2381 hamlib
2382 openjpeg
2383 pulseaudio
2384 qtbase-5
2385 qtwayland-5
2386 v4l-utils))
2387 (arguments
2388 (list
2389 #:tests? #f ; No test suite.
2390 #:modules '((guix build qt-build-system)
2391 ((guix build gnu-build-system) #:prefix gnu:)
2392 (guix build utils))
2393 #:phases
2394 #~(modify-phases %standard-phases
2395 (replace 'configure
2396 (lambda* (#:key outputs #:allow-other-keys)
2397 (invoke "qmake"
2398 (string-append "PREFIX=" (assoc-ref outputs "out")))))
2399 (replace 'build (assoc-ref gnu:%standard-phases 'build))
2400 (replace 'install (assoc-ref gnu:%standard-phases 'install)))))
2401 (home-page "http://users.telenet.be/on4qz/qsstv/")
2402 (synopsis "Program for receiving and transmitting SSTV and HAMDRM")
2403 (description
2404 "QSSTV is a program for receiving and transmitting SSTV and HAMDRM
2405(sometimes called DSSTV). It is compatible with most of MMSSTV and EasyPal.")
2406 (license (list license:gpl2+
2407 license:qwt1.0))))
2408
2409(define-public direwolf
2410 (package
2411 (name "direwolf")
2412 (version "1.7")
2413 (source
2414 (origin
2415 (method git-fetch)
2416 (uri (git-reference
2417 (url "https://github.com/wb2osz/direwolf")
2418 (commit version)))
2419 (file-name (git-file-name name version))
2420 (sha256
2421 (base32 "0zhigg0slb8gmv622ayaj0nba5kxcgdyadgv0lmyqaw2mvlmrg2m"))))
2422 (build-system cmake-build-system)
2423 (inputs
2424 (list alsa-lib hamlib))
2425 (arguments
2426 `(#:phases
2427 (modify-phases %standard-phases
2428 (add-after 'unpack 'fix-paths
2429 (lambda* (#:key outputs #:allow-other-keys)
2430 (substitute* "conf/CMakeLists.txt"
2431 (("DESTINATION /etc")
2432 (string-append "DESTINATION "
2433 (assoc-ref outputs "out")
2434 "/etc"))))))))
2435 (home-page "https://github.com/wb2osz/direwolf")
2436 (synopsis "TNC for Amateur Packet Radio")
2437 (description
2438 "Dire Wolf is a Terminal Node Controller (TNC) for Amateur Packet Radio.
2439It can perform as:
2440@itemize
2441@item APRS GPS tracker,
2442@item Digipeater,
2443@item Internet gateway (IGate)
2444@item APRStt gateway
2445@end itemize\n")
2446 (license license:gpl2+)))
2447
2448(define-public aldo
2449 (package
2450 (name "aldo")
2451 (version "0.7.7")
2452 (source
2453 (origin
2454 (method url-fetch)
2455 (uri (string-append "mirror://savannah/aldo/aldo-" version ".tar.bz2"))
2456 (sha256
2457 (base32 "14lzgldqzbbzydsy1cai3wln3hpyj1yhj8ji3wygyzr616fq9f7i"))))
2458 (build-system gnu-build-system)
2459 (inputs
2460 (list ao))
2461 (home-page "https://www.nongnu.org/aldo/")
2462 (synopsis "Morse code tutor")
2463 (description
2464 "Aldo is a morse code learning tool providing four type of training
2465methods:
2466
2467@itemize
2468@item Classic exercise,
2469@item Koch method,
2470@item Read from file,
2471@item Callsign exercise.
2472@end itemize\n")
2473 (license license:gpl3+)))
2474
2475(define-public unixcw
2476 (package
2477 (name "unixcw")
2478 (version "3.6.0")
2479 (source
2480 (origin
2481 (method url-fetch)
2482 (uri (string-append "mirror://sourceforge/unixcw/unixcw-"
2483 version ".tar.gz"))
2484 (sha256
2485 (base32 "15wriwv91583kmmyijbzam3dpclzmg4qjyfzjv5f75x9b0gqabxm"))))
2486 (build-system gnu-build-system)
2487 (native-inputs
2488 (list pkg-config))
2489 (inputs
2490 (list alsa-lib ncurses pulseaudio qtbase-5))
2491 (arguments
2492 `(#:configure-flags '("--disable-static")
2493 #:phases
2494 (modify-phases %standard-phases
2495 (add-after 'unpack 'fix-paths
2496 (lambda* (#:key inputs #:allow-other-keys)
2497 (substitute* '("configure"
2498 "src/config.h.in"
2499 "src/cwcp/Makefile.am"
2500 "src/cwcp/Makefile.in")
2501 (("-lcurses")
2502 "-lncurses"))
2503 (substitute* "src/libcw/libcw_pa.c"
2504 (("libpulse-simple.so" all)
2505 (search-input-file inputs "/lib/libpulse-simple.so"))))))))
2506 (home-page "https://unixcw.sourceforge.net/")
2507 (synopsis "Morse code library and programs")
2508 (description
2509 "@code{unixcw} is a project providing the libcw library and a set of
2510programs using the library: cw, cwgen, cwcp and xcwcp. The programs are
2511intended for people who want to learn receiving and sending morse code.")
2512 (license license:gpl2+)))
2513
2514(define-public kochmorse
2515 (package
2516 (name "kochmorse")
2517 (version "3.5.1")
2518 (source
2519 (origin
2520 (method git-fetch)
2521 (uri (git-reference
2522 (url "https://github.com/hmatuschek/kochmorse")
2523 (commit (string-append "v" version))))
2524 (file-name (git-file-name name version))
2525 (sha256
2526 (base32 "1s1aj223n57rpc95rih98z08xnyhq2zp02byzrc3f7s01fv3nj0l"))))
2527 (build-system qt-build-system)
2528 (native-inputs
2529 (list qttools-5))
2530 (inputs
2531 (list qtbase-5 qtmultimedia-5 qtwayland-5))
2532 (arguments
2533 `(#:tests? #f)) ; No test suite
2534 (home-page "https://dm3mat.darc.de/kochmorse/")
2535 (synopsis "Morse code tutor")
2536 (description
2537 "KochMorse is a simple morse-code tutor using the Koch method.")
2538 (license license:gpl2+)))
2539
2540(define-public ggmorse
2541 (let ((commit "8fb433d6cd6a71940f51b5724663ec0c75bf0b62")
2542 (revision "1"))
2543 (package
2544 (name "ggmorse")
2545 (version (git-version "0.1.0" revision commit))
2546 (source
2547 (origin
2548 (method git-fetch)
2549 (uri (git-reference
2550 (url "https://github.com/ggerganov/ggmorse")
2551 (commit commit)))
2552 (file-name (git-file-name name version))
2553 (sha256
2554 (base32 "1lhsmyhljqa6apzbysqar56wpfcdvs3pq9ia1mshqd6d3hz74s78"))))
2555 (build-system cmake-build-system)
2556 (arguments
2557 (list #:tests? #f
2558 #:configure-flags #~(list "-DGGMORSE_SUPPORT_SDL2=OFF")
2559 #:phases #~(modify-phases %standard-phases
2560 (add-after 'unpack 'disable-imgui-build
2561 (lambda _
2562 (substitute* "examples/CMakeLists.txt"
2563 (("add_subdirectory\\(third-party\\)")
2564 "")))))))
2565 (synopsis "Morse code decoder")
2566 (description "GGMorse is a library that decodes Morse code in real-time
2567from raw audio.")
2568 (home-page "https://ggmorse.ggerganov.com/")
2569 (license license:expat))))
2570
2571(define-public gnuais
2572 (package
2573 (name "gnuais")
2574 (version "0.3.3")
2575 (source
2576 (origin
2577 (method git-fetch)
2578 (uri (git-reference
2579 (url "https://github.com/rubund/gnuais")
2580 (commit version)))
2581 (file-name (git-file-name name version))
2582 (sha256
2583 (base32 "1rik5fdfslszdn3yvj769jzmnv9pirzf76ki33bjjzk7nkabbnlm"))))
2584 (build-system cmake-build-system)
2585 (native-inputs
2586 `(("mariadb-dev" ,mariadb "dev")
2587 ("pkg-config" ,pkg-config)))
2588 (inputs
2589 `(("alsa-lib" ,alsa-lib)
2590 ("curl" ,curl)
2591 ("gtk+" ,gtk+)
2592 ("libsoup" ,libsoup-minimal)
2593 ("mariadb-lib" ,mariadb "lib")
2594 ("osm-gps-map" ,osm-gps-map)
2595 ("pulseaudio" ,pulseaudio)))
2596 (arguments
2597 `(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon")
2598 #:tests? #f ; No test suite
2599 #:phases
2600 (modify-phases %standard-phases
2601 (add-after 'unpack 'fix-paths
2602 (lambda* (#:key outputs #:allow-other-keys)
2603 (substitute* "src/cfgfile.c"
2604 (("/usr/share/")
2605 (string-append (assoc-ref outputs "out") "/share/"))))))))
2606 (home-page "https://gnuais.sourceforge.net/")
2607 (synopsis "AIS message demodulator and decoder")
2608 (description
2609 "This program contains algorithms to demodulate and decode AIS (Automatic
2610Identification System) messages sent by ships and coast stations.")
2611 (license license:gpl2+)))
2612
2613(define-public kappanhang
2614 (package
2615 (name "kappanhang")
2616 (version "1.3")
2617 (source
2618 (origin
2619 (method git-fetch)
2620 (uri (git-reference
2621 (url "https://github.com/nonoo/kappanhang")
2622 (commit (string-append "v" version))))
2623 (file-name (git-file-name name version))
2624 (sha256
2625 (base32 "1ycy8avq5s7zspfi0d9klqcwwkpmcaz742cigd7pmcnbbhspcicp"))))
2626 (build-system go-build-system)
2627 (arguments
2628 '(#:import-path "github.com/nonoo/kappanhang"
2629 #:install-source? #f))
2630 (inputs
2631 (list go-github-com-akosmarton-papipes
2632 go-github-com-fatih-color
2633 go-github-com-google-goterm
2634 go-github-com-mattn-go-isatty
2635 go-github-com-mesilliac-pulse-simple
2636 go-github-com-pborman-getopt
2637 go-go-uber-org-multierr
2638 go-go-uber-org-zap))
2639 (home-page "https://github.com/nonoo/kappanhang")
2640 (synopsis "Client for Icom RS-BA1 server")
2641 (description
2642 "Kappanhang remotely opens audio channels and a serial port to an Icom
2643RS-BA1 server. The application is mainly developed for connecting to the Icom
2644IC-705 transceiver, which has built-in WiFi and RS-BA1 server.
2645
2646Compatible hardware/software:
2647@itemize
2648@item Icom RS-BA1 server software,
2649@item Icom IC-705
2650@item Icom IC-9700
2651@end itemize\n")
2652 (license license:expat)))
2653
2654;; kapanhang is only one user of this package, keep it next to it to prevent
2655;; importing pulseaudio module into golang-xyz.
2656(define-public go-github-com-mesilliac-pulse-simple
2657 (let ((commit "75ac54e19fdff88f4fbd82f45125134b602230b0")
2658 (revision "0"))
2659 (package
2660 (name "go-github-com-mesilliac-pulse-simple")
2661 (version (git-version "0.0.0" revision commit))
2662 (source
2663 (origin
2664 (method git-fetch)
2665 (uri (git-reference
2666 (url "https://github.com/mesilliac/pulse-simple")
2667 (commit commit)))
2668 (file-name (git-file-name name version))
2669 (sha256
2670 (base32 "1awwczsa9yy99p035ckajqfs8m6mab0lz82mzlj1c5cj9lnmwplj"))))
2671 (build-system go-build-system)
2672 (propagated-inputs
2673 (list pkg-config pulseaudio))
2674 (arguments
2675 (list
2676 #:import-path "github.com/mesilliac/pulse-simple"
2677 #:phases #~(modify-phases %standard-phases
2678 (add-after 'unpack 'remove-examples
2679 (lambda* (#:key import-path #:allow-other-keys)
2680 (delete-file-recursively
2681 (string-append "src/" import-path "/examples")))))))
2682 (home-page "https://github.com/mesilliac/pulse-simple")
2683 (synopsis "Cgo bindings to PulseAudio's Simple API")
2684 (description
2685 "This package provides Cgo bindings to PulseAudio's Simple API, to play
2686or capture raw audio.")
2687 (license license:expat))))
2688
2689;; kapanhang is only one user of this package, keep it next to it to prevent
2690;; importing pulseaudio module into golang-xyz.
2691(define-public go-github-com-akosmarton-papipes
2692 (let ((commit "3c63b4919c769c9c2b2d07e69a98abb0eb47fe64")
2693 (revision "0"))
2694 (package
2695 (name "go-github-com-akosmarton-papipes")
2696 (version (git-version "0.0.0" revision commit))
2697 (source
2698 (origin
2699 (method git-fetch)
2700 (uri (git-reference
2701 (url "https://github.com/akosmarton/papipes")
2702 (commit commit)))
2703 (file-name (git-file-name name version))
2704 (sha256
2705 (base32 "16p77p3d1v26qd3knxn087jqlad2qm23q8m796cdr66hrdc0gahq"))))
2706 (build-system go-build-system)
2707 (inputs
2708 (list pulseaudio))
2709 (arguments
2710 `(#:import-path "github.com/akosmarton/papipes"
2711 #:phases
2712 (modify-phases %standard-phases
2713 (add-after 'unpack 'fix-paths
2714 (lambda* (#:key inputs #:allow-other-keys)
2715 (substitute* '("src/github.com/akosmarton/papipes/common.go"
2716 "src/github.com/akosmarton/papipes/sink.go"
2717 "src/github.com/akosmarton/papipes/source.go")
2718 (("exec.Command\\(\"pactl\"")
2719 (string-append "exec.Command(\""
2720 (assoc-ref inputs "pulseaudio")
2721 "/bin/pactl\""))))))))
2722 (home-page "https://github.com/akosmarton/papipes")
2723 (synopsis "Pulseaudio client library for Go")
2724 (description
2725 "This is a Pulseaudio client library in Golang for creating virtual
2726sinks and sources.")
2727 (license license:expat))))
2728
2729(define-public dream
2730 (package
2731 (name "dream")
2732 (version "2.2")
2733 (source
2734 (origin
2735 (method url-fetch)
2736 (uri (string-append "mirror://sourceforge/drm/dream/" version
2737 "/dream_" version ".orig.tar.gz"))
2738 (sha256
2739 (base32 "0mpg341b0vnm6ym0cag9zri9w6kw012rv68zdmmi2hlvq7iiw8gp"))))
2740 (build-system qt-build-system)
2741 (native-inputs
2742 (list pkg-config))
2743 (inputs
2744 (list faad2
2745 fftw
2746 libsndfile
2747 libpcap
2748 opus
2749 pulseaudio
2750 qtbase-5
2751 qtsvg-5
2752 qtwayland-5
2753 qwt
2754 speexdsp
2755 zlib))
2756 (arguments
2757 (list
2758 #:tests? #f
2759 #:modules '((guix build qt-build-system)
2760 ((guix build gnu-build-system) #:prefix gnu:)
2761 (guix build utils))
2762 #:phases
2763 #~(modify-phases %standard-phases
2764 (add-after 'unpack 'fix-paths
2765 (lambda* (#:key inputs outputs #:allow-other-keys)
2766 (substitute* "dream.pro"
2767 (("target\\.path = /usr/bin")
2768 (string-append "target.path = "
2769 (assoc-ref outputs "out") "/bin"))
2770 (("documentation\\.path = /usr/share/man/man1")
2771 (string-append "documentation.path = "
2772 (assoc-ref outputs "out")
2773 "/share/man/man1"))
2774 (("/usr/include/pulse")
2775 (search-input-directory inputs "/include/pulse"))
2776 (("/usr/include/sndfile\\.h")
2777 (search-input-file inputs "/include/sndfile.h"))
2778 (("/usr/include/opus")
2779 (search-input-directory inputs "/include/opus"))
2780 (("/usr/include/speex")
2781 (search-input-directory inputs "/include/speex"))
2782 (("/usr/include/qwt")
2783 (search-input-directory inputs "/include/qwt"))
2784 (("\\$\\$OUT_PWD/include/neaacdec\\.h")
2785 (search-input-file inputs "/include/neaacdec.h")))))
2786 (replace 'configure
2787 (lambda _
2788 (invoke "qmake")))
2789 (replace 'build (assoc-ref gnu:%standard-phases 'build))
2790 (replace 'install (assoc-ref gnu:%standard-phases 'install)))))
2791 (home-page "https://sourceforge.net/projects/drm/")
2792 (synopsis "Digital Radio Mondiale receiver")
2793 (description
2794 "Dream is a software implementation of a Digital Radio Mondiale (DRM)
2795receiver.")
2796 (license license:gpl2+)))
2797
2798(define-public welle-io
2799 (package
2800 (name "welle-io")
2801 (version "2.5")
2802 (source
2803 (origin
2804 (method git-fetch)
2805 (uri (git-reference
2806 (url "https://github.com/albrechtl/welle.io")
2807 (commit (string-append "v" version))))
2808 (file-name (git-file-name name version))
2809 (sha256
2810 (base32 "1c3pcn2apc7sf68scwnij6xr00x25650387gr05z7xw3k36jfadi"))))
2811 (build-system qt-build-system)
2812 (native-inputs
2813 (list pkg-config))
2814 (inputs
2815 (list airspy
2816 alsa-lib
2817 faad2
2818 fftwf
2819 lame
2820 libmpg123
2821 libusb
2822 qt5compat
2823 qtcharts
2824 qtdeclarative
2825 qtmultimedia
2826 rtl-sdr
2827 soapysdr))
2828 (arguments
2829 (list #:qtbase qtbase
2830 #:configure-flags #~(list "-DAIRSPY=ON"
2831 "-DRTLSDR=ON"
2832 "-DSOAPYSDR=ON")
2833 #:tests? #f))
2834 (home-page "https://www.welle.io/")
2835 (synopsis "DAB and DAB+ software radio")
2836 (description
2837 "@code{welle.io} is a Digital Audio Broadcasting (DAB and DAB+) software
2838defined radio with support for rtl-sdr.")
2839 (license license:gpl2+)))
2840
2841(define-public csdr
2842 (package
2843 (name "csdr")
2844 (version "0.18.2")
2845 (source
2846 (origin
2847 (method git-fetch)
2848 (uri (git-reference
2849 (url "https://github.com/jketterl/csdr")
2850 (commit version)))
2851 (file-name (git-file-name name version))
2852 (sha256
2853 (base32 "0j5d64na47w1j1sprwj41d9dzvs2x7xwyp0pbl439g686iwp7m9d"))))
2854 (build-system cmake-build-system)
2855 (native-inputs
2856 (list pkg-config))
2857 (inputs
2858 (list fftwf libsamplerate))
2859 (arguments
2860 (list #:tests? #f)) ; No check phase
2861 (home-page "https://github.com/jketterl/csdr")
2862 (synopsis "DSP for software defined radio")
2863 (description
2864 "This package includes the @code{libcsdr} library of
2865@acronym{DSP, Digital Signal Processing} functions for
2866@acronym{SDRs, Software Defined Radios}, and the @code{csdr} command line
2867program that can be used to build simple signal processing flow graphs.")
2868 (license license:gpl3+)))
2869
2870(define-public convert-samples
2871 (package
2872 (name "convert-samples")
2873 (version "3.0.0")
2874 (source
2875 (origin
2876 (method git-fetch)
2877 (uri (git-reference
2878 (url "https://codeberg.org/glv/convert-samples")
2879 (commit (string-append "v" version))))
2880 (file-name (git-file-name name version))
2881 (sha256
2882 (base32 "1d9w9m5agi8fiv1wk8nhjrbm2jkm2fks4ymbxkn0xphbwj3gwr7i"))))
2883 (build-system gnu-build-system)
2884 (native-inputs
2885 (list autoconf automake))
2886 (inputs
2887 (list liquid-dsp))
2888 (synopsis "SDR samples converter")
2889 (description
2890 "@code{convert-samples} is a command-line program to convert samples
2891received from software defined radios from one format to another.
2892
2893Supported formats:
2894@itemize
2895@item s8: signed 8 bit integer
2896@item u8: unsigned 8 bit integer
2897@item s16: signed 16 bit integer
2898@item u16: unsigned 16 bit integer
2899@item s32: signed 32 bit integer
2900@item u32: unsigned 32 bit integer
2901@item f32: 32 bit float
2902@item cs8: complex made of signed 8 bit integers
2903@item cu8: complex made of unsigned 8 bit integers
2904@item cs16: complex made of signed 16 bit integers
2905@item cu16: complex made of unsigned 16 bit integers
2906@item cs32: complex made of signed 32 bit integers
2907@item cu32: complex made of unsigned 32 bit integers
2908@item cf32: complex made of 32 bit floats
2909@end itemize")
2910 (home-page "https://codeberg.org/glv/convert-samples")
2911 (license license:gpl3+)))
2912
2913(define-public serialdv
2914 (package
2915 (name "serialdv")
2916 (version "1.1.4")
2917 (source
2918 (origin
2919 (method git-fetch)
2920 (uri (git-reference
2921 (url "https://github.com/f4exb/serialDV")
2922 (commit (string-append "v" version))))
2923 (file-name (git-file-name name version))
2924 (sha256
2925 (base32 "0d88h2wjhf79nisiv96bq522hkbknzm88wsv0q9k33mzmrwnrx93"))))
2926 (build-system cmake-build-system)
2927 (arguments
2928 `(#:tests? #f)) ; No test suite.
2929 (home-page "https://github.com/f4exb/serialDV")
2930 (synopsis "Audio interface for AMBE3000 based devices")
2931 (description
2932 "SerialDV is a minimal interface to encode and decode audio with AMBE3000
2933based devices in packet mode over a serial link.")
2934 (license license:gpl3+)))
2935
2936(define-public cm256cc
2937 (package
2938 (name "cm256cc")
2939 (version "1.1.1")
2940 (source
2941 (origin
2942 (method git-fetch)
2943 (uri (git-reference
2944 (url "https://github.com/f4exb/cm256cc")
2945 (commit (string-append "v" version))))
2946 (file-name (git-file-name name version))
2947 (sha256
2948 (base32 "07gx6yb17m9kd885qpf98cryn1acp546qg80c0rncy3hic0hd6pf"))))
2949 (build-system cmake-build-system)
2950 (arguments
2951 ;; Disable some SIMD features for reproducibility.
2952 `(#:configure-flags '("-DENABLE_DISTRIBUTION=1")
2953 #:phases
2954 (modify-phases %standard-phases
2955 (replace 'check
2956 (lambda* (#:key tests? #:allow-other-keys)
2957 (when tests?
2958 (invoke "./cm256_test")))))))
2959 (home-page "https://github.com/f4exb/cm256cc")
2960 (synopsis "Cauchy MDS Block Erasure Codec")
2961 (description
2962 "This is a C++ library implementing fast GF(256) Cauchy MDS Block Erasure
2963Codec.")
2964 (license license:gpl3+)))
2965
2966(define-public libdab
2967 ;; No release since 2017, use commit directly.
2968 ;; This is the last commit for which dab-api.h has "Version 3.0"
2969 ;; in a comment.
2970 (let ((commit "dfacdcd37cd76876def0861b8914d72e831b7b66")
2971 (revision "2"))
2972 (package
2973 (name "libdab")
2974 (version (git-version "0.8" revision commit))
2975 (source
2976 (origin
2977 (method git-fetch)
2978 (uri (git-reference
2979 (url "https://github.com/JvanKatwijk/dab-cmdline")
2980 (commit commit)))
2981 (file-name (git-file-name name version))
2982 (sha256
2983 (base32 "0ydv4iifrf4pd8s4gjg55l9abi49ppbdy2k9jlrvsvnq2i0hch86"))))
2984 (build-system cmake-build-system)
2985 (inputs
2986 (list faad2 fftwf zlib))
2987 (arguments
2988 `(#:tests? #f ; No test suite.
2989 #:phases
2990 (modify-phases %standard-phases
2991 (add-after 'unpack 'enter-sources-directory
2992 (lambda _
2993 (chdir "library"))))))
2994 (home-page "https://github.com/JvanKatwijk/dab-cmdline")
2995 (synopsis "DAB decoding library")
2996 (description "This is a library to decode @acronym{DAB/DAB+, Digital
2997Audio Broadcasting}.")
2998 (license license:gpl2+))))
2999
3000(define-public dsd
3001 (let ((commit "59423fa46be8b41ef0bd2f3d2b45590600be29f0")
3002 (revision "1"))
3003 (package
3004 (name "dsd")
3005 (version (git-version "1.7.0" revision commit))
3006 (source
3007 (origin
3008 (method git-fetch)
3009 (uri (git-reference
3010 (url "https://github.com/szechyjs/dsd")
3011 (commit commit)))
3012 (file-name (git-file-name name version))
3013 (sha256
3014 (base32 "128gvgkanvh4n5bjnzkfk419hf5fdbad94fb8d8lv67h94vfchyd"))))
3015 (build-system cmake-build-system)
3016 (native-inputs
3017 (list pkg-config))
3018 (inputs
3019 (list itpp libsndfile mbelib portaudio))
3020 (arguments
3021 (list #:phases
3022 #~(modify-phases %standard-phases
3023 (add-after 'unpack 'fix-itpp-detection
3024 (lambda _
3025 (substitute* "cmake/FindITPP.cmake"
3026 (("libitpp\\.dll")
3027 "itpp_debug")))))))
3028 (synopsis "Digital speech decoder")
3029 (description
3030 "DSD is able to decode several digital voice formats used in radio
3031transmissions.")
3032 (home-page "https://github.com/szechyjs/dsd")
3033 (license (list license:expat license:gpl2)))))
3034
3035(define-public dsdcc
3036 (package
3037 (name "dsdcc")
3038 (version "1.9.5")
3039 (source
3040 (origin
3041 (method git-fetch)
3042 (uri (git-reference
3043 (url "https://github.com/f4exb/dsdcc")
3044 (commit (string-append "v" version))))
3045 (file-name (git-file-name name version))
3046 (sha256
3047 (base32 "1rb9r1m4rfi9x5x4h5frpl65xmk5p2bqyfisnrv6nbmnsgds9h0c"))))
3048 (build-system cmake-build-system)
3049 (inputs
3050 (list mbelib serialdv))
3051 (arguments
3052 `(#:tests? #f ; No test suite.
3053 #:configure-flags
3054 (list "-DUSE_MBELIB=ON"
3055 (string-append "-DLIBMBE_INCLUDE_DIR="
3056 (assoc-ref %build-inputs "mbelib")
3057 "/include")
3058 (string-append "-DLIBMBE_LIBRARY="
3059 (assoc-ref %build-inputs "mbelib")
3060 "/lib/libmbe.so")
3061 (string-append "-DLIBSERIALDV_INCLUDE_DIR="
3062 (assoc-ref %build-inputs "serialdv")
3063 "/include/serialdv")
3064 (string-append "-DLIBSERIALDV_LIBRARY="
3065 (assoc-ref %build-inputs "serialdv")
3066 "/lib/libserialdv.so"))))
3067 (home-page "https://github.com/f4exb/dsdcc")
3068 (synopsis "Digital speech decoder")
3069 (description
3070 "This package provides a library and a program to decode several digital
3071voice formats.")
3072 (license license:gpl3+)))
3073
3074(define-public sdrangel
3075 (package
3076 (name "sdrangel")
3077 (version "7.26.1")
3078 (source
3079 (origin
3080 (method git-fetch)
3081 (uri (git-reference
3082 (url "https://github.com/f4exb/sdrangel")
3083 (commit (string-append "v" version))))
3084 (file-name (git-file-name name version))
3085 (sha256
3086 (base32 "065i3n0nswp0jmxyqimwmjwy09ch5vr027ahp1kd1ah65idna66g"))))
3087 (build-system qt-build-system)
3088 (native-inputs
3089 (list doxygen graphviz pkg-config))
3090 (inputs
3091 (list airspy
3092 airspyhf
3093 alsa-lib
3094 aptdec
3095 bladerf
3096 boost
3097 cm256cc
3098 codec2-1
3099 dsdcc
3100 faad2
3101 ffmpeg
3102 fftwf
3103 flac
3104 ggmorse
3105 hackrf
3106 hamlib
3107 hidapi
3108 libdab
3109 libiio
3110 libusb
3111 mbelib
3112 opencv
3113 opus
3114 pulseaudio
3115 qtbase
3116 qtcharts
3117 qtdeclarative
3118 qtlocation
3119 qtmultimedia
3120 qtpositioning
3121 qtserialport
3122 qtspeech
3123 qtscxml
3124 qtsvg
3125 qtwayland
3126 qtwebengine
3127 qtwebsockets
3128 rtl-sdr
3129 serialdv
3130 soapysdr
3131 sgp4
3132 zlib))
3133 (arguments
3134 (list
3135 #:tests? #f ;No test suite.
3136 #:qtbase qtbase
3137 #:configure-flags
3138 #~(list (string-append "-DAPT_DIR="
3139 #$(this-package-input "aptdec"))
3140 (string-append "-DDAB_DIR="
3141 #$(this-package-input "libdab"))
3142 (string-append "-DDSDCC_DIR="
3143 #$(this-package-input "dsdcc"))
3144 (string-append "-DMBE_DIR="
3145 #$(this-package-input "mbelib"))
3146 (string-append "-DSERIALDV_DIR="
3147 #$(this-package-input "serialdv"))
3148 (string-append "-DSGP4_DIR="
3149 #$(this-package-input "sgp4"))
3150 (string-append "-DSOAPYSDR_DIR="
3151 #$(this-package-input "soapysdr"))
3152 (string-append "-DIIO_DIR="
3153 #$(this-package-input "libiio"))
3154 "-DENABLE_QT6=ON")
3155 #:phases
3156 #~(modify-phases %standard-phases
3157 (add-after 'unpack 'fix-unrecognized-compiler-option
3158 (lambda _
3159 (substitute* "cmake/Modules/CompilerOptions.cmake"
3160 (("-Wno-inconsistent-missing-override")
3161 "-fpermissive"))))
3162 (add-after 'unpack 'fix-CPU-extension-detection
3163 ;; ‘Fix’ in the static sense. TODO: Make this -tune'able.
3164 (lambda _
3165 (substitute* "CMakeLists.txt"
3166 (("set\\(ARCH_OPT \"native\"")
3167 "set(ARCH_OPT \"\""))
3168 (let ((file "cmake/Modules/DetectArchitecture.cmake"))
3169 ;; Disable all build-time CPU extension detection…
3170 (substitute* file
3171 (("detect_extensions\\(.*") ""))
3172 #$@(if (target-x86-64?)
3173 ;; …but force extensions that are guaranteed to be
3174 ;; available.
3175 #~((substitute* file
3176 ((".*cmake_pop_check_state" eof)
3177 (string-append "force_ext_available(SSE2)\n"
3178 eof))))
3179 #~())))))))
3180 (home-page "https://github.com/f4exb/sdrangel/wiki")
3181 (synopsis "Software defined radio")
3182 (description
3183 "SDRangel is a Qt software defined radio and signal analyzer frontend for
3184various hardware.")
3185 (license license:gpl3+)))
3186
3187(define-public sdr++
3188 (let ((commit "b89fdba433cf6aa0dab424a06974a0b45abf6c4a")
3189 (revision "1"))
3190 (package
3191 (name "sdr++")
3192 (version (git-version "1.1.0" revision commit))
3193 (source
3194 (origin
3195 (method git-fetch)
3196 (uri (git-reference
3197 (url "https://github.com/AlexandreRouma/SDRPlusPlus")
3198 (commit commit)))
3199 (file-name (git-file-name name version))
3200 (sha256
3201 (base32 "11l1ja3dwxa67rp09x4rr5pd6rh6amn48z5vv6dygspq64w63hp2"))))
3202 (build-system cmake-build-system)
3203 (native-inputs
3204 (list pkg-config))
3205 (inputs
3206 (list airspy
3207 airspyhf
3208 alsa-lib
3209 bladerf
3210 codec2
3211 fftwf
3212 glew
3213 glfw
3214 hackrf
3215 jack-2
3216 libad9361
3217 libiio
3218 libusb
3219 pulseaudio
3220 rtaudio
3221 rtl-sdr
3222 soapysdr
3223 volk
3224 (list zstd "lib")))
3225 (arguments
3226 (list #:tests? #f ; No test suite.
3227 #:configure-flags #~(list "-DOPT_BUILD_BLADERF_SOURCE=ON"
3228 "-DOPT_BUILD_PLUTOSDR_SOURCE=ON"
3229 "-DOPT_BUILD_M17_DECODER=ON")
3230 #:phases
3231 #~(modify-phases %standard-phases
3232 (add-after 'unpack 'fix-paths
3233 (lambda _
3234 (substitute* "CMakeLists.txt"
3235 (("/usr")
3236 #$output)))))))
3237 (home-page "https://github.com/AlexandreRouma/SDRPlusPlus")
3238 (synopsis "Software defined radio software")
3239 (description
3240 "SDR++ is a software defined radio software for various hardware.")
3241 (license license:gpl3+))))
3242
3243(define-public inspectrum
3244 (package
3245 (name "inspectrum")
3246 (version "0.4.0")
3247 (source
3248 (origin
3249 (method git-fetch)
3250 (uri (git-reference
3251 (url "https://github.com/miek/inspectrum")
3252 (commit (string-append "v" version))))
3253 (file-name (git-file-name name version))
3254 (sha256
3255 (base32 "0ix2pb28msj6s5a5bk32b68z4s937zrg20ggiwnrz4xqnr9hijyd"))))
3256 (build-system qt-build-system)
3257 (arguments (list #:qtbase qtbase
3258 #:tests? #f))
3259 (native-inputs
3260 (list pkg-config))
3261 (inputs
3262 (list fftwf liquid-dsp qtbase qtwayland))
3263 (home-page "https://github.com/miek/inspectrum")
3264 (synopsis "Radio signal analyser")
3265 (description
3266 "Inspectrum is a tool for analysing captured signals, primarily from
3267software-defined radio receivers.")
3268 (license license:gpl3+)))
3269
3270(define-public wfview
3271 (package
3272 (name "wfview")
3273 (version "2.11")
3274 (source
3275 (origin
3276 (method git-fetch)
3277 (uri (git-reference
3278 (url "https://gitlab.com/eliggett/wfview")
3279 (commit (string-append "v" version))))
3280 (file-name (git-file-name name version))
3281 (sha256
3282 (base32 "0jmwhf2wkr5gl5y69l44qmay22m4843qlvj1cw2740s9ayg11y50"))))
3283 (build-system qt-build-system)
3284 (arguments
3285 (list
3286 #:tests? #f ; No test suite.
3287 #:modules '((guix build qt-build-system)
3288 ((guix build gnu-build-system) #:prefix gnu:)
3289 (guix build utils))
3290 #:phases
3291 #~(modify-phases %standard-phases
3292 (add-after 'unpack 'fix-paths
3293 (lambda _
3294 (substitute* "wfview.pro"
3295 (("`hostname`")
3296 "guix")
3297 (("`whoami`")
3298 "build")
3299 (("\\$\\(shell git -C .* HEAD\\)")
3300 "")
3301 (("!win32:LIBS \\+= -L\\./ -lopus")
3302 "!win32:LIBS += -L./ -lopus -lqcustomplot")
3303 (("/sbin/")
3304 ""))
3305 (substitute* '("wfmain.cpp")
3306 (("/usr/share")
3307 (string-append #$output "/share")))))
3308 (replace 'configure
3309 (lambda _
3310 (mkdir-p "build")
3311 (chdir "build")
3312 (invoke "qmake"
3313 (string-append "PREFIX=" #$output)
3314 "../wfview.pro")))
3315 (replace 'build (assoc-ref gnu:%standard-phases 'build))
3316 (replace 'install (assoc-ref gnu:%standard-phases 'install)))))
3317 (inputs
3318 (list eigen
3319 eudev
3320 hidapi
3321 opus
3322 portaudio
3323 pulseaudio
3324 qcustomplot-qt5
3325 qtgamepad-5
3326 qtbase-5
3327 qtmultimedia-5
3328 qtserialport-5
3329 qtwayland-5
3330 qtwebsockets-5
3331 rtaudio))
3332 (home-page "https://wfview.org/")
3333 (synopsis "Software to control Icom radios")
3334 (description
3335 "@code{wfview} is a program to control modern Icom radios and view the
3336spectrum waterfall. It supports at least the following models:
3337
3338@itemize
3339@item IC-705
3340@item IC-905
3341@item IC-7300
3342@item IC-7610
3343@item IC-7850
3344@item IC-7851
3345@item IC-9700
3346@end itemize\n")
3347 (license (list license:expat
3348 license:gpl3))))
3349
3350(define-public minimodem
3351 (package
3352 (name "minimodem")
3353 (version "0.24")
3354 (source
3355 (origin
3356 (method url-fetch)
3357 (uri (string-append "http://www.whence.com/minimodem/minimodem-"
3358 version ".tar.gz"))
3359 (sha256
3360 (base32 "13ipyh39l7p420j1j9kvwyskv2nqnimls1a3z1klsa1zivds9k7q"))))
3361 (build-system gnu-build-system)
3362 (native-inputs
3363 (list pkg-config))
3364 (inputs
3365 (list alsa-lib fftwf libsndfile pulseaudio))
3366 (home-page "http://www.whence.com/minimodem/")
3367 (synopsis "Software audio FSK modem")
3368 (description
3369 "Minimodem is a command-line program which decodes (or generates) audio
3370modem tones at any specified baud rate, using various framing protocols. It
3371acts a general-purpose software FSK modem, and includes support for various
3372standard FSK protocols such as Bell103, Bell202, RTTY, TTY/TDD, NOAA SAME, and
3373Caller-ID.")
3374 (license license:gpl3+)))
3375
3376(define-public rfcat
3377 (package
3378 (name "rfcat")
3379 (version "2.0.1")
3380 (source
3381 (origin
3382 (method git-fetch)
3383 (uri (git-reference
3384 (url "https://github.com/atlas0fd00m/rfcat")
3385 (commit (string-append "v" version))))
3386 (file-name (git-file-name name version))
3387 (sha256
3388 (base32 "0wf7fh9af24v6yfn83d00f3km4g5afgi8s0h7922si6pn1anrm45"))))
3389 (build-system pyproject-build-system)
3390 (native-inputs
3391 (list python-setuptools
3392 python-wheel))
3393 (inputs
3394 (list python-future
3395 python-ipython
3396 python-numpy
3397 python-pyserial
3398 python-pyside-6
3399 python-pyusb))
3400 (arguments
3401 (list
3402 #:tests? #f ; Tests want to use a serial port
3403 #:phases
3404 #~(modify-phases %standard-phases
3405 (add-after 'unpack 'fix-permissions
3406 (lambda _
3407 (make-file-writable "rflib/rflib_version.py")))
3408 (add-after 'install 'install-udev-rules
3409 (lambda* _
3410 (install-file "etc/udev/rules.d/20-rfcat.rules"
3411 (string-append #$output "/lib/udev/rules.d")))))))
3412 (home-page "https://github.com/atlas0fd00m/rfcat")
3413 (synopsis "Program to control some radio dongles")
3414 (description
3415 "@code{rfcat} is a program to control some radio dongles operating in
3416ISM bands.
3417
3418Supported dongles:
3419@itemize
3420@item YARD Stick One
3421@item cc1111emk
3422@item chronos watch dongle
3423@item imme (limited support)
3424@end itemize
3425
3426To install the rfcat udev rules, you must extend @code{udev-service-type} with
3427this package. E.g.: @code{(udev-rules-service 'rfcat rfcat)}")
3428 (license (list license:bsd-3
3429 license:gpl2))))
3430
3431(define-public rx-tools
3432 ;; No tagged release since 2016, use commit instead.
3433 (let ((commit "811b21c4c8a592515279bd19f7460c6e4ff0551c")
3434 (revision "1"))
3435 (package
3436 (name "rx-tools")
3437 (version (git-version "1.0.3" revision commit))
3438 (source
3439 (origin
3440 (method git-fetch)
3441 (uri (git-reference
3442 (url "https://github.com/rxseger/rx_tools")
3443 (commit commit)))
3444 (file-name (git-file-name name version))
3445 (sha256
3446 (base32 "0qr8q00cv6q0ikjrph0qh07mlbvgk4yimccpkn3ir8ib5ma0r9sr"))))
3447 (build-system cmake-build-system)
3448 (inputs
3449 (list soapysdr))
3450 (arguments
3451 `(#:tests? #f)) ; No test suite.
3452 (home-page "https://github.com/rxseger/rx_tools")
3453 (synopsis "Command line programs for receiving data from SDRs")
3454 (description
3455 "This package provides the @code{rx_fm}, @code{rx_power} and
3456@code{rx_sdr} tools for receiving data from SDRs, based on @code{rtl_fm},
3457@code{rtl_power} and @code{rtl_sdr} from RTL-SDR, but using the SoapySDR
3458vendor-neutral SDR support library instead, intended to support a wider range
3459of devices than RTL-SDR.")
3460 (license license:gpl2+))))
3461
3462(define-public urh
3463 (package
3464 (name "urh")
3465 (version "2.10.0")
3466 (source
3467 (origin
3468 (method git-fetch)
3469 (uri (git-reference
3470 (url "https://github.com/jopohl/urh")
3471 (commit (string-append "v" version))))
3472 (file-name (git-file-name name version))
3473 (sha256
3474 (base32 "1y8w796j46lnybyb9vfx47xiy5h1zkd8rv8jxav9h9kwixc69pdd"))))
3475 (build-system pyproject-build-system)
3476 (arguments
3477 (list
3478 #:test-flags
3479 ;; FIXME: Find out how to fix these tests.
3480 #~(list "--ignore=tests/test_continuous_modulator.py"
3481 ;; This test causes a segmentation fault
3482 "--ignore=tests/test_send_recv_dialog_gui.py"
3483 ;; This test hangs forever
3484 "--ignore=tests/test_spectrogram.py")
3485 #:phases
3486 #~(modify-phases %standard-phases
3487 (add-after 'unpack 'configure-compiler
3488 (lambda _
3489 ;; Use gcc as compiler
3490 (substitute* "src/urh/dev/native/ExtensionHelper.py"
3491 (("compiler = ccompiler\\.new_compiler\\(\\)\n" all)
3492 (string-append
3493 all " compiler.set_executables(compiler='gcc',"
3494 " compiler_so='gcc', linker_exe='gcc', linker_so='gcc -shared')\n")))))
3495 (add-after 'build 'build-cythonext
3496 (lambda _
3497 (invoke "python" "src/urh/cythonext/build.py")))
3498 (add-before 'check 'prepare-x
3499 (lambda _
3500 (system "Xvfb &")
3501 (setenv "DISPLAY" ":0")
3502 (setenv "HOME" "/tmp"))))))
3503 (native-inputs
3504 (list python-cython
3505 python-pytest
3506 python-setuptools
3507 xorg-server-for-tests))
3508 (inputs
3509 (list airspy
3510 bladerf
3511 gnuradio
3512 gr-osmosdr
3513 hackrf
3514 python-numpy
3515 python-psutil
3516 python-pyaudio
3517 python-pyqt-6
3518 rtl-sdr))
3519 (home-page "https://github.com/jopohl/urh")
3520 (synopsis "Wireless protocol investigation program")
3521 (description
3522 "The Universal Radio Hacker (URH) is a complete suite for wireless
3523protocol investigation with native support for many common Software Defined
3524Radios.")
3525 (license license:gpl3+)))
3526
3527(define-public volk-gnsssdr
3528 (package
3529 (name "volk-gnsssdr")
3530 (version "0.0.19")
3531 (source
3532 (origin
3533 (method git-fetch)
3534 (uri (git-reference
3535 (url "https://github.com/gnss-sdr/gnss-sdr")
3536 (commit (string-append "v" version))))
3537 (file-name (git-file-name name version))
3538 (sha256
3539 (base32 "0l1hqfqh8ffgy6nxqdk390vmnmhv66x7m8323mz2izczqc5acy1p"))))
3540 (build-system cmake-build-system)
3541 (native-inputs (list python python-mako))
3542 (inputs (list cpu-features))
3543 (arguments
3544 (list
3545 #:phases
3546 #~(modify-phases %standard-phases
3547 (add-after 'unpack 'chdir
3548 (lambda _
3549 (chdir "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr"))))))
3550 (home-page "https://github.com/gnss-sdr/gnss-sdr/blob/main/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/")
3551 (synopsis "Extra VOLK kernels for GNSS-SDR")
3552 (description
3553 "This library contains VOLK kernels of hand-written SIMD code for
3554different mathematical operations used by GNSS-SDR, mainly with 8-bit and
355516-bit real and complex data types, offering a platform/architecture agnostic
3556version that will run in all machines, plus other versions for different SIMD
3557instruction sets.")
3558 (license license:gpl3+)))
3559
3560(define-public gnss-sdr
3561 (package
3562 (name "gnss-sdr")
3563 (version "0.0.20")
3564 (source
3565 (origin
3566 (method git-fetch)
3567 (uri (git-reference
3568 (url "https://github.com/gnss-sdr/gnss-sdr")
3569 (commit (string-append "v" version))))
3570 (file-name (git-file-name name version))
3571 (sha256
3572 (base32 "197y1jz6a5481qbf92wkfdz2zk00028hybgn05pf8nawhwizq2wi"))))
3573 (build-system cmake-build-system)
3574 (native-inputs
3575 `(("googletest-source" ,(package-source googletest))
3576 ("orc" ,orc)
3577 ("pkg-config" ,pkg-config)
3578 ("python" ,python)
3579 ("python-mako" ,python-mako)))
3580 (inputs
3581 (list armadillo
3582 boost-1.83
3583 cpu-features
3584 fmt
3585 gflags
3586 glog
3587 gmp
3588 gnuradio
3589 gnuplot
3590 gnutls
3591 gr-osmosdr
3592 libpcap
3593 log4cpp
3594 matio
3595 openblas
3596 openssl
3597 protobuf
3598 pugixml
3599 spdlog
3600 volk
3601 volk-gnsssdr))
3602 (arguments
3603 `(#:configure-flags
3604 (list "-DENABLE_GENERIC_ARCH=ON"
3605 "-DENABLE_OSMOSDR=ON"
3606
3607 "-DENABLE_UNIT_TESTING=FALSE" ; many tests needing data download
3608 "-DBLA_VENDOR=OpenBLAS"
3609 (string-append "-DGFLAGS_ROOT="
3610 (assoc-ref %build-inputs "gflags"))
3611 (string-append "-DGLOG_ROOT="
3612 (assoc-ref %build-inputs "glog"))
3613 (string-append "-DGTEST_DIR="
3614 (assoc-ref %build-inputs "googletest-source")))
3615 #:tests? #f ; FIXME: fails with "No tests were found" error
3616 #:phases
3617 (modify-phases %standard-phases
3618 (add-before 'check 'set-home
3619 (lambda _
3620 (setenv "HOME" "/tmp"))))))
3621 (home-page "https://gnss-sdr.org/")
3622 (synopsis "Global Navigation Satellite Systems software-defined receiver")
3623 (description
3624 "This program is a software-defined receiver which is able to process
3625(that is, to perform detection, synchronization, demodulation and decoding of
3626the navigation message, computation of observables and, finally, computation of
3627position fixes) the signals of the BeiDou, Galileo, GLONASS and GPS Global
3628Navigation Satellite System.")
3629 (license license:gpl3+)))
3630
3631(define-public satdump
3632 (package
3633 (name "satdump")
3634 (version "1.2.2")
3635 (source
3636 ;; TODO: The sources embed some libraries (in src-core/libs).
3637 ;; Using regular packaged shared libraries instead will require big
3638 ;; changes in CMakeList files.
3639 (origin
3640 (method git-fetch)
3641 (uri (git-reference
3642 (url "https://github.com/SatDump/SatDump")
3643 (commit version)))
3644 (file-name (git-file-name name version))
3645 (sha256
3646 (base32 "13f0r513pvf5wax81i6443z3i0808zqf3yppvln8171hsgwdwagr"))))
3647 (build-system cmake-build-system)
3648 (native-inputs (list pkg-config))
3649 (inputs
3650 (list airspy
3651 airspyhf
3652 armadillo
3653 bladerf
3654 curl
3655 fftwf
3656 glew
3657 glfw
3658 hackrf
3659 hdf5
3660 jemalloc
3661 libpng
3662 libtiff
3663 luajit
3664 nng
3665 portaudio
3666 rtl-sdr
3667 volk
3668 (list zstd "lib")))
3669 (arguments
3670 (list
3671 #:tests? #f ; No test suite
3672 #:phases
3673 #~(modify-phases %standard-phases
3674 (add-after 'unpack 'fix-macro-names
3675 ;; Some macros named c1 and c2 conflict with newer volk.
3676 ;; Fixed upstream in what will become version 2.0.0.
3677 ;; For now, just rename the macros.
3678 (lambda _
3679 (substitute* '("src-core/common/calibration.h"
3680 "src-core/common/calibration.cpp")
3681 (("c1") "mc1")
3682 (("c2") "mc2"))))
3683 ;; The RUNPATH of this shared library is missing the
3684 ;; .../lib/satdump/plugins directory, which fails the
3685 ;; 'validate-runpath' phase.
3686 (add-after 'unpack 'fix-runpath
3687 (lambda _
3688 (substitute* "plugins/official_products_support/CMakeLists.txt"
3689 (("add_library\\(official_products_loader_support.*" orig)
3690 (string-append
3691 orig "\n" "set_target_properties("
3692 "official_products_loader_support"
3693 " PROPERTIES INSTALL_RPATH \""
3694 #$output "/lib:" #$output "/lib/satdump/plugins\")\n"))))))))
3695 (home-page "https://www.satdump.org/")
3696 (synopsis "Satellite data processing software")
3697 (description "SatDump is a generic satellite data processing software.
3698For example, it can decode the telemetry and images sent by some meteorological
3699satellites.")
3700 (license license:gpl3)))
3701
3702(define-public chirp
3703 ;; 0.4.0 (2014-03-19); upstream stopped publishing releases or apply version
3704 ;; tags, use the latest commit from master HEAD.
3705 (let ((commit "6ff333968aaed63ad3d483e9e6363f425974ba30")
3706 (revision "5"))
3707 (package
3708 (name "chirp")
3709 (version (git-version "0.4.0" revision commit))
3710 (source
3711 (origin
3712 (method git-fetch)
3713 (uri (git-reference
3714 (url "https://github.com/kk7ds/chirp")
3715 (commit commit)))
3716 (file-name (git-file-name name version))
3717 (sha256
3718 (base32 "1rhnp6wdrw8qpbjyrkbsf143j216hiqwpdj9wm1k6xxb6jjskyw1"))))
3719 (build-system pyproject-build-system)
3720 (arguments
3721 (list
3722 ;; tests: 480 passed, 12 skipped, 5 deselected, 142 warnings
3723 #:test-flags
3724 ;; Ignore tests requiring network.
3725 #~(list "-m" "not network"
3726 "--deselect=tests/unit/test_network_sources.py::TestDMRMARC::test_marc_works"
3727 ;; Integration tests require additional setup.
3728 "tests/unit")
3729 #:phases
3730 #~(modify-phases %standard-phases
3731 (add-before 'sanity-check 'pre-check
3732 (lambda _
3733 (setenv "CHIRP_TESTIMG" "")
3734 (setenv "CHIRP_TESTS" "")
3735 (setenv "HOME" "/tmp"))))))
3736 (native-inputs
3737 (list python-ddt
3738 python-pytest
3739 python-pyyaml
3740 python-setuptools))
3741 (inputs
3742 (list python-lark
3743 python-pyserial
3744 python-requests
3745 python-suds
3746 python-wxpython
3747 python-yattag))
3748 (home-page "https://chirp.danplanet.com")
3749 (synopsis "Cross-radio programming tool")
3750 (description "Chirp is a cross-radio programming tool. It supports a
3751growing list of radios across several manufacturers and allows transferring of
3752memory contents between them.")
3753 (license license:gpl3+))))
3754
3755(define-public qdmr
3756 (package
3757 (name "qdmr")
3758 (version "0.13.1")
3759 (source (origin
3760 (method git-fetch)
3761 (uri (git-reference
3762 (url "https://github.com/hmatuschek/qdmr")
3763 (commit (string-append "v" version))))
3764 (file-name (git-file-name name version))
3765 (sha256
3766 (base32
3767 "18c76axcvjnqkx4xkgyifyj3sk08a8maddz6159gpbkhsn5xsgjp"))))
3768 (build-system qt-build-system)
3769 (arguments
3770 (list #:qtbase qtbase
3771 #:tests? #f ;no tests
3772 #:phases
3773 #~(modify-phases %standard-phases
3774 (add-after 'unpack 'patch-paths
3775 (lambda _
3776 (substitute* "lib/CMakeLists.txt"
3777 (("(DESTINATION \")/etc/udev/" _ directive)
3778 (string-append directive #$output "/lib/udev/"))))))))
3779 (inputs (list libusb qtbase qtpositioning qtserialport qtwayland yaml-cpp))
3780 (native-inputs (list qttools (librsvg-for-system)))
3781 (home-page "https://dm3mat.darc.de/qdmr/")
3782 (synopsis "GUI application and command line tool to program DMR radios")
3783 (description
3784 "qdmr is a graphical user interface (GUI) application that allows one to
3785program several types of DMR radios. It is comparable to the Customer
3786Programming Software (CPS) bundled with these radios but aims to be a more
3787universal tool.
3788
3789To install the qdmr udev rules, you must extend @code{udev-service-type} with this
3790package. E.g.: @code{(udev-rules-service 'qdmr qdmr)}.")
3791 (license license:gpl3+)))
3792
3793(define-public radio-tool
3794 (package
3795 (name "radio-tool")
3796 (version "0.3.0")
3797 (source
3798 (origin
3799 (method git-fetch)
3800 (uri (git-reference
3801 (url "https://github.com/v0l/radio_tool")
3802 (commit (string-append "v" version))))
3803 (file-name (git-file-name name version))
3804 (sha256
3805 (base32 "0bxpf2ck8m187vpmaflzsrlkx6byhrpskd3i5pa4df7klrkp9ncr"))))
3806 (build-system cmake-build-system)
3807 (arguments
3808 (list
3809 #:tests? #f)) ;No test suite
3810 (inputs (list libusb))
3811 (native-inputs (list pkg-config))
3812 (home-page "https://github.com/v0l/radio_tool")
3813 (synopsis "Radio Firmware tool")
3814 (description
3815 "@emph{radio_tool} is a utility for reading, writing, and manipulating
3816firmware/codeplugs on the following radios: TYT MD-2017, TYT MD-9600,
3817TYT MD-UV380, TYT MD-UV390, TYT MD-390, TYT MD-380, TYT MD-446, TYT MD-280,
3818Baofeng DM-1701, Baofeng DM1801, Baofeng RD-5R, Connect Systems CS800D,
3819Ailunce HD1, Yaesu FT-70DR, and the Radioddity GD-77.")
3820 (license license:gpl3+)))