gnu: r-opencyto: Update to 2.8.4.
[jackhill/guix/guix.git] / gnu / packages / radio.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2017, 2018, 2019, 2020, 2022 Arun Isaac <arunisaac@systemreboot.net>
3 ;;; Copyright © 2019, 2020 Christopher Howard <christopher@librehacker.com>
4 ;;; Copyright © 2019, 2020 Evan Straw <evan.straw99@gmail.com>
5 ;;; Copyright © 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
6 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
7 ;;; Copyright © 2020 Charlie Ritter <chewzerita@posteo.net>
8 ;;; Copyright © 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
9 ;;; Copyright © 2021 João Pedro Simas <jpsimas@gmail.com>
10 ;;; Copyright © 2021 Jack Hill <jackhill@jackhill.us>
11 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
12 ;;; Copyright © 2022 Sheng Yang <styang@fastmail.com>
13 ;;; Copyright © 2022 Greg Hogan <code@greghogan.com>
14 ;;; Copyright © 2022 Ryan Tolboom <ryan@using.tech>
15 ;;;
16 ;;; This file is part of GNU Guix.
17 ;;;
18 ;;; GNU Guix is free software; you can redistribute it and/or modify it
19 ;;; under the terms of the GNU General Public License as published by
20 ;;; the Free Software Foundation; either version 3 of the License, or (at
21 ;;; your option) any later version.
22 ;;;
23 ;;; GNU Guix is distributed in the hope that it will be useful, but
24 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
25 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 ;;; GNU General Public License for more details.
27 ;;;
28 ;;; You should have received a copy of the GNU General Public License
29 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
30
31 (define-module (gnu packages radio)
32 #:use-module ((guix licenses) #:prefix license:)
33 #:use-module (guix gexp)
34 #:use-module (guix packages)
35 #:use-module (guix download)
36 #:use-module (guix git-download)
37 #:use-module (guix utils)
38 #:use-module (gnu packages)
39 #:use-module (gnu packages admin)
40 #:use-module (gnu packages algebra)
41 #:use-module (gnu packages astronomy)
42 #:use-module (gnu packages audio)
43 #:use-module (gnu packages autotools)
44 #:use-module (gnu packages base)
45 #:use-module (gnu packages bash)
46 #:use-module (gnu packages boost)
47 #:use-module (gnu packages check)
48 #:use-module (gnu packages compression)
49 #:use-module (gnu packages curl)
50 #:use-module (gnu packages databases)
51 #:use-module (gnu packages documentation)
52 #:use-module (gnu packages engineering)
53 #:use-module (gnu packages fltk)
54 #:use-module (gnu packages gcc)
55 #:use-module (gnu packages gd)
56 #:use-module (gnu packages geo)
57 #:use-module (gnu packages gettext)
58 #:use-module (gnu packages ghostscript)
59 #:use-module (gnu packages gl)
60 #:use-module (gnu packages glib)
61 #:use-module (gnu packages gnome)
62 #:use-module (gnu packages golang)
63 #:use-module (gnu packages gps)
64 #:use-module (gnu packages graphviz)
65 #:use-module (gnu packages gstreamer)
66 #:use-module (gnu packages gtk)
67 #:use-module (gnu packages image)
68 #:use-module (gnu packages image-processing)
69 #:use-module (gnu packages javascript)
70 #:use-module (gnu packages libusb)
71 #:use-module (gnu packages linux)
72 #:use-module (gnu packages logging)
73 #:use-module (gnu packages lua)
74 #:use-module (gnu packages maths)
75 #:use-module (gnu packages mp3)
76 #:use-module (gnu packages multiprecision)
77 #:use-module (gnu packages ncurses)
78 #:use-module (gnu packages networking)
79 #:use-module (gnu packages perl)
80 #:use-module (gnu packages pkg-config)
81 #:use-module (gnu packages popt)
82 #:use-module (gnu packages pulseaudio)
83 #:use-module (gnu packages protobuf)
84 #:use-module (gnu packages pretty-print)
85 #:use-module (gnu packages python)
86 #:use-module (gnu packages python-science)
87 #:use-module (gnu packages python-web)
88 #:use-module (gnu packages python-xyz)
89 #:use-module (gnu packages qt)
90 #:use-module (gnu packages readline)
91 #:use-module (gnu packages ruby)
92 #:use-module (gnu packages sdl)
93 #:use-module (gnu packages serialization)
94 #:use-module (gnu packages sphinx)
95 #:use-module (gnu packages swig)
96 #:use-module (gnu packages tcl)
97 #:use-module (gnu packages tex)
98 #:use-module (gnu packages texinfo)
99 #:use-module (gnu packages tls)
100 #:use-module (gnu packages video)
101 #:use-module (gnu packages xiph)
102 #:use-module (gnu packages xml)
103 #:use-module (gnu packages xorg)
104 #:use-module (guix build-system cmake)
105 #:use-module (guix build-system glib-or-gtk)
106 #:use-module (guix build-system gnu)
107 #:use-module (guix build-system go)
108 #:use-module (guix build-system python)
109 #:use-module (guix build-system qt))
110
111 (define-public libfec
112 ;; Use commit to get compilation fixes that are not in a release yet.
113 (let ((commit "9750ca0a6d0a786b506e44692776b541f90daa91")
114 (revision "1"))
115 (package
116 (name "libfec")
117 (version (git-version "1.0" revision commit))
118 (source
119 (origin
120 (method git-fetch)
121 (uri (git-reference
122 (url "https://github.com/quiet/libfec")
123 (commit commit)))
124 (file-name (git-file-name name version))
125 (sha256
126 (base32 "0i6jhrdswr1wglyb9h39idpz5v9z13yhidvlbj34vxpyngrkhlvs"))))
127 (build-system cmake-build-system)
128 (arguments
129 `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
130 #:test-target "test_all"))
131 (home-page "https://github.com/quiet/libfec")
132 (synopsis "Forward error correction algorithms library")
133 (description
134 "This package provides a set of functions that implement several popular
135 @dfn{forward error correction} (FEC) algorithms and several low-level routines
136 useful in modems implemented with @dfn{digital signal processing} (DSP).")
137 (license license:lgpl2.1))))
138
139 (define-public libcorrect
140 (let ((commit "f5a28c74fba7a99736fe49d3a5243eca29517ae9")
141 (revision "1"))
142 (package
143 (name "libcorrect")
144 (version (git-version "0" revision commit))
145 (source
146 (origin
147 (method git-fetch)
148 (uri (git-reference
149 (url "https://github.com/quiet/libcorrect")
150 (commit commit)))
151 (file-name (git-file-name name version))
152 (sha256
153 (base32 "0qc9k8x51k2xfvp6cx8vdiyb3g6fl1y657z4m201aw2m06hs1hzg"))))
154 (build-system cmake-build-system)
155 (arguments
156 (list
157 #:test-target "check"
158 #:phases
159 #~(modify-phases %standard-phases
160 (add-after 'build 'build-libfec-compatibility-layer
161 (lambda _
162 (invoke "make" "shim")))
163 (add-after 'install 'delete-static-libraries
164 (lambda _
165 (delete-file (string-append #$output "/lib/libcorrect.a"))
166 (delete-file (string-append #$output "/lib/libfec.a")))))))
167 (home-page "https://github.com/quiet/libcorrect")
168 (synopsis "Forward error correction library")
169 (description
170 "This library provides convolutional and Reed-Solomon codes for forward
171 error correction. It also includes a compatibility layer so that it can be
172 used as a drop-in substitute for @code{libfec}.")
173 (license license:bsd-3))))
174
175 (define-public liquid-dsp
176 (package
177 (name "liquid-dsp")
178 (version "1.4.0")
179 (source
180 (origin (method git-fetch)
181 (uri (git-reference
182 (url "https://github.com/jgaeddert/liquid-dsp")
183 (commit (string-append "v" version))))
184 (file-name (git-file-name name version))
185 (sha256
186 (base32 "0mr86z37yycrqwbrmsiayi1vqrgpjq0pn1c3p1qrngipkw45jnn0"))))
187 (build-system gnu-build-system)
188 (native-inputs
189 (list autoconf automake))
190 (inputs
191 (list fftwf libfec))
192 (arguments
193 `(;; For reproducibility, disable use of SSE3, SSE4.1, etc.
194 #:configure-flags '("--enable-simdoverride")
195 #:phases
196 (modify-phases %standard-phases
197 (add-after 'install 'delete-static-library
198 (lambda* (#:key outputs #:allow-other-keys)
199 (delete-file (string-append (assoc-ref outputs "out")
200 "/lib/libliquid.a")))))))
201 (home-page "https://liquidsdr.org")
202 (synopsis "Signal processing library for software-defined radios")
203 (description
204 "Liquid DSP is a @dfn{digital signal processing} (DSP) library designed
205 specifically for software-defined radios on embedded platforms. The aim is to
206 provide a lightweight DSP library that does not rely on a myriad of external
207 dependencies or proprietary and otherwise cumbersome frameworks. All signal
208 processing elements are designed to be flexible, scalable, and dynamic,
209 including filters, filter design, oscillators, modems, synchronizers, complex
210 mathematical operations, and much more.")
211 (license license:expat)))
212
213 (define-public rtl-sdr
214 ;; No tagged release since 2018
215 (let ((commit "5e73f90f1d85d8db2e583f3dbf1cff052d71d59b")
216 (revision "1"))
217 (package
218 (name "rtl-sdr")
219 (version (git-version "0.6.0" revision commit))
220 (source
221 (origin
222 (method git-fetch)
223 (uri (git-reference
224 (url "https://git.osmocom.org/rtl-sdr/")
225 (commit commit)))
226 (file-name (git-file-name name version))
227 (sha256
228 (base32 "106fwzyr7cba952f3p3wm3hdqzm9zvm0v3gcz4aks2n7fnvrgrvn"))))
229 (build-system cmake-build-system)
230 (inputs
231 (list libusb))
232 (native-inputs
233 (list pkg-config))
234 (arguments
235 `(#:configure-flags '("-DDETACH_KERNEL_DRIVER=ON"
236 "-DINSTALL_UDEV_RULES=ON")
237 #:tests? #f ; No tests
238 #:phases
239 (modify-phases %standard-phases
240 (add-after 'unpack 'fix-paths
241 (lambda* (#:key outputs #:allow-other-keys)
242 (substitute* "CMakeLists.txt"
243 (("DESTINATION \"/etc/udev/")
244 (string-append "DESTINATION \""
245 (assoc-ref outputs "out")
246 "/lib/udev/")))))
247 (add-after 'fix-paths 'fix-udev-rules
248 (lambda _
249 (substitute* "rtl-sdr.rules"
250 ;; The plugdev group does not exist; use dialout as in
251 ;; the hackrf package.
252 (("GROUP=\"plugdev\"")
253 "GROUP=\"dialout\"")))))))
254 (home-page "https://osmocom.org/projects/sdr/wiki/rtl-sdr")
255 (synopsis "Software defined radio driver for Realtek RTL2832U")
256 (description "DVB-T dongles based on the Realtek RTL2832U can be used as a
257 cheap software defined radio, since the chip allows transferring the raw I/Q
258 samples to the host. @code{rtl-sdr} provides drivers for this purpose.
259
260 The default Linux driver managing DVB-T dongles as TV devices doesn't work for
261 SDR purposes and clashes with this package. Therefore you must prevent the
262 kernel from loading it automatically by adding the following line to your
263 system configuration:
264
265 @lisp
266 (kernel-arguments '(\"modprobe.blacklist=dvb_usb_rtl28xxu\"))
267 @end lisp
268
269 To install the rtl-sdr udev rules, you must extend 'udev-service-type' with
270 this package. E.g.: @code{(udev-rules-service 'rtl-sdr rtl-sdr)}")
271 (license license:gpl2+))))
272
273 (define-public airspyhf
274 (package
275 (name "airspyhf")
276 (version "1.6.8")
277 (source
278 (origin
279 (method git-fetch)
280 (uri (git-reference
281 (url "https://github.com/airspy/airspyhf")
282 (commit version)))
283 (file-name (git-file-name name version))
284 (sha256
285 (base32 "0n699i5a9fzzhf80fcjlqq6p2a013rzlwmwv4nmwfafy6c8cr924"))))
286 (build-system cmake-build-system)
287 (native-inputs
288 (list pkg-config))
289 (inputs
290 (list libusb))
291 (arguments
292 '(#:configure-flags '("-DINSTALL_UDEV_RULES=ON")
293 #:tests? #f ; No tests
294 #:phases
295 (modify-phases %standard-phases
296 (add-after 'unpack 'fix-paths
297 (lambda* (#:key outputs #:allow-other-keys)
298 (substitute* "tools/CMakeLists.txt"
299 (("DESTINATION \"/etc/udev/")
300 (string-append "DESTINATION \""
301 (assoc-ref outputs "out")
302 "/lib/udev/")))))
303 (add-after 'fix-paths 'fix-udev-rules
304 (lambda _
305 (substitute* "tools/52-airspyhf.rules"
306 ;; The plugdev group does not exist; use dialout as in
307 ;; the hackrf package.
308 (("GROUP=\"plugdev\"")
309 "GROUP=\"dialout\"")))))))
310 (home-page "https://github.com/airspy/airspyhf")
311 (synopsis "Software defined radio driver for Airspy HF+")
312 (description
313 "This package provides the driver and utilities for controlling the Airspy
314 HF+ Software Defined Radio (SDR) over USB.
315
316 To install the airspyhf udev rules, you must extend @code{udev-service-type}
317 with this package. E.g.: @code{(udev-rules-service 'airspyhf airspyhf)}")
318 (license license:bsd-3)))
319
320 (define-public soapysdr
321 (package
322 (name "soapysdr")
323 (version "0.8.1")
324 (source
325 (origin
326 (method git-fetch)
327 (uri (git-reference
328 (url "https://github.com/pothosware/SoapySDR")
329 (commit (string-append "soapy-sdr-" version))))
330 (file-name (git-file-name name version))
331 (sha256
332 (base32 "19f2x0pkxvf9figa0pl6xqlcz8fblvqb19mcnj632p0l8vk6qdv2"))))
333 (build-system cmake-build-system)
334 (native-inputs
335 (list python swig))
336 (native-search-paths
337 (list (search-path-specification
338 (variable "SOAPY_SDR_PLUGIN_PATH")
339 (files (list (string-append "lib/SoapySDR/modules"
340 (version-major+minor version)))))))
341 (home-page "https://github.com/pothosware/SoapySDR/wiki")
342 (synopsis "Vendor and platform neutral SDR support library")
343 (description
344 "SoapySDR is a library designed to support several kinds of software
345 defined radio hardware devices with a common API.")
346 (license license:boost1.0)))
347
348 (define-public soapyairspyhf
349 (package
350 (name "soapyairspyhf")
351 (version "0.2.0")
352 (source
353 (origin
354 (method git-fetch)
355 (uri (git-reference
356 (url "https://github.com/pothosware/SoapyAirspyHF")
357 (commit (string-append "soapy-airspyhf-" version))))
358 (file-name (git-file-name name version))
359 (sha256
360 (base32 "04krqinglgkjvx7klqik6yn8rb4mlpwzb6zvnmvm7szqci2agggz"))))
361 (build-system cmake-build-system)
362 (inputs
363 (list airspyhf soapysdr))
364 (arguments
365 `(#:tests? #f)) ; No test suite
366 (home-page "https://github.com/pothosware/SoapyAirspyHF/wiki")
367 (synopsis "SoapySDR Airspy HF+ module")
368 (description "This package provides Airspy HF+ devices support to the
369 SoapySDR library.")
370 (license license:expat)))
371
372 (define-public soapyaudio
373 ;; Use commit directly because fixes for recent hamlib are not in the latest
374 ;; release (0.1.1).
375 (let ((commit "79129c9bb98deca3294c05108fdc545579af6418")
376 (revision "0"))
377 (package
378 (name "soapyaudio")
379 (version (git-version "0.1.1" revision commit))
380 (source
381 (origin
382 (method git-fetch)
383 (uri (git-reference
384 (url "https://github.com/pothosware/SoapyAudio")
385 (commit commit)))
386 (file-name (git-file-name name version))
387 (sha256
388 (base32 "0mrcnd3k0j599x3k93dkpi5zgr0l7nblz8am9f0s6zs3dikfncvb"))
389 (modules '((guix build utils)))
390 (snippet
391 '(begin
392 ;; Delete bundled rtaudio.
393 (delete-file-recursively "RtAudio")))))
394 (build-system cmake-build-system)
395 (native-inputs
396 (list pkg-config))
397 (inputs
398 (list alsa-lib
399 hamlib
400 jack-1
401 libusb
402 pulseaudio
403 rtaudio
404 soapysdr))
405 (arguments
406 `(#:configure-flags '("-DUSE_HAMLIB=ON")
407 #:tests? #f ; No test suite
408 #:phases
409 (modify-phases %standard-phases
410 (add-after 'unpack 'fix-rtaudio-detection
411 ;; CMake only finds rtaudio if it looks for it before looking
412 ;; for hamlib, not sure why...
413 (lambda _
414 (substitute* "CMakeLists.txt"
415 (("option\\(USE_HAMLIB OFF" all)
416 (string-append "find_package(RtAudio)\n" all))))))))
417 (home-page "https://github.com/pothosware/SoapyAudio/wiki")
418 (synopsis "SoapySDR module for audio devices")
419 (description
420 "This package provides support for sound card devices to the SoapySDR
421 library. It also adds hamlib support, which provides basic gain and frequency
422 controls for certain tuners which may be paired with an audio device.")
423 (license license:expat))))
424
425 (define-public soapyhackrf
426 (package
427 (name "soapyhackrf")
428 (version "0.3.4")
429 (source
430 (origin
431 (method git-fetch)
432 (uri (git-reference
433 (url "https://github.com/pothosware/SoapyHackRF")
434 (commit (string-append "soapy-hackrf-" version))))
435 (file-name (git-file-name name version))
436 (sha256
437 (base32 "0wnnsm3c4ivwcbs1b68svbyds13aajws9mqk2xjc2pqgj0fdhcvz"))))
438 (build-system cmake-build-system)
439 (inputs
440 (list hackrf soapysdr))
441 (arguments
442 `(#:tests? #f)) ; No test suite
443 (home-page "https://github.com/pothosware/SoapyHackRF/wiki")
444 (synopsis "SoapySDR HackRF module")
445 (description
446 "This package provides HackRF devices support to the SoapySDR library.")
447 (license license:expat)))
448
449 (define-public soapyrtlsdr
450 (package
451 (name "soapyrtlsdr")
452 (version "0.3.2")
453 (source
454 (origin
455 (method git-fetch)
456 (uri (git-reference
457 (url "https://github.com/pothosware/SoapyRTLSDR")
458 (commit (string-append "soapy-rtl-sdr-" version))))
459 (file-name (git-file-name name version))
460 (sha256
461 (base32 "1dlnryj6k20pk7w7v4v13y099r7ikhvlzbgzgphmi5cxkdv0shrd"))))
462 (build-system cmake-build-system)
463 (inputs
464 (list rtl-sdr soapysdr))
465 (arguments
466 `(#:tests? #f)) ; No test suite
467 (home-page "https://github.com/pothosware/SoapyRTLSDR/wiki")
468 (synopsis "SoapySDR RTL-SDR module")
469 (description
470 "This package provides RTL-SDR devices support to the SoapySDR library.")
471 (license license:expat)))
472
473 (define-public python-simplesoapy
474 (package
475 (name "python-simplesoapy")
476 (version "1.5.1")
477 (source
478 (origin
479 (method url-fetch)
480 (uri (pypi-uri "SimpleSoapy" version))
481 (sha256
482 (base32 "0bh02m5zj82mp7sxpvwr24ylmrbp3p4r9q7psqcfnxl628w3b4hl"))))
483 (build-system python-build-system)
484 (propagated-inputs
485 (list python-numpy soapysdr))
486 (home-page "https://github.com/xmikos/simplesoapy")
487 (synopsis "Python wrapper for SoapySDR")
488 (description
489 "This package provide a simple pythonic wrapper for the SoapySDR
490 library.")
491 (license license:expat)))
492
493 (define-public soapy-power
494 (package
495 (name "soapy-power")
496 (version "1.6.1")
497 (source
498 (origin
499 (method url-fetch)
500 (uri (pypi-uri "soapy_power" version))
501 (sha256
502 (base32 "1rajmygcqvv5ph7yk65r4w581lfszrz0f48csvfmma1ami0lirdm"))))
503 (build-system python-build-system)
504 (inputs
505 (list python-numpy
506 python-scipy
507 python-simplesoapy
508 python-simplespectral))
509 (home-page "https://github.com/xmikos/soapy_power")
510 (synopsis "Obtain power spectrum from SDR devices")
511 (description "The @code{soapy_power} obtains the power spectrum from SDR
512 devices that are supported by the SoapySDR library.")
513 (license license:expat)))
514
515 (define-public qspectrumanalyzer
516 (package
517 (name "qspectrumanalyzer")
518 (version "2.1.0")
519 (source
520 (origin
521 (method url-fetch)
522 (uri (pypi-uri "QSpectrumAnalyzer" version))
523 (sha256
524 (base32 "1bhl8zp4z7v3595ailyivx9vb7y5si6kr22aylphb5pf60jxqhn0"))))
525 (build-system python-build-system)
526 (inputs
527 (list bash-minimal
528 python-pyqt
529 python-pyqtgraph
530 python-qt.py
531 python-simplespectral
532 python-simplesoapy
533 soapy-power))
534 (arguments
535 (list #:phases
536 #~(modify-phases %standard-phases
537 (add-after 'install 'wrap-path
538 ;; Add the location of the default backend to PATH.
539 (lambda* (#:key inputs #:allow-other-keys)
540 (wrap-program (string-append #$output
541 "/bin/qspectrumanalyzer")
542 `("PATH" ":" prefix
543 (,(string-append (assoc-ref inputs "soapy-power")
544 "/bin")))))))))
545 (home-page "https://github.com/xmikos/qspectrumanalyzer")
546 (synopsis "Spectrum analyzer for multiple SDR platforms")
547 (description
548 "This package provides a spectrum analyzer for multiple SDR platforms.
549 It is a GUI for @code{soapy_power}, @code{hackrf_sweep}, @code{rtl_power},
550 @code{rx_power} and other backends.")
551 (license license:gpl3)))
552
553 (define-public aptdec
554 ;; No release since 2013, use commit directly.
555 (let ((commit "51405971fd4e97714d1e987269e49c6edfe4e0da")
556 (revision "2"))
557 (package
558 (name "aptdec")
559 (version (git-version "1.7" revision commit))
560 (source
561 (origin
562 (method git-fetch)
563 (uri (git-reference
564 (url "https://github.com/Xerbo/aptdec")
565 (commit commit)))
566 (file-name (git-file-name name version))
567 (sha256
568 (base32 "0fzkhqnbkc2dd39jzb5m5mwcl31b0x3w0yykpx4s195llq4bdvis"))))
569 (build-system cmake-build-system)
570 (inputs
571 (list libpng libsndfile))
572 (arguments
573 `(#:tests? #f)) ; no tests
574 (home-page "https://github.com/Xerbo/aptdec")
575 (synopsis "NOAA Automatic Picture Transmission (APT) decoder")
576 (description "Aptdec decodes Automatic Picture Transmission (APT) images.
577 These are medium resolution images of the Earth transmitted by, among other
578 satellites, the POES NOAA weather satellite series. These transmissions are
579 on a frequency of 137 MHz. They can be received using an inexpensive antenna
580 and a dedicated receiver.")
581 (license license:gpl2+))))
582
583 (define-public redsea
584 (package
585 (name "redsea")
586 (version "0.20")
587 (source (origin
588 (method git-fetch)
589 (uri (git-reference
590 (url "https://github.com/windytan/redsea")
591 (commit (string-append "v" version))))
592 (file-name (git-file-name name version))
593 (sha256
594 (base32
595 "1bx4l87vz935cj5hapdh1dkjlmlfg73cgsjaf27314n7p4xkv50v"))))
596 (build-system gnu-build-system)
597 (arguments
598 `(#:phases
599 (modify-phases %standard-phases
600 ;; The configure.ac file does not explicitly link against libiconv
601 ;; except on Mac OS, causing the build to fail. This phase comments
602 ;; out the original AC_SUBST macro (located inside a conditional) and
603 ;; adds an explicit use of it underneath, so that libiconv is always
604 ;; linked against.
605 (add-after 'unpack 'patch-libiconv
606 (lambda _
607 (substitute* "configure.ac"
608 (("^ +AC_SUBST")
609 "# AC_SUBST")
610 (("esac")
611 "esac\nAC_SUBST([ICONV], [\"-liconv\"])"))
612 #t)))))
613 (inputs
614 (list libiconv libsndfile liquid-dsp))
615 (native-inputs
616 (list autoconf automake))
617 (home-page "https://github.com/windytan/redsea")
618 (synopsis "Lightweight RDS to JSON decoder")
619 (description "redsea is a lightweight command-line @dfn{FM Radio Data
620 System} (FM-RDS) decoder. Redsea can be used with any RTL-SDR USB radio stick
621 with the rtl_fm tool, or any other @dfn{software-defined radio} (SDR) via
622 csdr, for example. It can also decode raw ASCII bitstream, the hex format
623 used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
624 (license license:expat)))
625
626 (define-public gnuradio
627 (package
628 (name "gnuradio")
629 (version "3.10.3.0")
630 (source
631 (origin
632 (method git-fetch)
633 (uri (git-reference
634 (url "https://github.com/gnuradio/gnuradio")
635 (commit (string-append "v" version))))
636 (file-name (git-file-name name version))
637 (sha256
638 (base32 "0xdhb2blzajxpi0f2ch23hh6bzdwz5q7syi3bmiqzdjlj2yjfzd4"))))
639 (build-system cmake-build-system)
640 (native-inputs
641 (list doxygen
642 ghostscript
643 js-mathjax
644 orc
645 pkg-config
646 pybind11
647 python-cheetah
648 python-mako
649 python-pyzmq
650 python-scipy
651 python-sphinx
652 (texlive-updmap.cfg (list texlive-amsfonts
653 texlive-amsmath
654 ;; TODO: Add newunicodechar.
655 texlive-latex-graphics))
656 xorg-server-for-tests))
657 (inputs
658 (list alsa-lib
659 boost
660 cairo
661 codec2
662 cppzmq
663 fftwf
664 gmp
665 gsl
666 gsm
667 gtk+
668 jack-1
669 libsndfile
670 log4cpp
671 pango
672 portaudio
673 python
674 python-click
675 python-click-plugins
676 python-jsonschema
677 python-lxml
678 python-matplotlib
679 python-numpy
680 python-pycairo
681 python-pygobject
682 python-pyqt-without-qtwebkit
683 python-pyqtgraph
684 python-pyyaml
685 qtbase-5
686 qwt
687 sdl
688 soapysdr
689 spdlog
690 volk
691 zeromq))
692 (arguments
693 `(#:modules ((guix build cmake-build-system)
694 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
695 ((guix build python-build-system) #:prefix python:)
696 (guix build utils)
697 (ice-9 match))
698 #:imported-modules (,@%cmake-build-system-modules
699 (guix build glib-or-gtk-build-system)
700 (guix build python-build-system))
701 #:configure-flags
702 (list "-DENABLE_GRC=ON"
703 (string-append "-DMATHJAX2_ROOT="
704 (assoc-ref %build-inputs "js-mathjax")
705 "/share/javascript/mathjax"))
706 #:phases
707 (modify-phases %standard-phases
708 (add-after 'unpack 'make-source-writable
709 (lambda _
710 ;; The test_add and test_newmod open(sources, "w") for some reason.
711 (for-each make-file-writable
712 (find-files "." ".*"))))
713 (add-after 'unpack 'fix-paths
714 (lambda* (#:key inputs #:allow-other-keys)
715 (let ((qwt (assoc-ref inputs "qwt")))
716 (substitute* "cmake/Modules/FindQwt.cmake"
717 (("/usr/include")
718 (string-append qwt "/include"))
719 (("/usr/lib")
720 (string-append qwt "/lib"))
721 (("qwt6-\\$\\{QWT_QT_VERSION\\}")
722 "qwt")))
723 (substitute* "cmake/Modules/GrPython.cmake"
724 (("dist-packages")
725 "site-packages"))
726 (substitute* '("gr-vocoder/include/gnuradio/vocoder/codec2.h"
727 "gr-vocoder/include/gnuradio/vocoder/freedv_api.h")
728 (("<codec2/")
729 "<"))))
730 (add-before 'check 'set-test-environment
731 (lambda* (#:key inputs #:allow-other-keys)
732 (setenv "HOME" "/tmp")
733 (system "Xvfb :1 &")
734 (setenv "DISPLAY" ":1")))
735 (replace 'check
736 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
737 (invoke "ctest" "-j" (if parallel-tests?
738 (number->string (parallel-job-count))
739 "1")
740 "--output-on-failure"
741 ;;disable broken tests
742 "-E" (string-join
743 '(;; https://github.com/gnuradio/gnuradio/issues/3871
744 "qa_header_payload_demux"
745 ;; https://github.com/gnuradio/gnuradio/issues/4348
746 "qa_packet_headerparser_b"
747 ;; qa_rotator_cc sometimes fails, it looks like
748 ;; a floating point number precision issue.
749 "qa_rotator_cc")
750 "|"))))
751 (add-after 'install 'wrap-python
752 (assoc-ref python:%standard-phases 'wrap))
753 (add-after 'wrap-python 'wrap-glib-or-gtk
754 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
755 (add-after 'wrap-glib-or-gtk 'wrap-with-GI_TYPELIB_PATH
756 (lambda* (#:key inputs outputs #:allow-other-keys)
757 (let ((out (assoc-ref outputs "out"))
758 (paths (map (match-lambda
759 ((output . directory)
760 (let ((girepodir (string-append
761 directory
762 "/lib/girepository-1.0")))
763 (if (file-exists? girepodir)
764 girepodir
765 #f))))
766 inputs)))
767 (wrap-program (string-append out "/bin/gnuradio-companion")
768 `("GI_TYPELIB_PATH" ":" prefix ,(filter identity paths)))))))))
769 (native-search-paths
770 ;; Variables required to find third-party plugins at runtime.
771 (list (search-path-specification
772 (variable "GRC_BLOCKS_PATH")
773 (files '("share/gnuradio/grc/blocks")))
774 (search-path-specification
775 (variable "GUIX_PYTHONPATH")
776 (files (list (string-append "lib/python"
777 (version-major+minor
778 (package-version python))
779 "/site-packages"))))))
780 (synopsis "Toolkit for software-defined radios")
781 (description
782 "GNU Radio is a development toolkit that provides signal processing blocks
783 to implement software radios. It can be used with external RF hardware to
784 create software-defined radios, or without hardware in a simulation-like
785 environment.")
786 (home-page "https://www.gnuradio.org")
787 (license license:gpl3+)))
788
789 (define-public gr-osmosdr
790 ;; No tag for version supporting Gnuradio 3.9; use commit.
791 (let ((commit "a100eb024c0210b95e4738b6efd836d48225bd03")
792 (revision "0"))
793 (package
794 (name "gr-osmosdr")
795 (version (git-version "0.2.3" revision commit))
796 (source
797 (origin
798 (method git-fetch)
799 (uri (git-reference
800 (url "https://git.osmocom.org/gr-osmosdr")
801 (commit commit)))
802 (file-name (git-file-name name version))
803 (sha256
804 (base32 "1pk5gnyznfyy510lbqzg9ijcb1fnhmn547n24aiqyrxd6i6vv1ki"))))
805 (build-system cmake-build-system)
806 (native-inputs
807 (list doxygen pkg-config pybind11 python-mako python-six))
808 (inputs
809 (list airspyhf
810 boost
811 fftwf
812 gmp
813 gnuradio
814 hackrf
815 libsndfile
816 log4cpp
817 python
818 python-numpy
819 python-pyqt
820 rtl-sdr
821 soapysdr
822 spdlog
823 volk))
824 (arguments
825 `(#:modules ((guix build cmake-build-system)
826 ((guix build python-build-system) #:prefix python:)
827 (guix build utils))
828 #:imported-modules (,@%cmake-build-system-modules
829 (guix build python-build-system))
830 #:phases
831 (modify-phases %standard-phases
832 (add-after 'install 'wrap-python
833 (assoc-ref python:%standard-phases 'wrap)))))
834 (synopsis "GNU Radio block for interfacing with various radio hardware")
835 (description "This is a block for GNU Radio allowing to use a common API
836 to access different radio hardware.")
837 (home-page "https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR")
838 (license license:gpl3+))))
839 (deprecated-package "gnuradio-osmosdr" gr-osmosdr)
840
841 (define-public libosmo-dsp
842 (package
843 (name "libosmo-dsp")
844 (version "0.4.0")
845 (source
846 (origin
847 (method git-fetch)
848 (uri (git-reference
849 (url "https://git.osmocom.org/libosmo-dsp")
850 (commit version)))
851 (file-name (git-file-name name version))
852 (sha256
853 (base32 "00plihnpym1gkfpflah8il9463qxzm9kx2f07jyvbkszpj8viq5g"))))
854 (build-system gnu-build-system)
855 (native-inputs
856 `(("autoconf" ,autoconf)
857 ("automake" ,automake)
858 ("bash-minimal" ,bash-minimal)
859 ("doxygen" ,doxygen)
860 ("libtool" ,libtool)
861 ("pkg-config" ,pkg-config)
862 ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
863 texlive-amsmath
864 ;; TODO: Add newunicodechar.
865 texlive-latex-graphics)))))
866 (inputs
867 (list fftwf))
868 (arguments
869 `(#:phases
870 (modify-phases %standard-phases
871 (add-after 'unpack 'fix-paths
872 (lambda* (#:key inputs #:allow-other-keys)
873 (substitute* "git-version-gen"
874 (("/bin/sh")
875 (search-input-file inputs "/bin/bash"))))))))
876 (synopsis "DSP primitives for SDR")
877 (description
878 "This a C-language library for common DSP (Digital Signal Processing)
879 primitives for SDR (Software Defined Radio).")
880 (home-page "https://osmocom.org/projects/libosmo-dsp")
881 (license license:gpl2+)))
882
883 (define-public gr-iqbal
884 ;; No tag for version supporting Gnuradio 3.9; use commit.
885 (let ((commit "fbee239a6fb36dd2fb564f6e6a0d393c4bc844db")
886 (revision "0"))
887 (package
888 (name "gr-iqbal")
889 (version (git-version "0.38.2" revision commit))
890 (source
891 (origin
892 (method git-fetch)
893 (uri (git-reference
894 (url "https://git.osmocom.org/gr-iqbal")
895 (commit commit)))
896 (file-name (git-file-name name version))
897 (sha256
898 (base32 "12p193ngcs65nd3lynry119nhv40mikamqkw37wdln7lawx3nw7p"))))
899 (build-system cmake-build-system)
900 (native-inputs
901 (list doxygen
902 pkg-config
903 pybind11
904 python
905 python-numpy
906 python-six))
907 (inputs
908 (list boost
909 fftwf
910 gmp
911 gnuradio
912 libosmo-dsp
913 log4cpp
914 spdlog
915 volk))
916 (synopsis "GNU Radio block to correct IQ imbalance")
917 (description
918 "This is a GNU Radio block to correct IQ imbalance in quadrature
919 receivers. It's composed of two main block:
920 @itemize
921 @item Fix: Given a phase and amplitude error, it will correct a complex signal.
922 @item Optimize: Attempts to auto-detect the phase and amplitude error to feed
923 to the fix block above.
924 @end itemize")
925 (home-page "https://git.osmocom.org/gr-iqbal/")
926 (license license:gpl3+))))
927 (deprecated-package "gnuradio-iqbalance" gr-iqbal)
928
929 (define-public gr-satellites
930 (package
931 (name "gr-satellites")
932 (version "4.6.0")
933 (source
934 (origin
935 (method git-fetch)
936 (uri (git-reference
937 (url "https://github.com/daniestevez/gr-satellites")
938 (commit (string-append "v" version))))
939 (file-name (git-file-name name version))
940 (sha256
941 (base32 "0mcrxwb27n2v8v8vmcmmm1pbmy3c02a22mz2wnpdsfb2163qpchw"))))
942 (build-system cmake-build-system)
943 (native-inputs
944 (list pkg-config pybind11 python-six))
945 (inputs
946 (list boost
947 gmp
948 gnuradio
949 log4cpp
950 python
951 python-construct
952 python-numpy
953 python-pyaml
954 python-pyzmq
955 python-requests
956 spdlog
957 volk))
958 (arguments
959 `(#:modules ((guix build cmake-build-system)
960 ((guix build python-build-system) #:prefix python:)
961 (guix build utils))
962 #:imported-modules (,@%cmake-build-system-modules
963 (guix build python-build-system))
964 #:phases
965 (modify-phases %standard-phases
966 (add-before 'check 'set-test-environment
967 (lambda _
968 (setenv "HOME" "/tmp")))
969 (add-after 'install 'wrap-python
970 (assoc-ref python:%standard-phases 'wrap)))))
971 (synopsis "GNU Radio decoders for several Amateur satellites")
972 (description
973 "@code{gr-satellites} is a GNU Radio out-of-tree module encompassing
974 a collection of telemetry decoders that supports many different Amateur
975 satellites.")
976 (home-page "https://github.com/daniestevez/gr-satellites")
977 (license (list license:asl2.0
978 license:gpl3+
979 license:lgpl2.1))))
980
981 (define-public gqrx
982 (package
983 (name "gqrx")
984 (version "2.15.8")
985 (source
986 (origin
987 (method git-fetch)
988 (uri (git-reference
989 (url "https://github.com/gqrx-sdr/gqrx")
990 (commit (string-append "v" version))))
991 (file-name (git-file-name name version))
992 (sha256
993 (base32 "1ph7fnjxfv7rfdlh17c8j4djvkfqjnalmcvnafhnq7agjy428727"))))
994 (build-system qt-build-system)
995 (native-inputs
996 (list pkg-config))
997 (inputs
998 (list alsa-lib
999 boost
1000 fftwf
1001 gmp
1002 gnuradio
1003 gr-iqbal
1004 gr-osmosdr
1005 jack-1
1006 libsndfile
1007 log4cpp
1008 portaudio
1009 pulseaudio
1010 qtbase-5
1011 qtsvg-5
1012 spdlog
1013 volk))
1014 (arguments
1015 `(#:tests? #f)) ; no tests
1016 (synopsis "Software defined radio receiver")
1017 (description "Gqrx is a software defined radio (SDR) receiver implemented
1018 using GNU Radio and the Qt GUI toolkit.")
1019 (home-page "https://gqrx.dk/")
1020 (license license:gpl3+)))
1021
1022 (define-public fldigi
1023 (package
1024 (name "fldigi")
1025 (version "4.1.22")
1026 (source
1027 (origin
1028 (method git-fetch)
1029 (uri (git-reference
1030 (url "https://git.code.sf.net/p/fldigi/fldigi")
1031 (commit (string-append "v" version))))
1032 (file-name (git-file-name name version))
1033 (sha256
1034 (base32 "1n1ljqsqar9s8yh8hn9yc1clabkhv4jidym3ibg25yb5svckscli"))))
1035 (build-system gnu-build-system)
1036 (native-inputs
1037 (list autoconf automake gettext-minimal pkg-config))
1038 (inputs
1039 (list alsa-lib
1040 fltk
1041 eudev
1042 hamlib
1043 libpng
1044 libsamplerate
1045 libusb
1046 libx11
1047 libxext
1048 libxfixes
1049 libxft
1050 portaudio
1051 pulseaudio))
1052 (synopsis "Software modem for amateur radio use")
1053 (description
1054 "Fldigi is a software modem for amateur radio use. It is a sound card
1055 based program that is used for both transmitting and receiving data by
1056 connecting the microphone and headphone connections of a computer to some radio
1057 hardware.")
1058 (home-page "http://www.w1hkj.com/")
1059 (license license:gpl3+)))
1060
1061 (define-public flrig
1062 (package
1063 (name "flrig")
1064 (version "1.4.05")
1065 (source
1066 (origin
1067 (method git-fetch)
1068 (uri (git-reference
1069 (url "https://git.code.sf.net/p/fldigi/flrig")
1070 (commit (string-append "v" version))))
1071 (file-name (git-file-name name version))
1072 (sha256
1073 (base32 "0pgkfzxqr2ybpbnf1y9nsr25k0zimdwr98mpvd7nazrv5l0y8kci"))))
1074 (build-system gnu-build-system)
1075 (native-inputs
1076 (list autoconf automake pkg-config))
1077 (inputs
1078 (list eudev fltk libx11 libxext libxfixes libxft))
1079 (synopsis "Radio transceiver control program")
1080 (description
1081 "Flrig is a transceiver control program for amateur radio use.
1082 It provides computer aided control of various radios using a serial
1083 or USB connection.")
1084 (home-page "http://www.w1hkj.com/")
1085 (license license:gpl3+)))
1086
1087 (define-public flamp
1088 (package
1089 (name "flamp")
1090 (version "2.2.07")
1091 (source
1092 (origin
1093 (method git-fetch)
1094 (uri (git-reference
1095 (url "https://git.code.sf.net/p/fldigi/flamp")
1096 (commit (string-append "v" version))))
1097 (file-name (git-file-name name version))
1098 (sha256
1099 (base32 "0rygd5w04nspxdj8qj81gpb3mgijvlmii74s1f4mihqs5kb8nwh6"))))
1100 (build-system gnu-build-system)
1101 (native-inputs
1102 (list autoconf automake pkg-config))
1103 (inputs
1104 (list fltk libx11 libxext libxfixes libxft))
1105 (synopsis "Tool for AMP file transfer")
1106 (description
1107 "FLAMP is a program for transferring files by radio waves using AMP
1108 (Amateur Multicast Protocol).")
1109 (home-page "http://www.w1hkj.com/")
1110 (license license:gpl3+)))
1111
1112 (define-public flmsg
1113 (package
1114 (name "flmsg")
1115 (version "4.0.19")
1116 (source
1117 (origin
1118 (method git-fetch)
1119 (uri (git-reference
1120 (url "https://git.code.sf.net/p/fldigi/flmsg")
1121 (commit (string-append "v" version))))
1122 (file-name (git-file-name name version))
1123 (sha256
1124 (base32 "157s6mvky9h094hkncm47964qh0bnwg0m2rw3wx0qj1mh5isxv4j"))))
1125 (build-system gnu-build-system)
1126 (native-inputs
1127 (list autoconf automake pkg-config))
1128 (inputs
1129 (list fltk libx11 libxext libxfixes libxft))
1130 (synopsis "NBEMS messaging system")
1131 (description
1132 "FLMSG is a Narrow Band Emergency Messaging Software (NBEMS).
1133 It can be used to manage, send and receive the forms that are used as basis
1134 for emergency communications data transfers (like ICS213 forms).")
1135 (home-page "http://www.w1hkj.com/")
1136 (license license:gpl3+)))
1137
1138 (define-public flwrap
1139 (package
1140 (name "flwrap")
1141 (version "1.3.5")
1142 (source
1143 (origin
1144 (method git-fetch)
1145 (uri (git-reference
1146 (url "https://git.code.sf.net/p/fldigi/flwrap")
1147 (commit (string-append "v" version))))
1148 (file-name (git-file-name name version))
1149 (sha256
1150 (base32 "0xkhr82smfr7wpb9xl05wf7bz3vi2mr4xkcr2s8v6mblhgsdhqwg"))))
1151 (build-system gnu-build-system)
1152 (native-inputs
1153 (list autoconf automake pkg-config))
1154 (inputs
1155 (list fltk libx11 libxext libxfixes libxft))
1156 (synopsis "File encapsulation program")
1157 (description
1158 "Flwrap is a software utility for amateur radio use. Its purpose is to
1159 encapsulate both text and binary files in a way that allows them to be
1160 transmitted over any of several digital modes and verified at the receipt end
1161 for correctness.")
1162 (home-page "http://www.w1hkj.com/")
1163 (license license:gpl3+)))
1164
1165 (define-public hackrf
1166 (package
1167 (name "hackrf")
1168 (version "2021.03.1")
1169 (source
1170 (origin
1171 (method git-fetch)
1172 (uri (git-reference
1173 (url "https://github.com/mossmann/hackrf")
1174 (commit (string-append "v" version))))
1175 (file-name (git-file-name name version))
1176 (sha256
1177 (base32 "12fkgimjy5ia291c1rn4y59pn9r5wdvz5x9z5xc8zr1xr96iyhfs"))))
1178 (build-system cmake-build-system)
1179 (arguments
1180 '(#:configure-flags
1181 (list "-DUDEV_RULES_GROUP=dialout"
1182 (string-append "-DUDEV_RULES_PATH="
1183 (assoc-ref %outputs "out")
1184 "/lib/udev/rules.d"))
1185 #:phases
1186 (modify-phases %standard-phases
1187 (add-before 'configure 'enter-source-directory
1188 (lambda _
1189 (chdir "host")
1190 #t))
1191 (add-after 'install 'delete-static-library
1192 (lambda* (#:key outputs #:allow-other-keys)
1193 (delete-file (string-append (assoc-ref outputs "out")
1194 "/lib/libhackrf.a"))
1195 #t))
1196 (add-before 'install-license-files 'leave-source-directory
1197 (lambda _
1198 (chdir "..")
1199 #t)))
1200 #:tests? #f)) ; no test suite
1201 (native-inputs
1202 (list pkg-config))
1203 (inputs
1204 (list fftw fftwf libusb))
1205 (home-page "https://greatscottgadgets.com/hackrf/")
1206 (synopsis "User-space library and utilities for HackRF SDR")
1207 (description
1208 "Command line utilities and a C library for controlling the HackRF
1209 Software Defined Radio (SDR) over USB. Installing this package installs the
1210 userspace hackrf utilities and C library. To install the hackrf udev rules,
1211 you must extend 'udev-service-type' with this package. E.g.:
1212 @code{(udev-rules-service 'hackrf hackrf #:groups '(\"dialout\"))}.")
1213 (license license:gpl2)))
1214
1215 (define-public hamlib
1216 (package
1217 (name "hamlib")
1218 (version "4.4")
1219 (source
1220 (origin
1221 (method url-fetch)
1222 (uri (string-append
1223 "https://github.com/Hamlib/Hamlib/releases/download/"
1224 version "/hamlib-" version ".tar.gz"))
1225 (sha256
1226 (base32 "11r4i8gmxnb6ixpk4ns38c9xwj3qibp2v3pkhy2z0lhz0xxi1w4b"))))
1227 (build-system gnu-build-system)
1228 (native-inputs
1229 (list doxygen
1230 lua
1231 pkg-config
1232 python-wrapper
1233 swig
1234 tcl))
1235 (inputs
1236 (list gd libusb libxml2 readline))
1237 (arguments
1238 `(#:configure-flags '("--disable-static"
1239 "--with-lua-binding"
1240 "--with-python-binding"
1241 "--with-tcl-binding"
1242 "--with-xml-support")))
1243 (synopsis "Tools and API to control radios")
1244 (description
1245 "The Ham Radio Control Library (Hamlib) is a project to provide programs
1246 with a consistent Application Programming Interface (API) for controlling the
1247 myriad of radios and rotators available to amateur radio and communications
1248 users.")
1249 (home-page "https://hamlib.github.io/")
1250 (license (list license:gpl2+ license:lgpl2.1+))))
1251
1252 (define wsjtx-hamlib
1253 ;; Fork of hamlib with custom patches used by wsjtx.
1254 (package
1255 (inherit hamlib)
1256 (name "wsjtx-hamlib")
1257 (version "2.5.2")
1258 (source
1259 (origin
1260 (method git-fetch)
1261 (uri (git-reference
1262 (url "https://git.code.sf.net/u/bsomervi/hamlib.git")
1263 (commit (string-append "wsjtx-" version))))
1264 (file-name (git-file-name name version))
1265 (sha256
1266 (base32 "1bgf7bz2280739a7ip7lvpns0i7x6svryxfmsp32cff2dr146lz3"))))
1267 (native-inputs
1268 `(("autoconf" ,autoconf)
1269 ("automake" ,automake)
1270 ("libtool" ,libtool)
1271 ("texinfo" ,texinfo)
1272 ,@(package-native-inputs hamlib)))
1273 (arguments
1274 `(#:configure-flags '("--disable-static"
1275 "--with-lua-binding"
1276 "--with-python-binding"
1277 "--with-tcl-binding"
1278 "--with-xml-support")))))
1279
1280 (define-public jtdx-hamlib
1281 ;; Fork of hamlib with custom patches used by jtdx.
1282 (package
1283 (inherit hamlib)
1284 (name "jtdx-hamlib")
1285 (version "2.2.158")
1286 (source
1287 (origin
1288 (method git-fetch)
1289 (uri (git-reference
1290 (url "https://github.com/jtdx-project/jtdxhamlib.git")
1291 (commit "158")))
1292 (file-name (git-file-name name version))
1293 (sha256
1294 (base32 "0m9i5k1n6j0nvmsqcy12x2ngqzjvxxlc3jg29igh93hb7lprlkjv"))))
1295 (native-inputs
1296 (modify-inputs (package-native-inputs hamlib)
1297 (prepend autoconf automake libtool texinfo)))
1298 (arguments
1299 `(#:configure-flags '("--disable-shared"
1300 "--enable-static"
1301 "--without-cxx-binding"
1302 "--disable-winradio")))))
1303
1304 (define-public tlf
1305 (package
1306 (name "tlf")
1307 (version "1.4.1")
1308 (source
1309 (origin
1310 (method git-fetch)
1311 (uri (git-reference
1312 (url "https://github.com/tlf/tlf")
1313 (commit (string-append "tlf-" version))))
1314 (file-name (git-file-name name version))
1315 (sha256
1316 (base32 "1xpgs4k27pjd9mianfknknp6mf34365bcp96wrv5xh4dhph573rj"))
1317 (patches
1318 (search-patches "tlf-support-hamlib-4.2+.patch"))))
1319 (build-system gnu-build-system)
1320 (arguments
1321 '(#:configure-flags
1322 (list "--enable-fldigi-xmlrpc")))
1323 (native-inputs
1324 (list autoconf automake perl pkg-config))
1325 (inputs
1326 (list cmocka
1327 glib
1328 hamlib
1329 libusb ;`Requires.private: libusb-1.0` in hamlib pkg-config
1330 ncurses
1331 xmlrpc-c))
1332 (home-page "https://tlf.github.io/")
1333 (synopsis "Amateur radio contest logging for the terminal")
1334 (description "TLF is a @acronym{Text User Interface, TUI} amateur radio
1335 contest logging program. It integrates with radios supported by hamlib and
1336 other ham radio programs like fldigi. Many contests are supported including:
1337
1338 @itemize
1339 @item CQWW (SO, M/S and M/M)
1340 @item WPX (SO, M/S and M/M)
1341 @item ARRL Sweepstakes (SO, M/S )
1342 @item EU SPRINT
1343 @item EUHFC
1344 @item ARRL-DX (both sides)
1345 @item ARRL-FD
1346 @item ARRL 10m
1347 @item ARRL 160m
1348 @item Region1 field day
1349 @item SP DX contest
1350 @item PACC (both sides)
1351 @item NRAU - scandinavian
1352 @item Wysiwyg mults mode (per band or per contest)
1353 @item WAEDX
1354 @end itemize
1355
1356 It also supports connecting to DX clusters, log synchronization with other TLF
1357 instances over the network, and general QSO and DXpedition logging.")
1358 (license license:gpl2+)))
1359
1360 (define-public wsjtx
1361 (package
1362 (name "wsjtx")
1363 (version "2.5.4")
1364 (source
1365 (origin
1366 (method git-fetch)
1367 (uri (git-reference
1368 (url "https://git.code.sf.net/p/wsjt/wsjtx.git")
1369 (commit (string-append "wsjtx-" version))))
1370 (file-name (git-file-name name version))
1371 (sha256
1372 (base32 "0nciw9smrfcsirlwyny5r9h7sk2zvm40m56y1hxpgpmbnh6mqikh"))))
1373 (build-system qt-build-system)
1374 (native-inputs
1375 (list asciidoc gfortran pkg-config qttools-5 ruby-asciidoctor))
1376 (inputs
1377 `(("boost" ,boost)
1378 ("fftw" ,fftw)
1379 ("fftwf" ,fftwf)
1380 ("hamlib" ,wsjtx-hamlib)
1381 ("libusb" ,libusb)
1382 ("qtbase" ,qtbase-5)
1383 ("qtmultimedia-5" ,qtmultimedia-5)
1384 ("qtserialport" ,qtserialport)))
1385 (arguments
1386 `(#:tests? #f)) ; No test suite
1387 (synopsis "Weak-signal ham radio communication program")
1388 (description
1389 "WSJT-X implements communication protocols or modes called FT4, FT8,
1390 JT4, JT9, JT65, QRA64, ISCAT, MSK144, and WSPR, as well as one called Echo for
1391 detecting and measuring your own radio signals reflected from the Moon. These
1392 modes were all designed for making reliable, confirmed QSOs under extreme
1393 weak-signal conditions.")
1394 (home-page "https://www.physics.princeton.edu/pulsar/k1jt/wsjtx.html")
1395 (license license:gpl3)))
1396
1397 (define-public jtdx
1398 (package
1399 (name "jtdx")
1400 (version "2.2.158")
1401 (source
1402 (origin
1403 (method git-fetch)
1404 (uri (git-reference
1405 (url "https://github.com/jtdx-project/jtdx")
1406 (commit "158")))
1407 (file-name (git-file-name name version))
1408 (sha256
1409 (base32 "1lw9q7ggh2jlasipl3v5pkbabysjr6baw15lnmg664ah3fwdrvnx"))))
1410 (build-system qt-build-system)
1411 (native-inputs
1412 (list asciidoc gfortran pkg-config qttools-5 ruby-asciidoctor))
1413 (inputs
1414 (list
1415 boost
1416 fftw
1417 fftwf
1418 jtdx-hamlib
1419 libusb
1420 qtbase-5
1421 qtwebsockets-5
1422 qtmultimedia-5
1423 qtserialport))
1424 (arguments
1425 `(#:tests? #f)) ; No test suite
1426 (synopsis "Weak-signal ham radio communication program, forked from WSJTX")
1427 (description
1428 "JTDX means \"JT,T10 and FT8 and FT4 modes for DXing\", it is being
1429 developed with main focus on the sensitivity and decoding efficiency, both, in
1430 overcrowded and half empty HF band conditions.
1431
1432 It is modified WSJT-X software forked from WSJT-X r6462. JTDX supports JT9,
1433 JT65, T10, FT8 and FT4 © digital modes for HF amateur radio communication,
1434 focused on DXing and being shaped by community of DXers.JTDX")
1435 (home-page "https://www.jtdx.tech/en/")
1436 (license license:gpl3)))
1437
1438 (define-public js8call
1439 (package
1440 (inherit wsjtx)
1441 (name "js8call")
1442 (version "2.2.0")
1443 (source
1444 (origin
1445 (method url-fetch)
1446 (uri (string-append "http://files.js8call.com/" version
1447 "/js8call-" version ".tgz"))
1448 (sha256
1449 (base32 "149sjwc4zg6ckgq26af93p4fxappa4k9dh7rdy67g8ajfjad4cd8"))
1450 (modules '((guix build utils)))
1451 (snippet
1452 '(begin
1453 ;; Delete bundled boost to use the shared one.
1454 (delete-file-recursively "boost")
1455 #t))))
1456 (build-system qt-build-system)
1457 (native-inputs
1458 (list asciidoc gfortran pkg-config qttools-5 ruby-asciidoctor))
1459 (inputs
1460 `(("boost" ,boost)
1461 ("fftw" ,fftw)
1462 ("fftwf" ,fftwf)
1463 ("hamlib" ,wsjtx-hamlib)
1464 ("libusb" ,libusb)
1465 ("qtbase" ,qtbase-5)
1466 ("qtmultimedia-5" ,qtmultimedia-5)
1467 ("qtserialport" ,qtserialport)))
1468 (arguments
1469 `(#:tests? #f ; No test suite
1470 #:phases
1471 (modify-phases %standard-phases
1472 (add-after 'unpack 'fix-paths
1473 (lambda* (#:key outputs #:allow-other-keys)
1474 (substitute* "CMakeLists.txt"
1475 (("DESTINATION /usr/share")
1476 (string-append "DESTINATION "
1477 (assoc-ref outputs "out")
1478 "/share")))))
1479 (add-after 'unpack 'fix-hamlib
1480 (lambda _
1481 (substitute* "CMake/Modules/Findhamlib.cmake"
1482 (("set \\(ENV\\{PKG_CONFIG_PATH\\}.*\\)")
1483 "set (__pc_path $ENV{PKG_CONFIG_PATH})
1484 list (APPEND __pc_path \"${__hamlib_pc_path}\")
1485 set (ENV{PKG_CONFIG_PATH} \"${__pc_path}\")"))
1486 (substitute* "HamlibTransceiver.hpp"
1487 (("#ifdef JS8_USE_LEGACY_HAMLIB")
1488 "#if 1")))))))
1489 (synopsis "Weak-signal ham radio communication program")
1490 (description
1491 "JS8Call is a software using the JS8 digital mode (a derivative of the FT8
1492 mode) providing weak signal keyboard to keyboard messaging to amateur radio
1493 operators.")
1494 (home-page "http://js8call.com/")
1495 (license license:gpl3)))
1496
1497 (define-public xnec2c
1498 (package
1499 (name "xnec2c")
1500 (version "4.4.11")
1501 (source
1502 (origin
1503 (method url-fetch)
1504 (uri (string-append "https://www.xnec2c.org/releases/xnec2c-v"
1505 version ".tar.gz"))
1506 (sha256
1507 (base32 "13ybnb1v1y9wjmj49s8ir2rpfsz7h8r9jwv0qd4if9wsn44jg29k"))))
1508 (build-system gnu-build-system)
1509 (native-inputs
1510 (list autoconf
1511 automake
1512 gettext-minimal
1513 `(,glib "bin")
1514 libtool
1515 pkg-config))
1516 (inputs
1517 (list gtk+ openblas))
1518 (arguments
1519 `(#:configure-flags
1520 ,#~(list (string-append "--with-openblas-incdir="
1521 #$(this-package-input "openblas")
1522 "/include"))
1523 #:phases
1524 (modify-phases %standard-phases
1525 (add-after 'unpack 'fix-paths
1526 (lambda* (#:key inputs #:allow-other-keys)
1527 (substitute* "src/Makefile.am"
1528 (("\\$\\(GLIB_COMPILE_RESOURCES\\)")
1529 (search-input-file inputs "bin/glib-compile-resources")))
1530 (substitute* "src/mathlib.c"
1531 (("libopenblas\\.so")
1532 (search-input-file inputs "lib/libopenblas.so"))))))))
1533 (synopsis "Antenna modeling software")
1534 (description
1535 "Xnec2c is a GTK3-based graphical version of nec2c, a translation to the
1536 C language of NEC2, the FORTRAN Numerical Electromagnetics Code commonly used
1537 for antenna simulation and analysis. It can be used to define the geometry of
1538 an antenna, and then plot the radiation pattern or frequency-related data like
1539 gain and standing wave ratio.")
1540 (home-page "https://www.xnec2c.org/")
1541 (license license:gpl3+)))
1542
1543 (define-public dump1090
1544 (package
1545 (name "dump1090")
1546 (version "7.1")
1547 (source
1548 (origin
1549 (method git-fetch)
1550 (uri (git-reference
1551 (url "https://github.com/flightaware/dump1090")
1552 (commit (string-append "v" version))))
1553 (file-name (git-file-name name version))
1554 (sha256
1555 (base32 "1702qv5g27sgpqf98sj2qbg36sqzc7r3kssslzzgljqkr5jgrw6m"))))
1556 (build-system gnu-build-system)
1557 (native-inputs
1558 (list pkg-config))
1559 (inputs
1560 (list hackrf libusb ncurses rtl-sdr))
1561 (arguments
1562 `(#:test-target "test"
1563 #:make-flags
1564 (list (string-append "CC=" ,(cc-for-target))
1565 "BLADERF=no")
1566 #:phases
1567 (modify-phases %standard-phases
1568 (delete 'configure)
1569 (replace 'install
1570 (lambda* (#:key outputs #:allow-other-keys)
1571 (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
1572 (install-file "dump1090" bin)
1573 (install-file "view1090" bin)))))))
1574 (synopsis "Mode S decoder for rtl-sdr devices")
1575 (description
1576 "Dump1090 is a Mode S decoder specifically designed for rtl-sdr devices.
1577 It can be used to decode the ADS-B signals that planes emit to indicate
1578 their position, altitude, speed, etc.")
1579 (home-page "https://github.com/flightaware/dump1090")
1580 (license license:gpl2+)))
1581
1582 (define-public rtl-433
1583 (package
1584 (name "rtl-433")
1585 (version "21.12")
1586 (source
1587 (origin
1588 (method git-fetch)
1589 (uri (git-reference
1590 (url "https://github.com/merbanan/rtl_433")
1591 (commit version)))
1592 (file-name (git-file-name name version))
1593 (sha256
1594 (base32 "0ygxs35zvgnamhqdwk1akcwagcirzpi4wndzgf9d23faiv4cm01a"))))
1595 (build-system cmake-build-system)
1596 (native-inputs
1597 (list pkg-config))
1598 (inputs
1599 (list libusb openssl rtl-sdr soapysdr))
1600 (synopsis "Decoder for radio transmissions in ISM bands")
1601 (description
1602 "This is a generic data receiver, mainly for decoding radio transmissions
1603 from devices on the 433 MHz, 868 MHz, 315 MHz, 345 MHz and 915 MHz ISM bands.")
1604 (home-page "https://github.com/merbanan/rtl_433")
1605 (license license:gpl2+)))
1606
1607 (define-public multimon-ng
1608 (package
1609 (name "multimon-ng")
1610 (version "1.1.9")
1611 (source
1612 (origin
1613 (method git-fetch)
1614 (uri (git-reference
1615 (url "https://github.com/EliasOenal/multimon-ng")
1616 (commit version)))
1617 (file-name (git-file-name name version))
1618 (sha256
1619 (base32 "01716cfhxfzsab9zjply9giaa4nn4b7rm3p3vizrwi7n253yiwm2"))))
1620 (build-system cmake-build-system)
1621 (inputs
1622 (list libx11 pulseaudio))
1623 (arguments
1624 '(#:tests? #f)) ; no test suite
1625 (home-page "https://github.com/EliasOenal/multimon-ng")
1626 (synopsis "Decoder for digital radio transmission modes")
1627 (description "Multimon-ng can decode several digital radio transmission
1628 modes:
1629 @itemize
1630 @item POCSAG512, POCSAG1200, POCSAG2400
1631 @item FLEX
1632 @item EAS
1633 @item UFSK1200, CLIPFSK, AFSK1200, AFSK2400, AFSK2400_2, AFSK2400_3
1634 @item HAPN4800
1635 @item FSK9600
1636 @item DTMF
1637 @item ZVEI1, ZVEI2, ZVEI3, DZVEI, PZVEI
1638 @item EEA, EIA, CCIR
1639 @item MORSE CW
1640 @item X10
1641 @end itemize")
1642 (license license:gpl2+)))
1643
1644 (define-public nanovna-saver
1645 (package
1646 (name "nanovna-saver")
1647 (version "0.5.3")
1648 (source
1649 (origin
1650 (method git-fetch)
1651 (uri (git-reference
1652 (url "https://github.com/NanoVNA-Saver/nanovna-saver")
1653 (commit (string-append "v" version))))
1654 (file-name (git-file-name name version))
1655 (sha256
1656 (base32 "1h0wzva8j7fqnpf0qy42bw9rdclgq3jdq902ajvd9v5iqcqs78n0"))))
1657 (build-system python-build-system)
1658 (native-inputs
1659 (list python-cython))
1660 (inputs
1661 (list python-numpy python-pyqt python-pyserial python-scipy))
1662 (arguments
1663 '(#:tests? #f))
1664 (home-page "https://github.com/NanoVNA-Saver/nanovna-saver")
1665 (synopsis "GUI for NanoVNA devices")
1666 (description
1667 "NanoVNA-Saver is a tool for reading, displaying and saving data from the
1668 NanoVNA vector network analyzers.")
1669 (license license:gpl3+)))
1670
1671 (define-public qsstv
1672 (package
1673 (name "qsstv")
1674 (version "9.5.8")
1675 (source
1676 (origin
1677 (method url-fetch)
1678 (uri (string-append "http://users.telenet.be/on4qz/qsstv/downloads/"
1679 "qsstv_" version ".tar.gz"))
1680 (sha256
1681 (base32 "0s3sivc0xan6amibdiwfnknrl3248wzgy98w6gyxikl0qsjpygy0"))))
1682 (build-system qt-build-system)
1683 (native-inputs
1684 (list pkg-config))
1685 (inputs
1686 (list alsa-lib
1687 fftw
1688 fftwf
1689 hamlib
1690 openjpeg
1691 pulseaudio
1692 qtbase-5
1693 v4l-utils))
1694 (arguments
1695 `(#:tests? #f ; No test suite.
1696 #:phases
1697 (modify-phases %standard-phases
1698 (replace 'configure
1699 (lambda* (#:key outputs #:allow-other-keys)
1700 (invoke "qmake"
1701 (string-append "PREFIX=" (assoc-ref outputs "out"))))))))
1702 (home-page "http://users.telenet.be/on4qz/qsstv/")
1703 (synopsis "Program for receiving and transmitting SSTV and HAMDRM")
1704 (description
1705 "QSSTV is a program for receiving and transmitting SSTV and HAMDRM
1706 (sometimes called DSSTV). It is compatible with most of MMSSTV and EasyPal.")
1707 (license (list license:gpl2+
1708 license:qwt1.0))))
1709
1710 (define-public direwolf
1711 (package
1712 (name "direwolf")
1713 (version "1.6")
1714 (source
1715 (origin
1716 (method git-fetch)
1717 (uri (git-reference
1718 (url "https://github.com/wb2osz/direwolf")
1719 (commit version)))
1720 (file-name (git-file-name name version))
1721 (sha256
1722 (base32 "0xmz64m02knbrpasfij4rrq53ksxna5idxwgabcw4n2b1ig7pyx5"))))
1723 (build-system cmake-build-system)
1724 (inputs
1725 (list alsa-lib hamlib))
1726 (arguments
1727 `(#:phases
1728 (modify-phases %standard-phases
1729 (add-after 'unpack 'fix-paths
1730 (lambda* (#:key outputs #:allow-other-keys)
1731 (substitute* "conf/CMakeLists.txt"
1732 (("DESTINATION /etc")
1733 (string-append "DESTINATION "
1734 (assoc-ref outputs "out")
1735 "/etc"))))))))
1736 (home-page "https://github.com/wb2osz/direwolf")
1737 (synopsis "TNC for Amateur Packet Radio")
1738 (description
1739 "Dire Wolf is a Terminal Node Controller (TNC) for Amateur Packet Radio.
1740 It can perform as:
1741 @itemize
1742 @item APRS GPS tracker,
1743 @item Digipeater,
1744 @item Internet gateway (IGate)
1745 @item APRStt gateway
1746 @end itemize\n")
1747 (license license:gpl2+)))
1748
1749 (define-public aldo
1750 (package
1751 (name "aldo")
1752 (version "0.7.7")
1753 (source
1754 (origin
1755 (method url-fetch)
1756 (uri (string-append "mirror://savannah/aldo/aldo-" version ".tar.bz2"))
1757 (sha256
1758 (base32 "14lzgldqzbbzydsy1cai3wln3hpyj1yhj8ji3wygyzr616fq9f7i"))))
1759 (build-system gnu-build-system)
1760 (inputs
1761 (list ao))
1762 (home-page "https://www.nongnu.org/aldo/")
1763 (synopsis "Morse code tutor")
1764 (description
1765 "Aldo is a morse code learning tool providing four type of training
1766 methods:
1767
1768 @itemize
1769 @item Classic exercice,
1770 @item Koch method,
1771 @item Read from file,
1772 @item Callsign exercice.
1773 @end itemize\n")
1774 (license license:gpl3+)))
1775
1776 (define-public unixcw
1777 (package
1778 (name "unixcw")
1779 (version "3.6.0")
1780 (source
1781 (origin
1782 (method url-fetch)
1783 (uri (string-append "mirror://sourceforge/unixcw/unixcw-"
1784 version ".tar.gz"))
1785 (sha256
1786 (base32 "15wriwv91583kmmyijbzam3dpclzmg4qjyfzjv5f75x9b0gqabxm"))))
1787 (build-system gnu-build-system)
1788 (native-inputs
1789 (list pkg-config))
1790 (inputs
1791 (list alsa-lib ncurses pulseaudio qtbase-5))
1792 (arguments
1793 `(#:configure-flags '("--disable-static")
1794 #:phases
1795 (modify-phases %standard-phases
1796 (add-after 'unpack 'fix-paths
1797 (lambda* (#:key inputs #:allow-other-keys)
1798 (substitute* '("configure"
1799 "src/config.h.in"
1800 "src/cwcp/Makefile.am"
1801 "src/cwcp/Makefile.in")
1802 (("-lcurses")
1803 "-lncurses"))
1804 (substitute* "src/libcw/libcw_pa.c"
1805 (("libpulse-simple.so" all)
1806 (search-input-file inputs "/lib/libpulse-simple.so"))))))))
1807 (home-page "http://unixcw.sourceforge.net/")
1808 (synopsis "Morse code library and programs")
1809 (description
1810 "@code{unixcw} is a project providing the libcw library and a set of
1811 programs using the library: cw, cwgen, cwcp and xcwcp. The programs are
1812 intended for people who want to learn receiving and sending morse code.")
1813 (license license:gpl2+)))
1814
1815 (define-public kochmorse
1816 (package
1817 (name "kochmorse")
1818 (version "3.5.1")
1819 (source
1820 (origin
1821 (method git-fetch)
1822 (uri (git-reference
1823 (url "https://github.com/hmatuschek/kochmorse")
1824 (commit (string-append "v" version))))
1825 (file-name (git-file-name name version))
1826 (sha256
1827 (base32 "1s1aj223n57rpc95rih98z08xnyhq2zp02byzrc3f7s01fv3nj0l"))))
1828 (build-system qt-build-system)
1829 (native-inputs
1830 (list qttools-5))
1831 (inputs
1832 (list qtbase-5 qtmultimedia-5))
1833 (arguments
1834 `(#:tests? #f)) ; No test suite
1835 (home-page "https://dm3mat.darc.de/kochmorse/")
1836 (synopsis "Morse code tutor")
1837 (description
1838 "KochMorse is a simple morse-code tutor using the Koch method.")
1839 (license license:gpl2+)))
1840
1841 (define-public gnuais
1842 (package
1843 (name "gnuais")
1844 (version "0.3.3")
1845 (source
1846 (origin
1847 (method git-fetch)
1848 (uri (git-reference
1849 (url "https://github.com/rubund/gnuais")
1850 (commit version)))
1851 (file-name (git-file-name name version))
1852 (sha256
1853 (base32 "1rik5fdfslszdn3yvj769jzmnv9pirzf76ki33bjjzk7nkabbnlm"))))
1854 (build-system cmake-build-system)
1855 (native-inputs
1856 `(("mariadb-dev" ,mariadb "dev")
1857 ("pkg-config" ,pkg-config)))
1858 (inputs
1859 `(("alsa-lib" ,alsa-lib)
1860 ("curl" ,curl)
1861 ("gtk+" ,gtk+)
1862 ("libsoup" ,libsoup-minimal)
1863 ("mariadb-lib" ,mariadb "lib")
1864 ("osm-gps-map" ,osm-gps-map)
1865 ("pulseaudio" ,pulseaudio)))
1866 (arguments
1867 `(#:configure-flags '("-DCMAKE_C_FLAGS=-fcommon")
1868 #:tests? #f ; No test suite
1869 #:phases
1870 (modify-phases %standard-phases
1871 (add-after 'unpack 'fix-paths
1872 (lambda* (#:key outputs #:allow-other-keys)
1873 (substitute* "src/cfgfile.c"
1874 (("/usr/share/")
1875 (string-append (assoc-ref outputs "out") "/share/"))))))))
1876 (home-page "http://gnuais.sourceforge.net/")
1877 (synopsis "AIS message demodulator and decoder")
1878 (description
1879 "This program contains algorithms to demodulate and decode AIS (Automatic
1880 Identification System) messages sent by ships and coast stations.")
1881 (license license:gpl2+)))
1882
1883 (define-public kappanhang
1884 (package
1885 (name "kappanhang")
1886 (version "1.3")
1887 (source
1888 (origin
1889 (method git-fetch)
1890 (uri (git-reference
1891 (url "https://github.com/nonoo/kappanhang")
1892 (commit (string-append "v" version))))
1893 (file-name (git-file-name name version))
1894 (sha256
1895 (base32 "1ycy8avq5s7zspfi0d9klqcwwkpmcaz742cigd7pmcnbbhspcicp"))))
1896 (build-system go-build-system)
1897 (arguments
1898 '(#:import-path "github.com/nonoo/kappanhang"
1899 #:install-source? #f))
1900 (inputs
1901 (list go-github-com-akosmarton-papipes
1902 go-github-com-fatih-color
1903 go-github-com-google-goterm
1904 go-github-com-mattn-go-isatty
1905 go-github-com-mesilliac-pulse-simple
1906 go-github-com-pborman-getopt
1907 go-go-uber-org-multierr
1908 go-go-uber-org-zap))
1909 (home-page "https://github.com/nonoo/kappanhang")
1910 (synopsis "Client for Icom RS-BA1 server")
1911 (description
1912 "Kappanhang remotely opens audio channels and a serial port to an Icom
1913 RS-BA1 server. The application is mainly developed for connecting to the Icom
1914 IC-705 transceiver, which has built-in WiFi and RS-BA1 server.
1915
1916 Compatible hardware/software:
1917 @itemize
1918 @item Icom RS-BA1 server software,
1919 @item Icom IC-705
1920 @item Icom IC-9700
1921 @end itemize\n")
1922 (license license:expat)))
1923
1924 (define-public dream
1925 (package
1926 (name "dream")
1927 (version "2.2")
1928 (source
1929 (origin
1930 (method url-fetch)
1931 (uri (string-append "mirror://sourceforge/drm/dream/" version
1932 "/dream_" version ".orig.tar.gz"))
1933 (sha256
1934 (base32 "0mpg341b0vnm6ym0cag9zri9w6kw012rv68zdmmi2hlvq7iiw8gp"))))
1935 (build-system qt-build-system)
1936 (native-inputs
1937 (list pkg-config))
1938 (inputs
1939 (list faad2
1940 fftw
1941 libsndfile
1942 libpcap
1943 opus
1944 pulseaudio
1945 qtbase-5
1946 qtsvg-5
1947 qtwebkit
1948 qwt
1949 speexdsp
1950 zlib))
1951 (arguments
1952 `(#:tests? #f
1953 #:phases
1954 (modify-phases %standard-phases
1955 (add-after 'unpack 'fix-paths
1956 (lambda* (#:key inputs outputs #:allow-other-keys)
1957 (substitute* "dream.pro"
1958 (("target\\.path = /usr/bin")
1959 (string-append "target.path = "
1960 (assoc-ref outputs "out") "/bin"))
1961 (("documentation\\.path = /usr/share/man/man1")
1962 (string-append "documentation.path = "
1963 (assoc-ref outputs "out")
1964 "/share/man/man1"))
1965 (("/usr/include/pulse")
1966 (search-input-directory inputs "/include/pulse"))
1967 (("/usr/include/sndfile\\.h")
1968 (search-input-file inputs "/include/sndfile.h"))
1969 (("/usr/include/opus")
1970 (search-input-directory inputs "/include/opus"))
1971 (("/usr/include/speex")
1972 (search-input-directory inputs "/include/speex"))
1973 (("/usr/include/qwt")
1974 (search-input-directory inputs "/include/qwt"))
1975 (("\\$\\$OUT_PWD/include/neaacdec\\.h")
1976 (search-input-file inputs "/include/neaacdec.h")))))
1977 (replace 'configure
1978 (lambda _
1979 (invoke "qmake"))))))
1980 (home-page "https://sourceforge.net/projects/drm/")
1981 (synopsis "Digital Radio Mondiale receiver")
1982 (description
1983 "Dream is a software implementation of a Digital Radio Mondiale (DRM)
1984 receiver.")
1985 (license license:gpl2+)))
1986
1987 (define-public welle-io
1988 (package
1989 (name "welle-io")
1990 (version "2.4")
1991 (source
1992 (origin
1993 (method git-fetch)
1994 (uri (git-reference
1995 (url "https://github.com/albrechtl/welle.io")
1996 (commit (string-append "v" version))))
1997 (file-name (git-file-name name version))
1998 (sha256
1999 (base32 "0vl98pciw6xzcxyprcb4613rxn0i202f104lmy900jrny0pq4y65"))))
2000 (build-system qt-build-system)
2001 (native-inputs
2002 (list pkg-config))
2003 (inputs
2004 (list alsa-lib
2005 faad2
2006 fftwf
2007 lame
2008 libusb
2009 mpg123
2010 rtl-sdr
2011 qtbase-5
2012 qtcharts
2013 qtdeclarative-5
2014 qtgraphicaleffects
2015 qtmultimedia-5
2016 qtquickcontrols2-5
2017 soapysdr))
2018 (arguments
2019 `(#:configure-flags '("-DRTLSDR=ON"
2020 "-DSOAPYSDR=ON")
2021 #:tests? #f))
2022 (home-page "https://www.welle.io/")
2023 (synopsis "DAB and DAB+ software radio")
2024 (description
2025 "@code{welle.io} is a Digital Audio Broadcasting (DAB and DAB+) software
2026 defined radio with support for rtl-sdr.")
2027 (license license:gpl2+)))
2028
2029 (define-public csdr
2030 (package
2031 (name "csdr")
2032 (version "0.18.0")
2033 (source
2034 (origin
2035 (method git-fetch)
2036 (uri (git-reference
2037 (url "https://github.com/jketterl/csdr")
2038 (commit version)))
2039 (file-name (git-file-name name version))
2040 (sha256
2041 (base32 "0sdni0p9qcf4yw1wf5jz1pyb9wv6wmdblirh2q6s7jblh50vfwz1"))))
2042 (build-system cmake-build-system)
2043 (native-inputs
2044 (list pkg-config))
2045 (inputs
2046 (list fftwf libsamplerate))
2047 (arguments
2048 (list #:tests? #f)) ; No check phase
2049 (home-page "https://github.com/jketterl/csdr")
2050 (synopsis "DSP for software defined radio")
2051 (description
2052 "This package includes the @code{libcsdr} library of
2053 @acronym{DSP, Digital Signal Processing} functions for
2054 @acronym{SDRs, Software Defined Radios}, and the @code{csdr} command line
2055 program that can be used to build simple signal processing flow graphs.")
2056 (license license:gpl3+)))
2057
2058 (define-public convert-samples
2059 (package
2060 (name "convert-samples")
2061 (version "3.0.0")
2062 (source
2063 (origin
2064 (method git-fetch)
2065 (uri (git-reference
2066 (url "https://github.com/glv2/convert-samples")
2067 (commit (string-append "v" version))))
2068 (file-name (git-file-name name version))
2069 (sha256
2070 (base32 "1d9w9m5agi8fiv1wk8nhjrbm2jkm2fks4ymbxkn0xphbwj3gwr7i"))))
2071 (build-system gnu-build-system)
2072 (native-inputs
2073 (list autoconf automake))
2074 (inputs
2075 (list liquid-dsp))
2076 (synopsis "SDR samples converter")
2077 (description
2078 "@code{convert-samples} is a command-line program to convert samples
2079 received from software defined radios from one format to another.
2080
2081 Supported formats:
2082 @itemize
2083 @item s8: signed 8 bit integer
2084 @item u8: unsigned 8 bit integer
2085 @item s16: signed 16 bit integer
2086 @item u16: unsigned 16 bit integer
2087 @item s32: signed 32 bit integer
2088 @item u32: unsigned 32 bit integer
2089 @item f32: 32 bit float
2090 @item cs8: complex made of signed 8 bit integers
2091 @item cu8: complex made of unsigned 8 bit integers
2092 @item cs16: complex made of signed 16 bit integers
2093 @item cu16: complex made of unsigned 16 bit integers
2094 @item cs32: complex made of signed 32 bit integers
2095 @item cu32: complex made of unsigned 32 bit integers
2096 @item cf32: complex made of 32 bit floats
2097 @end itemize")
2098 (home-page "https://github.com/glv2/convert-samples")
2099 (license license:gpl3+)))
2100
2101 (define-public serialdv
2102 (package
2103 (name "serialdv")
2104 (version "1.1.4")
2105 (source
2106 (origin
2107 (method git-fetch)
2108 (uri (git-reference
2109 (url "https://github.com/f4exb/serialDV")
2110 (commit (string-append "v" version))))
2111 (file-name (git-file-name name version))
2112 (sha256
2113 (base32 "0d88h2wjhf79nisiv96bq522hkbknzm88wsv0q9k33mzmrwnrx93"))))
2114 (build-system cmake-build-system)
2115 (arguments
2116 `(#:tests? #f)) ; No test suite.
2117 (home-page "https://github.com/f4exb/serialDV")
2118 (synopsis "Audio interface for AMBE3000 based devices")
2119 (description
2120 "SerialDV is a minimal interface to encode and decode audio with AMBE3000
2121 based devices in packet mode over a serial link.")
2122 (license license:gpl3+)))
2123
2124 (define-public cm256cc
2125 (package
2126 (name "cm256cc")
2127 (version "1.1.0")
2128 (source
2129 (origin
2130 (method git-fetch)
2131 (uri (git-reference
2132 (url "https://github.com/f4exb/cm256cc")
2133 (commit (string-append "v" version))))
2134 (file-name (git-file-name name version))
2135 (sha256
2136 (base32 "1n9v7g6d370263bgqrjv38s9aq5953rzy7jvd8i30xq6aram9djg"))))
2137 (build-system cmake-build-system)
2138 (arguments
2139 ;; Disable some SIMD features for reproducibility.
2140 `(#:configure-flags '("-DENABLE_DISTRIBUTION=1")
2141 #:phases
2142 (modify-phases %standard-phases
2143 (replace 'check
2144 (lambda* (#:key tests? #:allow-other-keys)
2145 (when tests?
2146 (invoke "./cm256_test")))))))
2147 (home-page "https://github.com/f4exb/cm256cc")
2148 (synopsis "Cauchy MDS Block Erasure Codec")
2149 (description
2150 "This is a C++ library implementing fast GF(256) Cauchy MDS Block Erasure
2151 Codec.")
2152 (license license:gpl3+)))
2153
2154 (define-public libdab
2155 ;; No release since 2017, use commit directly.
2156 (let ((commit "b578d02eda60f613d35bab5d762ae7c9a27758d8")
2157 (revision "1"))
2158 (package
2159 (name "libdab")
2160 (version (git-version "0.8" revision commit))
2161 (source
2162 (origin
2163 (method git-fetch)
2164 (uri (git-reference
2165 (url "https://github.com/JvanKatwijk/dab-cmdline")
2166 (commit commit)))
2167 (file-name (git-file-name name version))
2168 (sha256
2169 (base32 "0j339kx3n2plgfw7ikpp7b81h5n68wmsgflwljbh2sy8j62faik9"))))
2170 (build-system cmake-build-system)
2171 (inputs
2172 (list faad2 fftwf zlib))
2173 (arguments
2174 `(#:tests? #f ; No test suite.
2175 #:phases
2176 (modify-phases %standard-phases
2177 (add-after 'unpack 'enter-sources-directory
2178 (lambda _
2179 (chdir "library"))))))
2180 (home-page "https://github.com/JvanKatwijk/dab-cmdline")
2181 (synopsis "DAB decoding library")
2182 (description "This is a library to decode @acronym{DAB/DAB+, Digital
2183 Audio Broadcasting}.")
2184 (license license:gpl2+))))
2185
2186 (define-public dsdcc
2187 (package
2188 (name "dsdcc")
2189 (version "1.9.3")
2190 (source
2191 (origin
2192 (method git-fetch)
2193 (uri (git-reference
2194 (url "https://github.com/f4exb/dsdcc")
2195 (commit (string-append "v" version))))
2196 (file-name (git-file-name name version))
2197 (sha256
2198 (base32 "0jgzpv4d6ckd0sdq6438rjh3m6knj6gx63627fajch74hxrvclzj"))))
2199 (build-system cmake-build-system)
2200 (inputs
2201 (list mbelib serialdv))
2202 (arguments
2203 `(#:tests? #f ; No test suite.
2204 #:configure-flags
2205 (list "-DUSE_MBELIB=ON"
2206 (string-append "-DLIBMBE_INCLUDE_DIR="
2207 (assoc-ref %build-inputs "mbelib")
2208 "/include")
2209 (string-append "-DLIBMBE_LIBRARY="
2210 (assoc-ref %build-inputs "mbelib")
2211 "/lib/libmbe.so")
2212 (string-append "-DLIBSERIALDV_INCLUDE_DIR="
2213 (assoc-ref %build-inputs "serialdv")
2214 "/include/serialdv")
2215 (string-append "-DLIBSERIALDV_LIBRARY="
2216 (assoc-ref %build-inputs "serialdv")
2217 "/lib/libserialdv.so"))))
2218 (home-page "https://github.com/f4exb/dsdcc")
2219 (synopsis "Digital speech decoder")
2220 (description
2221 "This package provides a library and a program to decode several digital
2222 voice formats.")
2223 (license license:gpl3+)))
2224
2225 (define-public sdrangel
2226 (package
2227 (name "sdrangel")
2228 (version "7.6.2")
2229 (source
2230 (origin
2231 (method git-fetch)
2232 (uri (git-reference
2233 (url "https://github.com/f4exb/sdrangel")
2234 (commit (string-append "v" version))))
2235 (file-name (git-file-name name version))
2236 (sha256
2237 (base32 "193iwwb4mbr29mlgaqb67j8214k10k2q0ky9fcl1ja52vmdzz71b"))))
2238 (build-system qt-build-system)
2239 (native-inputs
2240 (list doxygen graphviz pkg-config))
2241 (inputs
2242 (list airspyhf
2243 alsa-lib
2244 aptdec
2245 boost
2246 cm256cc
2247 codec2
2248 dsdcc
2249 faad2
2250 ffmpeg
2251 fftwf
2252 hackrf
2253 libdab
2254 libusb
2255 mbelib
2256 opencv
2257 opus
2258 pulseaudio
2259 qtbase-5
2260 qtcharts
2261 qtdeclarative-5
2262 qtlocation
2263 qtmultimedia-5
2264 qtquickcontrols2-5
2265 qtserialport
2266 qtspeech
2267 qtwebchannel-5
2268 qtwebengine-5
2269 qtwebsockets-5
2270 rtl-sdr
2271 serialdv
2272 soapysdr
2273 sgp4
2274 zlib))
2275 (arguments
2276 `(#:tests? #f ; No test suite.
2277 #:configure-flags
2278 ,#~(list (string-append "-DAPT_DIR="
2279 #$(this-package-input "aptdec"))
2280 (string-append "-DDAB_DIR="
2281 #$(this-package-input "libdab"))
2282 (string-append "-DDSDCC_DIR="
2283 #$(this-package-input "dsdcc"))
2284 (string-append "-DMBE_DIR="
2285 #$(this-package-input "mbelib"))
2286 (string-append "-DSERIALDV_DIR="
2287 #$(this-package-input "serialdv"))
2288 (string-append "-DSGP4_DIR="
2289 #$(this-package-input "sgp4"))
2290 (string-append "-DSOAPYSDR_DIR="
2291 #$(this-package-input "soapysdr")))
2292 #:phases
2293 (modify-phases %standard-phases
2294 (add-after 'unpack 'fix-boost-compatibility
2295 (lambda _
2296 (substitute*
2297 '("plugins/channelrx/noisefigure/noisefigure.cpp"
2298 "plugins/channelrx/noisefigure/noisefigureenrdialog.cpp")
2299 (("boost::math::barycentric_rational<double>")
2300 "boost::math::interpolators::barycentric_rational<double>")))))))
2301 (home-page "https://github.com/f4exb/sdrangel/wiki")
2302 (synopsis "Software defined radio")
2303 (description
2304 "SDRangel is a Qt software defined radio and signal analyzer frontend for
2305 various hardware.")
2306 (license license:gpl3+)))
2307
2308 (define-public sdr++
2309 (package
2310 (name "sdr++")
2311 (version "1.0.4")
2312 (source
2313 (origin
2314 (method git-fetch)
2315 (uri (git-reference
2316 (url "https://github.com/AlexandreRouma/SDRPlusPlus")
2317 (commit version)))
2318 (file-name (git-file-name name version))
2319 (sha256
2320 (base32 "1xwbz6yyca6wmzad5ykxw6i0r8jzc7i3jbzq7mhp8caiymd6knw3"))))
2321 (build-system cmake-build-system)
2322 (native-inputs
2323 (list pkg-config))
2324 (inputs
2325 `(("airspyhf" ,airspyhf)
2326 ("alsa-lib" ,alsa-lib)
2327 ("codec2" ,codec2)
2328 ("fftwf" ,fftwf)
2329 ("glew" ,glew)
2330 ("glfw" ,glfw)
2331 ("hackrf" ,hackrf)
2332 ("jack" ,jack-2)
2333 ("libusb" ,libusb)
2334 ("pulseaudio" ,pulseaudio)
2335 ("rtaudio" ,rtaudio)
2336 ("rtl-sdr" ,rtl-sdr)
2337 ("soapysdr" ,soapysdr)
2338 ("volk" ,volk)))
2339 (arguments
2340 `(#:tests? #f ; No test suite.
2341 #:configure-flags '("-DOPT_BUILD_AIRSPY_SOURCE=OFF"
2342 "-DOPT_BUILD_PLUTOSDR_SOURCE=OFF"
2343 "-DOPT_BUILD_M17_DECODER=ON")
2344 #:phases
2345 (modify-phases %standard-phases
2346 (add-after 'unpack 'fix-paths
2347 (lambda* (#:key outputs #:allow-other-keys)
2348 (substitute* "CMakeLists.txt"
2349 (("/usr")
2350 (assoc-ref outputs "out"))))))))
2351 (home-page "https://github.com/AlexandreRouma/SDRPlusPlus")
2352 (synopsis "Software defined radio software")
2353 (description
2354 "SDR++ is a software defined radio software for various hardware.")
2355 (license license:gpl3+)))
2356
2357 (define-public inspectrum
2358 (package
2359 (name "inspectrum")
2360 (version "0.2.3")
2361 (source
2362 (origin
2363 (method git-fetch)
2364 (uri (git-reference
2365 (url "https://github.com/miek/inspectrum")
2366 (commit (string-append "v" version))))
2367 (file-name (git-file-name name version))
2368 (sha256
2369 (base32 "1x6nyn429pk0f7lqzskrgsbq09mq5787xd4piic95add6n1cc355"))))
2370 (build-system qt-build-system)
2371 (native-inputs
2372 (list pkg-config))
2373 (inputs
2374 (list fftwf liquid-dsp qtbase-5))
2375 (home-page "https://github.com/miek/inspectrum")
2376 (synopsis "Radio signal analyser")
2377 (description
2378 "Inspectrum is a tool for analysing captured signals, primarily from
2379 software-defined radio receivers.")
2380 (license license:gpl3+)))
2381
2382 (define-public wfview
2383 (package
2384 (name "wfview")
2385 (version "1.2d")
2386 (source
2387 (origin
2388 (method git-fetch)
2389 (uri (git-reference
2390 (url "https://gitlab.com/eliggett/wfview")
2391 (commit version)))
2392 (file-name (git-file-name name version))
2393 (sha256
2394 (base32 "1kpkwxhcacgmprbr8xz840rj9a22513vxrh2q7d3js5i1dva8j2z"))))
2395 (build-system qt-build-system)
2396 (inputs
2397 (list opus qcustomplot qtbase-5 qtmultimedia-5 qtserialport))
2398 (arguments
2399 `(#:tests? #f ; No test suite.
2400 #:phases
2401 (modify-phases %standard-phases
2402 (add-after 'unpack 'fix-paths
2403 (lambda* (#:key outputs #:allow-other-keys)
2404 (substitute* "wfview.pro"
2405 (("\\.\\./wfview/")
2406 "../"))
2407 (substitute* '("wfmain.cpp")
2408 (("/usr/share")
2409 (string-append (assoc-ref outputs "out") "/share")))))
2410 (replace 'configure
2411 (lambda* (#:key outputs #:allow-other-keys)
2412 (mkdir-p "build")
2413 (chdir "build")
2414 (invoke "qmake"
2415 (string-append "PREFIX=" (assoc-ref outputs "out"))
2416 "../wfview.pro"))))))
2417 (home-page "https://wfview.org/")
2418 (synopsis "Software to control Icom radios")
2419 (description
2420 "@code{wfview} is a program to control modern Icom radios and view the
2421 spectrum waterfall. It supports at least the following models:
2422
2423 @itemize
2424 @item IC-705
2425 @item IC-7300
2426 @item IC-7610
2427 @item IC-7850
2428 @item IC-7851
2429 @item IC-9700
2430 @end itemize\n")
2431 (license (list license:expat
2432 license:gpl3))))
2433
2434 (define-public minimodem
2435 (package
2436 (name "minimodem")
2437 (version "0.24")
2438 (source
2439 (origin
2440 (method url-fetch)
2441 (uri (string-append "http://www.whence.com/minimodem/minimodem-"
2442 version ".tar.gz"))
2443 (sha256
2444 (base32 "13ipyh39l7p420j1j9kvwyskv2nqnimls1a3z1klsa1zivds9k7q"))))
2445 (build-system gnu-build-system)
2446 (native-inputs
2447 (list pkg-config))
2448 (inputs
2449 (list alsa-lib fftwf libsndfile pulseaudio))
2450 (home-page "http://www.whence.com/minimodem/")
2451 (synopsis "Software audio FSK modem")
2452 (description
2453 "Minimodem is a command-line program which decodes (or generates) audio
2454 modem tones at any specified baud rate, using various framing protocols. It
2455 acts a general-purpose software FSK modem, and includes support for various
2456 standard FSK protocols such as Bell103, Bell202, RTTY, TTY/TDD, NOAA SAME, and
2457 Caller-ID.")
2458 (license license:gpl3+)))
2459
2460 (define-public rfcat
2461 ;; Use a commit for now because some fixes to make rfcat work with
2462 ;; Python 3 instead of Python 2 are not in a release yet.
2463 (let ((commit "725bf79af27d47cdec64107317c1c8fe3f7ad7b8")
2464 (revision "1"))
2465 (package
2466 (name "rfcat")
2467 (version (git-version "1.9.5" revision commit))
2468 (source
2469 (origin
2470 (method git-fetch)
2471 (uri (git-reference
2472 (url "https://github.com/atlas0fd00m/rfcat")
2473 (commit commit)))
2474 (file-name (git-file-name name version))
2475 (sha256
2476 (base32 "0dbc6n4pxsa73wzxny773khc73r1dn3ma5hi7xv76vcykjvzkdi3"))))
2477 (build-system python-build-system)
2478 (inputs
2479 (list python-future
2480 python-ipython
2481 python-numpy
2482 python-pyserial
2483 python-pyside-2
2484 python-pyusb))
2485 (arguments
2486 `(#:tests? #f ; Tests want to use a serial port
2487 #:phases
2488 (modify-phases %standard-phases
2489 (add-after 'unpack 'fix-permissions
2490 (lambda _
2491 (make-file-writable "rflib/rflib_version.py")))
2492 (add-after 'install 'install-udev-rules
2493 (lambda* (#:key outputs #:allow-other-keys)
2494 (install-file "etc/udev/rules.d/20-rfcat.rules"
2495 (string-append (assoc-ref outputs "out")
2496 "/lib/udev/rules.d")))))))
2497 (home-page "https://github.com/atlas0fd00m/rfcat")
2498 (synopsis "Program to control some radio dongles")
2499 (description
2500 "@code{rfcat} is a program to control some radio dongles operating in
2501 ISM bands.
2502
2503 Supported dongles:
2504 @itemize
2505 @item YARD Stick One
2506 @item cc1111emk
2507 @item chronos watch dongle
2508 @item imme (limited support)
2509 @end itemize
2510
2511 To install the rfcat udev rules, you must extend @code{udev-service-type} with
2512 this package. E.g.: @code{(udev-rules-service 'rfcat rfcat)}")
2513 (license (list license:bsd-3
2514 license:gpl2)))))
2515
2516 (define-public rx-tools
2517 ;; No tagged release since 2016, use commit instead.
2518 (let ((commit "811b21c4c8a592515279bd19f7460c6e4ff0551c")
2519 (revision "1"))
2520 (package
2521 (name "rx-tools")
2522 (version (git-version "1.0.3" revision commit))
2523 (source
2524 (origin
2525 (method git-fetch)
2526 (uri (git-reference
2527 (url "https://github.com/rxseger/rx_tools")
2528 (commit commit)))
2529 (file-name (git-file-name name version))
2530 (sha256
2531 (base32 "0qr8q00cv6q0ikjrph0qh07mlbvgk4yimccpkn3ir8ib5ma0r9sr"))))
2532 (build-system cmake-build-system)
2533 (inputs
2534 (list soapysdr))
2535 (arguments
2536 `(#:tests? #f)) ; No test suite.
2537 (home-page "https://github.com/rxseger/rx_tools")
2538 (synopsis "Command line programs for receiving data from SDRs")
2539 (description
2540 "This package provides the @code{rx_fm}, @code{rx_power} and
2541 @code{rx_sdr} tools for receiving data from SDRs, based on @code{rtl_fm},
2542 @code{rtl_power} and @code{rtl_sdr} from RTL-SDR, but using the SoapySDR
2543 vendor-neutral SDR support library instead, intended to support a wider range
2544 of devices than RTL-SDR.")
2545 (license license:gpl2+))))
2546
2547 (define-public urh
2548 (package
2549 (name "urh")
2550 (version "2.9.3")
2551 (source
2552 (origin
2553 (method git-fetch)
2554 (uri (git-reference
2555 (url "https://github.com/jopohl/urh")
2556 (commit (string-append "v" version))))
2557 (file-name (git-file-name name version))
2558 (sha256
2559 (base32 "17r9fkw0icph7fayibp6qbdh4nxi8wy3mmd3djmh0c2jr8yz5fsf"))))
2560 (build-system python-build-system)
2561 (native-inputs
2562 (list python-cython
2563 python-pytest
2564 xorg-server-for-tests))
2565 (inputs
2566 (list gnuradio
2567 gr-osmosdr
2568 hackrf
2569 python-numpy
2570 python-psutil
2571 python-pyaudio
2572 python-pyqt
2573 rtl-sdr))
2574 (arguments
2575 `(#:phases
2576 (modify-phases %standard-phases
2577 (add-after 'unpack 'configure-compiler
2578 (lambda _
2579 ;; Use gcc as compiler
2580 (substitute* "src/urh/dev/native/ExtensionHelper.py"
2581 (("compiler = ccompiler\\.new_compiler\\(\\)\n" all)
2582 (string-append
2583 all " compiler.set_executables(compiler='gcc',"
2584 " compiler_so='gcc', linker_exe='gcc', linker_so='gcc -shared')\n")))))
2585 (add-after 'unpack 'disable-some-tests
2586 (lambda _
2587 (for-each delete-file
2588 '(;; FIXME: This test causes a segmentation fault
2589 "tests/test_send_recv_dialog_gui.py"))))
2590 (add-after 'build 'build-cythonext
2591 (lambda _
2592 (invoke "python" "src/urh/cythonext/build.py")))
2593 (replace 'check
2594 (lambda* (#:key inputs tests? #:allow-other-keys)
2595 (when tests?
2596 (setenv "HOME" "/tmp")
2597 (system (string-append (search-input-file inputs "/bin/Xvfb")
2598 " :1 &"))
2599 (setenv "DISPLAY" ":1")
2600 (invoke "pytest")))))))
2601 (home-page "https://github.com/jopohl/urh")
2602 (synopsis "Wireless protocol investigation program")
2603 (description
2604 "The Universal Radio Hacker (URH) is a complete suite for wireless
2605 protocol investigation with native support for many common Software Defined
2606 Radios.")
2607 (license license:gpl3+)))
2608
2609 (define-public gnss-sdr
2610 (package
2611 (name "gnss-sdr")
2612 (version "0.0.17")
2613 (source
2614 (origin
2615 (method git-fetch)
2616 (uri (git-reference
2617 (url "https://github.com/gnss-sdr/gnss-sdr")
2618 (commit (string-append "v" version))))
2619 (file-name (git-file-name name version))
2620 (sha256
2621 (base32 "0kxn98vmrsd2a157cf3hsmivi6p4k4a3907j5w8hmcs0nn92786i"))))
2622 (build-system cmake-build-system)
2623 (native-inputs
2624 `(("gfortran" ,gfortran)
2625 ("googletest-source" ,(package-source googletest))
2626 ("orc" ,orc)
2627 ("pkg-config" ,pkg-config)
2628 ("python" ,python)
2629 ("python-mako" ,python-mako)))
2630 (inputs
2631 (list armadillo
2632 boost
2633 fmt
2634 gflags
2635 glog
2636 gmp
2637 gnuradio
2638 gr-osmosdr
2639 lapack
2640 libpcap
2641 log4cpp
2642 matio
2643 openblas
2644 openssl
2645 protobuf
2646 pugixml
2647 spdlog
2648 volk))
2649 (arguments
2650 `(#:configure-flags
2651 (list "-DENABLE_GENERIC_ARCH=ON"
2652 "-DENABLE_OSMOSDR=ON"
2653 (string-append "-DGFLAGS_ROOT="
2654 (assoc-ref %build-inputs "gflags"))
2655 (string-append "-DGLOG_ROOT="
2656 (assoc-ref %build-inputs "glog"))
2657 (string-append "-DGTEST_DIR="
2658 (assoc-ref %build-inputs "googletest-source")))
2659 #:phases
2660 (modify-phases %standard-phases
2661 (add-before 'check 'set-home
2662 (lambda _
2663 (setenv "HOME" "/tmp"))))))
2664 (home-page "https://gnss-sdr.org/")
2665 (synopsis "Global Navigation Satellite Systems software-defined receiver")
2666 (description
2667 "This program is a software-defined receiver which is able to process
2668 (that is, to perform detection, synchronization, demodulation and decoding of
2669 the navigation message, computation of observables and, finally, computation of
2670 position fixes) the signals of the BeiDou, Galileo, GLONASS and GPS Global
2671 Navigation Satellite System.")
2672 (license license:gpl3+)))
2673
2674 (define-public qdmr
2675 (package
2676 (name "qdmr")
2677 (version "0.10.3")
2678 (source (origin
2679 (method git-fetch)
2680 (uri (git-reference
2681 (url "https://github.com/hmatuschek/qdmr")
2682 (commit (string-append "v" version))))
2683 (file-name (git-file-name name version))
2684 (sha256
2685 (base32
2686 "037vkwk974zrwacxafslkb3mbw9258v9sdpwdvb23msjzbc3snrn"))))
2687 (build-system cmake-build-system)
2688 (arguments
2689 (list #:tests? #f ;no tests
2690 #:phases
2691 #~(modify-phases %standard-phases
2692 (add-after 'unpack 'patch-paths
2693 (lambda _
2694 (substitute* "lib/CMakeLists.txt"
2695 (("(DESTINATION \")/etc/udev/" _ directive)
2696 (string-append directive #$output "/lib/udev/"))))))))
2697 (inputs (list libusb qtbase-5 qtlocation qtserialport yaml-cpp))
2698 (native-inputs (list qttools-5))
2699 (home-page "https://dm3mat.darc.de/qdmr/")
2700 (synopsis "GUI application and command line tool to program DMR radios")
2701 (description
2702 "qdmr is a graphical user interface (GUI) application that allows one to
2703 program several types of DMR radios. It is comparable to the Customer
2704 Programming Software (CPS) bundled with these radios but aims to be a more
2705 universal tool.
2706
2707 To install the qdmr udev rules, you must extend @code{udev-service-type} with this
2708 package. E.g.: @code{(udev-rules-service 'qdmr qdmr)}")
2709 (license license:gpl3+)))