gnu: fldigi: Update to 4.1.14.
[jackhill/guix/guix.git] / gnu / packages / radio.scm
CommitLineData
c5361b7c 1;;; GNU Guix --- Functional package management for GNU
ac2fc134 2;;; Copyright © 2017, 2018, 2019, 2020 Arun Isaac <arunisaac@systemreboot.net>
79c4fb4f 3;;; Copyright © 2019, 2020 Christopher Howard <christopher@librehacker.com>
c4f96706 4;;; Copyright © 2019, 2020 Evan Straw <evan.straw99@gmail.com>
d042caf6
GLV
5;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
6;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
7;;; Copyright © 2020 Charlie Ritter <chewzerita@posteo.net>
3059e120 8;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
c5361b7c
AI
9;;;
10;;; This file is part of GNU Guix.
11;;;
12;;; GNU Guix is free software; you can redistribute it and/or modify it
13;;; under the terms of the GNU General Public License as published by
14;;; the Free Software Foundation; either version 3 of the License, or (at
15;;; your option) any later version.
16;;;
17;;; GNU Guix is distributed in the hope that it will be useful, but
18;;; WITHOUT ANY WARRANTY; without even the implied warranty of
19;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;;; GNU General Public License for more details.
21;;;
22;;; You should have received a copy of the GNU General Public License
23;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
24
0493ead6 25(define-module (gnu packages radio)
c5361b7c
AI
26 #:use-module ((guix licenses) #:prefix license:)
27 #:use-module (guix packages)
28 #:use-module (guix download)
7f1c69f5 29 #:use-module (guix git-download)
f03e5ca5 30 #:use-module (guix utils)
d042caf6
GLV
31 #:use-module (gnu packages algebra)
32 #:use-module (gnu packages audio)
c4f96706
ES
33 #:use-module (gnu packages autotools)
34 #:use-module (gnu packages base)
bc94b75d 35 #:use-module (gnu packages bash)
d042caf6
GLV
36 #:use-module (gnu packages boost)
37 #:use-module (gnu packages check)
38 #:use-module (gnu packages documentation)
8e1e86b0 39 #:use-module (gnu packages engineering)
72f6ee0e 40 #:use-module (gnu packages fltk)
5a915632 41 #:use-module (gnu packages gcc)
409dfdf0 42 #:use-module (gnu packages gd)
d042caf6
GLV
43 #:use-module (gnu packages ghostscript)
44 #:use-module (gnu packages glib)
45 #:use-module (gnu packages gstreamer)
e200de54 46 #:use-module (gnu packages gtk)
7f1c69f5 47 #:use-module (gnu packages image)
c5361b7c 48 #:use-module (gnu packages libusb)
d042caf6
GLV
49 #:use-module (gnu packages linux)
50 #:use-module (gnu packages logging)
409dfdf0 51 #:use-module (gnu packages lua)
d042caf6
GLV
52 #:use-module (gnu packages maths)
53 #:use-module (gnu packages multiprecision)
4fca1bc5 54 #:use-module (gnu packages ncurses)
d042caf6 55 #:use-module (gnu packages networking)
c5361b7c 56 #:use-module (gnu packages pkg-config)
7f1c69f5 57 #:use-module (gnu packages pulseaudio)
e200de54 58 #:use-module (gnu packages python)
d042caf6 59 #:use-module (gnu packages python-science)
44d10b1f 60 #:use-module (gnu packages python-xyz)
d042caf6 61 #:use-module (gnu packages qt)
409dfdf0 62 #:use-module (gnu packages readline)
5a915632 63 #:use-module (gnu packages ruby)
d042caf6
GLV
64 #:use-module (gnu packages sphinx)
65 #:use-module (gnu packages swig)
409dfdf0 66 #:use-module (gnu packages tcl)
d042caf6 67 #:use-module (gnu packages tex)
5a915632 68 #:use-module (gnu packages texinfo)
e200de54 69 #:use-module (gnu packages xml)
d042caf6 70 #:use-module (gnu packages xorg)
e200de54 71 #:use-module (guix build-system cmake)
93299e61 72 #:use-module (guix build-system glib-or-gtk)
7f1c69f5 73 #:use-module (guix build-system gnu)
aa862c2c
GLV
74 #:use-module (guix build-system python)
75 #:use-module (guix build-system qt))
c5361b7c 76
0493ead6
GLV
77(define-public liquid-dsp
78 (package
79 (name "liquid-dsp")
80 (version "1.3.2")
81 (source
82 (origin (method git-fetch)
83 (uri (git-reference
b0e7b699 84 (url "https://github.com/jgaeddert/liquid-dsp")
0493ead6
GLV
85 (commit (string-append "v" version))))
86 (file-name (git-file-name name version))
87 (sha256
88 (base32 "1n6dbg13q8ga5qhg1yiszwly4jj0rxqr6f1xwm9waaly5z493xsd"))))
89 (build-system gnu-build-system)
90 (native-inputs
91 `(("autoconf" ,autoconf)))
92 (inputs
93 `(("fftw" ,fftw)
94 ("fftwf" ,fftwf)))
95 (home-page "https://liquidsdr.org")
96 (synopsis "Signal processing library for software-defined radios")
97 (description
98 "Liquid DSP is a @dfn{digital signal processing} (DSP) library designed
99specifically for software-defined radios on embedded platforms. The aim is to
100provide a lightweight DSP library that does not rely on a myriad of external
101dependencies or proprietary and otherwise cumbersome frameworks. All signal
102processing elements are designed to be flexible, scalable, and dynamic,
103including filters, filter design, oscillators, modems, synchronizers, complex
104mathematical operations, and much more.")
105 (license license:expat)))
106
c5361b7c
AI
107(define-public rtl-sdr
108 (package
109 (name "rtl-sdr")
d7cefb0b 110 (version "0.6.0")
c5361b7c
AI
111 (source
112 (origin
d7cefb0b
ES
113 (method git-fetch)
114 (uri (git-reference
3e26bec0 115 (url "https://git.osmocom.org/rtl-sdr/")
d7cefb0b
ES
116 (commit version)))
117 (file-name (git-file-name name version))
c5361b7c
AI
118 (sha256
119 (base32
d7cefb0b 120 "0lmvsnb4xw4hmz6zs0z5ilsah5hjz29g1s0050n59fllskqr3b8k"))))
c5361b7c
AI
121 (build-system cmake-build-system)
122 (inputs
123 `(("libusb" ,libusb)))
124 (native-inputs
125 `(("pkg-config" ,pkg-config)))
126 (arguments
2bee789a
GLV
127 `(#:configure-flags '("-DDETACH_KERNEL_DRIVER=ON"
128 "-DINSTALL_UDEV_RULES=ON")
129 #:tests? #f ; No tests
130 #:phases
131 (modify-phases %standard-phases
132 (add-after 'unpack 'fix-paths
133 (lambda* (#:key outputs #:allow-other-keys)
134 (substitute* "CMakeLists.txt"
503447ad 135 (("DESTINATION \"/etc/udev/")
2bee789a
GLV
136 (string-append "DESTINATION \""
137 (assoc-ref outputs "out")
503447ad 138 "/lib/udev/")))
2bee789a 139 #t)))))
c5361b7c
AI
140 (home-page "https://osmocom.org/projects/sdr/wiki/rtl-sdr")
141 (synopsis "Software defined radio driver for Realtek RTL2832U")
142 (description "DVB-T dongles based on the Realtek RTL2832U can be used as a
143cheap software defined radio, since the chip allows transferring the raw I/Q
2bee789a
GLV
144samples to the host. @code{rtl-sdr} provides drivers for this purpose.
145
95ffdfe8
GLV
146The default Linux driver managing DVB-T dongles as TV devices doesn't work for
147SDR purposes and clashes with this package. Therefore you must prevent the
148kernel from loading it automatically by adding the following line to your
149system configuration:
150
151@lisp
152(kernel-arguments '(\"modprobe.blacklist=dvb_usb_rtl28xxu\"))
153@end lisp
154
aee7d000
BW
155To install the rtl-sdr udev rules, you must extend 'udev-service-type' with
156this package. E.g.: @code{(udev-rules-service 'rtl-sdr rtl-sdr)}")
c5361b7c 157 (license license:gpl2+)))
e200de54
AI
158
159(define-public chirp
160 (package
161 (name "chirp")
04191985 162 (version "20200430")
e200de54
AI
163 (source
164 (origin
165 (method url-fetch)
166 (uri (string-append "https://trac.chirp.danplanet.com/chirp_daily/daily-"
167 version "/chirp-daily-" version ".tar.gz"))
168 (sha256
169 (base32
04191985 170 "060fzplgmpfrk6wkfaasx7phpfk90mmylk6drbwzk4f9r1655vda"))))
e200de54
AI
171 (build-system python-build-system)
172 (inputs
173 `(("python2-libxml2" ,python2-libxml2)
174 ("python2-pygtk" ,python2-pygtk)
175 ("python2-pyserial" ,python2-pyserial)))
176 (arguments
177 `(#:python ,python-2))
178 (home-page "https://chirp.danplanet.com")
179 (synopsis "Cross-radio programming tool")
180 (description "Chirp is a cross-radio programming tool. It supports a
181growing list of radios across several manufacturers and allows transferring of
182memory contents between them.")
183 (license (list license:gpl3+
184 license:lgpl3+)))) ; chirp/elib_intl.py
7f1c69f5
AI
185
186(define-public aptdec
187 (package
188 (name "aptdec")
189 (version "1.7")
190 (source
191 (origin
192 (method git-fetch)
193 (uri (git-reference
ac2fc134 194 (url "https://github.com/Xerbo/aptdec")
7f1c69f5
AI
195 (commit (string-append "v" version))))
196 (file-name (git-file-name name version))
197 (sha256
198 (base32
199 "1hf0zb51qc6fyhdjxyij1n3vgwnw3cwksc3r11szbhkml14qjnzk"))))
200 (build-system gnu-build-system)
201 (inputs
202 `(("libpng" ,libpng)
203 ("libsndfile" ,libsndfile)))
204 (arguments
319a73e7
AI
205 `(#:make-flags
206 (list
207 (string-append "CC="
208 (if ,(%current-target-system)
209 (string-append (assoc-ref %build-inputs "cross-gcc")
210 "/bin/" ,(%current-target-system) "-gcc")
211 "gcc"))
212 (string-append "PREFIX=" %output)
213 (string-append "RPM_BUILD_ROOT=" %output))
7f1c69f5
AI
214 #:tests? #f ; no tests
215 #:phases
216 (modify-phases %standard-phases
217 (delete 'configure)
218 (replace 'install
219 (lambda* (#:key outputs #:allow-other-keys)
220 (let ((out (assoc-ref outputs "out")))
221 (install-file "atpdec" (string-append out "/bin")))
222 #t)))))
ac2fc134 223 (home-page "https://github.com/Xerbo/aptdec")
7f1c69f5
AI
224 (synopsis "NOAA Automatic Picture Transmission (APT) decoder")
225 (description "Aptdec decodes Automatic Picture Transmission (APT) images.
226These are medium resolution images of the Earth transmitted by, among other
227satellites, the POES NOAA weather satellite series. These transmissions are
228on a frequency of 137 MHz. They can be received using an inexpensive antenna
229and a dedicated receiver.")
230 (license license:gpl2+)))
c4f96706
ES
231
232(define-public redsea
233 (package
234 (name "redsea")
235 (version "0.18")
236 (source (origin
237 (method git-fetch)
238 (uri (git-reference
239 (url "https://github.com/windytan/redsea")
240 (commit (string-append "v" version))))
241 (file-name (git-file-name name version))
242 (sha256
243 (base32
244 "1y96g0ra2krjb2kypm8s5gdfia45yci4f36klsvyzg8d53v5cwhn"))))
245 (build-system gnu-build-system)
246 (arguments
247 `(#:phases
248 (modify-phases %standard-phases
249 ;; The configure.ac file does not explicitly link against libiconv
250 ;; except on Mac OS, causing the build to fail. This phase comments
251 ;; out the original AC_SUBST macro (located inside a conditional) and
252 ;; adds an explicit use of it underneath, so that libiconv is always
253 ;; linked against.
254 (add-after 'unpack 'patch-libiconv
255 (lambda _
256 (substitute* "configure.ac"
257 (("^ +AC_SUBST")
258 "# AC_SUBST")
259 (("esac")
260 "esac\nAC_SUBST([ICONV], [\"-liconv\"])"))
261 #t)))))
262 (inputs
263 `(("libiconv" ,libiconv)
264 ("libsndfile" ,libsndfile)
265 ("liquid-dsp" ,liquid-dsp)))
266 (native-inputs
267 `(("autoconf" ,autoconf)
268 ("automake" ,automake)))
269 (home-page "https://github.com/windytan/redsea")
270 (synopsis "Lightweight RDS to JSON decoder")
271 (description "redsea is a lightweight command-line @dfn{FM Radio Data
272System} (FM-RDS) decoder. Redsea can be used with any RTL-SDR USB radio stick
273with the rtl_fm tool, or any other @dfn{software-defined radio} (SDR) via
274csdr, for example. It can also decode raw ASCII bitstream, the hex format
275used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
276 (license license:expat)))
d042caf6
GLV
277
278(define-public gnuradio
279 (package
280 (name "gnuradio")
281 (version "3.8.0.0")
282 (source
283 (origin
284 (method url-fetch)
285 (uri (string-append "https://www.gnuradio.org/releases/gnuradio/"
286 "gnuradio-" version ".tar.xz"))
287 (sha256
8e1e86b0
GLV
288 (base32 "0aw55gf5549b0fz2qdi7vplcmaf92bj34h40s34b2ycnqasv900r"))
289 (modules '((guix build utils)))
290 (snippet
291 '(begin
292 ;; Delete bundled volk to use the shared one.
293 (delete-file-recursively "volk")
294 #t))))
d042caf6
GLV
295 (build-system cmake-build-system)
296 (native-inputs
297 `(("doxygen" ,doxygen)
d042caf6
GLV
298 ("ghostscript" ,ghostscript)
299 ("orc" ,orc)
300 ("pkg-config" ,pkg-config)
d042caf6
GLV
301 ("python-cheetah" ,python-cheetah)
302 ("python-mako" ,python-mako)
303 ("python-pyzmq" ,python-pyzmq)
304 ("python-scipy" ,python-scipy)
305 ("python-sphinx" ,python-sphinx)
306 ("swig" ,swig)
307 ("texlive" ,(texlive-union (list texlive-amsfonts
308 texlive-latex-amsmath
309 ;; TODO: Add newunicodechar.
310 texlive-latex-graphics)))
311 ("xorg-server" ,xorg-server-for-tests)))
312 (inputs
313 `(("alsa-lib" ,alsa-lib)
314 ("boost" ,boost)
315 ("cairo" ,cairo)
316 ("codec2" ,codec2)
317 ("cppzmq" ,cppzmq)
318 ("fftwf" ,fftwf)
319 ("gmp" ,gmp)
320 ("gsl" ,gsl)
321 ("gsm" ,gsm)
322 ("gtk+" ,gtk+)
323 ("jack" ,jack-1)
324 ("log4cpp" ,log4cpp)
325 ("pango" ,pango)
326 ("portaudio" ,portaudio)
f03e5ca5 327 ("python" ,python)
d042caf6
GLV
328 ("python-click" ,python-click)
329 ("python-click-plugins" ,python-click-plugins)
330 ("python-lxml" ,python-lxml)
331 ("python-numpy" ,python-numpy)
332 ("python-pycairo" ,python-pycairo)
333 ("python-pygobject" ,python-pygobject)
334 ("python-pyqt" ,python-pyqt)
335 ("python-pyyaml" ,python-pyyaml)
336 ("qtbase" ,qtbase)
337 ("qwt" ,qwt)
8e1e86b0 338 ("volk" ,volk)
d042caf6
GLV
339 ("zeromq" ,zeromq)))
340 (arguments
341 `(#:modules ((guix build cmake-build-system)
93299e61 342 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
d042caf6 343 ((guix build python-build-system) #:prefix python:)
93299e61
GLV
344 (guix build utils)
345 (ice-9 match))
d042caf6 346 #:imported-modules (,@%cmake-build-system-modules
93299e61 347 (guix build glib-or-gtk-build-system)
d042caf6 348 (guix build python-build-system))
8e1e86b0
GLV
349 #:configure-flags
350 '("-DENABLE_INTERNAL_VOLK=OFF")
d042caf6
GLV
351 #:phases
352 (modify-phases %standard-phases
353 (add-after 'unpack 'fix-paths
354 (lambda* (#:key inputs #:allow-other-keys)
355 (let ((qwt (assoc-ref inputs "qwt")))
356 (substitute* "cmake/Modules/FindQwt.cmake"
357 (("/usr/include")
358 (string-append qwt "/include"))
359 (("/usr/lib")
360 (string-append qwt "/lib"))
361 (("qwt6-\\$\\{QWT_QT_VERSION\\}")
362 "qwt")))
363 (substitute* "cmake/Modules/GrPython.cmake"
364 (("dist-packages")
365 "site-packages"))
366 (substitute* '("gr-vocoder/swig/vocoder_swig.i"
367 "gr-vocoder/include/gnuradio/vocoder/codec2.h"
368 "gr-vocoder/include/gnuradio/vocoder/freedv_api.h")
369 (("<codec2/")
370 "<"))
371 #t))
372 (add-before 'check 'set-test-environment
373 (lambda* (#:key inputs #:allow-other-keys)
374 (setenv "HOME" "/tmp")
375 (system (string-append (assoc-ref inputs "xorg-server")
376 "/bin/Xvfb :1 &"))
377 (setenv "DISPLAY" ":1")
378 #t))
379 (add-after 'install 'wrap-python
93299e61
GLV
380 (assoc-ref python:%standard-phases 'wrap))
381 (add-after 'wrap-python 'wrap-glib-or-gtk
382 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
383 (add-after 'wrap-glib-or-gtk 'wrap-with-GI_TYPELIB_PATH
384 (lambda* (#:key inputs outputs #:allow-other-keys)
385 (let ((out (assoc-ref outputs "out"))
386 (paths (map (match-lambda
387 ((output . directory)
388 (let ((girepodir (string-append
389 directory
390 "/lib/girepository-1.0")))
391 (if (file-exists? girepodir)
392 girepodir
393 #f))))
394 inputs)))
395 (wrap-program (string-append out "/bin/gnuradio-companion")
396 `("GI_TYPELIB_PATH" ":" prefix ,(filter identity paths))))
397 #t)))))
cf480830 398 (native-search-paths
f03e5ca5 399 ;; Variables required to find third-party plugins at runtime.
cf480830
GLV
400 (list (search-path-specification
401 (variable "GRC_BLOCKS_PATH")
f03e5ca5
GLV
402 (files '("share/gnuradio/grc/blocks")))
403 (search-path-specification
404 (variable "PYTHONPATH")
405 (files (list (string-append "lib/python"
406 (version-major+minor
407 (package-version python))
408 "/site-packages"))))))
d042caf6
GLV
409 (synopsis "Toolkit for software-defined radios")
410 (description
411 "GNU Radio is a development toolkit that provides signal processing blocks
412to implement software radios. It can be used with external RF hardware to
413create software-defined radios, or without hardware in a simulation-like
414environment.")
415 (home-page "https://www.gnuradio.org")
416 (license license:gpl3+)))
aa862c2c
GLV
417
418(define-public gnuradio-osmosdr
419 (package
420 (name "gnuradio-osmosdr")
421 (version "0.2.0")
422 (source
423 (origin
424 (method git-fetch)
425 (uri (git-reference
426 (url "https://git.osmocom.org/gr-osmosdr")
427 (commit (string-append "v" version))))
428 (file-name (git-file-name name version))
429 (sha256
430 (base32 "1rdx7fa0xiq0qmgrrbby7z1bblmqhl9qh9jqpsznzxkx91f17ypd"))))
431 (build-system cmake-build-system)
432 (native-inputs
433 `(("doxygen" ,doxygen)
aa862c2c
GLV
434 ("pkg-config" ,pkg-config)
435 ("python" ,python)
436 ("python-mako" ,python-mako)
437 ("python-six" ,python-six)
438 ("swig" ,swig)))
439 (inputs
440 `(("boost" ,boost)
441 ("fftwf" ,fftwf)
442 ("gmp" ,gmp)
443 ("gnuradio" ,gnuradio)
62d45e46 444 ("hackrf" ,hackrf)
aa862c2c 445 ("log4cpp" ,log4cpp)
b3926202
GLV
446 ("rtl-sdr" ,rtl-sdr)
447 ("volk" ,volk)))
aa862c2c
GLV
448 (synopsis "GNU Radio block for interfacing with various radio hardware")
449 (description "This is a block for GNU Radio allowing to use a common API
450to access different radio hardware.")
451 (home-page "https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR")
452 (license license:gpl3+)))
bc94b75d
GLV
453
454(define-public libosmo-dsp
455 (package
456 (name "libosmo-dsp")
457 (version "0.4.0")
458 (source
459 (origin
460 (method git-fetch)
461 (uri (git-reference
462 (url "https://git.osmocom.org/libosmo-dsp")
463 (commit version)))
464 (file-name (git-file-name name version))
465 (sha256
466 (base32 "00plihnpym1gkfpflah8il9463qxzm9kx2f07jyvbkszpj8viq5g"))))
467 (build-system gnu-build-system)
468 (native-inputs
469 `(("autoconf" ,autoconf)
470 ("automake" ,automake)
471 ("bash-minimal" ,bash-minimal)
472 ("doxygen" ,doxygen)
bc94b75d
GLV
473 ("libtool" ,libtool)
474 ("pkg-config" ,pkg-config)
475 ("texlive" ,(texlive-union (list texlive-amsfonts
476 texlive-latex-amsmath
477 ;; TODO: Add newunicodechar.
478 texlive-latex-graphics)))))
479 (inputs
480 `(("fftwf" ,fftwf)))
481 (arguments
482 `(#:phases
483 (modify-phases %standard-phases
484 (add-after 'unpack 'fix-paths
485 (lambda* (#:key inputs #:allow-other-keys)
486 (substitute* "git-version-gen"
487 (("/bin/sh")
488 (string-append (assoc-ref inputs "bash")
489 "/bin/bash")))
490 #t)))))
491 (synopsis "DSP primitives for SDR")
492 (description
493 "This a C-language library for common DSP (Digital Signal Processing)
494primitives for SDR (Software Defined Radio).")
495 (home-page "https://osmocom.org/projects/libosmo-dsp")
496 (license license:gpl2+)))
77dc12a8
GLV
497
498(define-public gnuradio-iqbalance
499 (package
500 (name "gnuradio-iqbalance")
501 (version "0.38.1")
502 (source
503 (origin
504 (method git-fetch)
505 (uri (git-reference
506 (url "https://git.osmocom.org/gr-iqbal")
507 (commit (string-append "v" version))))
508 (file-name (git-file-name name version))
509 (sha256
510 (base32 "0ksagwz05p3b0702q7ljq7013xmp0ijp30my9z6s3p7ja8dj42s3"))))
511 (build-system cmake-build-system)
512 (native-inputs
513 `(("doxygen" ,doxygen)
514 ("pkg-config" ,pkg-config)
515 ("python" ,python)
516 ("python-numpy" ,python-numpy)
517 ("python-six" ,python-six)
518 ("swig" ,swig)))
519 (inputs
520 `(("boost" ,boost)
521 ("fftwf" ,fftwf)
522 ("gmp" ,gmp)
523 ("gnuradio" ,gnuradio)
524 ("libosmo-dsp" ,libosmo-dsp)
29cab668
GLV
525 ("log4cpp" ,log4cpp)
526 ("volk" ,volk)))
77dc12a8
GLV
527 (synopsis "GNU Radio block to correct IQ imbalance")
528 (description
529 "This is a GNU Radio block to correct IQ imbalance in quadrature
530receivers. It's composed of two main block:
531@itemize
532@item Fix: Given a phase and amplitude error, it will correct a complex signal.
533@item Optimize: Attempts to auto-detect the phase and amplitude error to feed
534to the fix block above.
535@end itemize")
536 (home-page "https://git.osmocom.org/gr-iqbal/")
537 (license license:gpl3+)))
f76ac21c
GLV
538
539(define-public gqrx
540 (package
541 (name "gqrx")
542 (version "2.12.1")
543 (source
544 (origin
545 (method git-fetch)
546 (uri (git-reference
b0e7b699 547 (url "https://github.com/csete/gqrx")
f76ac21c
GLV
548 (commit (string-append "v" version))))
549 (file-name (git-file-name name version))
550 (sha256
551 (base32 "00alf3q6y313xpx6p7v43vqsphd2x4am4q362lw21bcy9wc4jidw"))))
552 (build-system qt-build-system)
553 (native-inputs
554 `(("pkg-config" ,pkg-config)))
555 (inputs
556 `(("alsa-lib" ,alsa-lib)
557 ("boost" ,boost)
558 ("fftwf" ,fftwf)
559 ("gmp" ,gmp)
560 ("gnuradio" ,gnuradio)
561 ("gnuradio-iqbalance" ,gnuradio-iqbalance)
562 ("gnuradio-osmosdr" ,gnuradio-osmosdr)
563 ("jack" ,jack-1)
564 ("log4cpp" ,log4cpp)
565 ("portaudio" ,portaudio)
566 ("pulseaudio" ,pulseaudio)
567 ("qtbase" ,qtbase)
01e62a02
GLV
568 ("qtsvg" ,qtsvg)
569 ("volk" ,volk)))
f76ac21c
GLV
570 (arguments
571 `(#:tests? #f)) ; No tests
572 (synopsis "Software defined radio receiver")
573 (description "Gqrx is a software defined radio (SDR) receiver implemented
574using GNU Radio and the Qt GUI toolkit.")
575 (home-page "https://gqrx.dk/")
576 (license license:gpl3+)))
72f6ee0e
GLV
577
578(define-public fldigi
579 (package
580 (name "fldigi")
0e590740 581 (version "4.1.14")
72f6ee0e
GLV
582 (source
583 (origin
584 (method url-fetch)
585 (uri (string-append "http://www.w1hkj.com/files/fldigi/fldigi-"
586 version ".tar.gz"))
587 (sha256
0e590740 588 (base32 "0hr6xbv01xf7z4r2jxxhn8xjdmca2198q4m9glh4877dllvfq6xj"))))
72f6ee0e
GLV
589 (build-system gnu-build-system)
590 (native-inputs
591 `(("pkg-config" ,pkg-config)))
592 (inputs
593 `(("alsa-lib" ,alsa-lib)
594 ("fltk" ,fltk)
e6d14165 595 ("hamlib" ,hamlib)
72f6ee0e
GLV
596 ("libpng" ,libpng)
597 ("libsamplerate" ,libsamplerate)
e6d14165 598 ("libusb" ,libusb)
72f6ee0e
GLV
599 ("libx11" ,libx11)
600 ("libxext" ,libxext)
601 ("libxfixes" ,libxfixes)
602 ("libxft" ,libxft)
603 ("portaudio" ,portaudio)
604 ("pulseaudio" ,pulseaudio)))
605 (synopsis "Software modem for amateur radio use")
606 (description
607 "Fldigi is a software modem for amateur radio use. It is a sound card
608based program that is used for both transmitting and receiving data by
609connecting the microphone and headphone connections of a computer to some radio
610hardware.")
611 (home-page "http://www.w1hkj.com/")
612 (license license:gpl3+)))
8080c03d
GLV
613
614(define-public flrig
615 (package
616 (name "flrig")
131cc178 617 (version "1.3.51")
8080c03d
GLV
618 (source
619 (origin
620 (method url-fetch)
621 (uri (string-append "http://www.w1hkj.com/files/flrig/flrig-"
622 version ".tar.gz"))
623 (sha256
131cc178 624 (base32 "0aq4x0ai9q08ypfhzfj2inc4z3q39zq1l6h9as1kil9yn4zbay61"))))
8080c03d
GLV
625 (build-system gnu-build-system)
626 (native-inputs
627 `(("pkg-config" ,pkg-config)))
628 (inputs
629 `(("fltk" ,fltk)
630 ("libx11" ,libx11)
631 ("libxext" ,libxext)
632 ("libxfixes" ,libxfixes)
633 ("libxft" ,libxft)))
634 (synopsis "Radio transceiver control program")
635 (description
636 "Flrig is a transceiver control program for amateur radio use.
637It provides computer aided control of various radios using a serial
638or USB connection.")
639 (home-page "http://www.w1hkj.com/")
640 (license license:gpl3+)))
660912a4
GLV
641
642(define-public flamp
643 (package
644 (name "flamp")
645 (version "2.2.05")
646 (source
647 (origin
648 (method url-fetch)
649 (uri (string-append "http://www.w1hkj.com/files/flamp/flamp-"
650 version ".tar.gz"))
651 (sha256
652 (base32 "19z1kghhdf7bq6hi2j0mzlsn2nhpn3gl1a623x3inmsk80yw3ck4"))))
653 (build-system gnu-build-system)
654 (native-inputs
655 `(("pkg-config" ,pkg-config)))
656 (inputs
657 `(("fltk" ,fltk)
658 ("libx11" ,libx11)
659 ("libxext" ,libxext)
660 ("libxfixes" ,libxfixes)
661 ("libxft" ,libxft)))
662 (synopsis "Tool for AMP file transfer")
663 (description
3a888b41 664 "FLAMP is a program for transferring files by radio waves using AMP
660912a4
GLV
665(Amateur Multicast Protocol).")
666 (home-page "http://www.w1hkj.com/")
667 (license license:gpl3+)))
90ec7085
GLV
668
669(define-public flwrap
670 (package
671 (name "flwrap")
672 (version "1.3.5")
673 (source
674 (origin
675 (method url-fetch)
676 (uri (string-append "http://www.w1hkj.com/files/flwrap/flwrap-"
677 version ".tar.gz"))
678 (sha256
679 (base32 "0qqivqkkravcg7j45740xfky2q3k7czqpkj6y364qff424q2pppg"))))
680 (build-system gnu-build-system)
681 (native-inputs
682 `(("pkg-config" ,pkg-config)))
683 (inputs
684 `(("fltk" ,fltk)
685 ("libx11" ,libx11)
686 ("libxext" ,libxext)
687 ("libxfixes" ,libxfixes)
688 ("libxft" ,libxft)))
689 (synopsis "File encapsulation program")
690 (description
691 "Flwrap is a software utility for amateur radio use. Its purpose is to
692encapsulate both text and binary files in a way that allows them to be
693transmitted over any of several digital modes and verified at the receipt end
694for correctness.")
695 (home-page "http://www.w1hkj.com/")
696 (license license:gpl3+)))
409dfdf0 697
79c4fb4f
CH
698(define-public hackrf
699 ;; Using a git commit because there have been many many commits
700 ;; since the relase two years ago, but no sign of a promised
701 ;; release for many months now.
702 (let ((commit "43e6f99fe8543094d18ff3a6550ed2066c398862")
703 (revision "0"))
704 (package
705 (name "hackrf")
706 (version (git-version "2018.01.1" revision commit))
707 (source
708 (origin
709 (method git-fetch)
710 (uri (git-reference
b0e7b699 711 (url "https://github.com/mossmann/hackrf")
79c4fb4f
CH
712 (commit commit)))
713 (file-name (git-file-name name version))
714 (sha256
715 (base32 "0avnv693xi0zsnrvkbfn0ln1r3s1iyj0bz7sc3gxay909av0pvbc"))))
716 (build-system cmake-build-system)
717 (arguments
718 '(#:configure-flags
719 (list "-DUDEV_RULES_GROUP=dialout"
720 (string-append "-DUDEV_RULES_PATH="
721 (assoc-ref %outputs "out")
722 "/lib/udev/rules.d"))
723 #:phases
724 (modify-phases %standard-phases
725 (add-before 'configure 'enter-source-directory
726 (lambda _
727 (chdir "host")
728 #t))
729 (add-after 'install 'delete-static-library
730 (lambda* (#:key outputs #:allow-other-keys)
731 (delete-file (string-append (assoc-ref outputs "out")
732 "/lib/libhackrf.a"))
733 #t))
734 (add-before 'install-license-files 'leave-source-directory
735 (lambda _
736 (chdir "..")
737 #t)))
738 #:tests? #f)) ; no test suite
739 (native-inputs
740 `(("pkg-config" ,pkg-config)))
741 (inputs
742 `(("fftw" ,fftw)
743 ("fftwf" ,fftwf)
744 ("libusb" ,libusb)))
745 (home-page "https://greatscottgadgets.com/hackrf/")
746 (synopsis "User-space library and utilities for HackRF SDR")
747 (description
748 "Command line utilities and a C library for controlling the HackRF
32290b2c
BW
749Software Defined Radio (SDR) over USB. Installing this package installs the
750userspace hackrf utilities and C library. To install the hackrf udev rules,
751you must extend 'udev-service-type' with this package. E.g.:
752@code{(udev-rules-service 'hackrf hackrf #:groups '(\"dialout\"))}.")
79c4fb4f
CH
753 (license license:gpl2))))
754
409dfdf0
GLV
755(define-public hamlib
756 (package
757 (name "hamlib")
758 (version "3.3")
759 (source
760 (origin
761 (method url-fetch)
762 (uri (string-append
763 "https://github.com/Hamlib/Hamlib/releases/download/"
764 version "/hamlib-" version ".tar.gz"))
765 (sha256
766 (base32 "10788mgrhbc57zpzakcxv5aqnr2819pcshml6fbh8zvnkja562y9"))))
767 (build-system gnu-build-system)
768 (native-inputs
769 `(("doxygen" ,doxygen)
770 ("lua" ,lua)
771 ("pkg-config" ,pkg-config)
772 ("python-wrapper" ,python-wrapper)
773 ("swig" ,swig)
774 ("tcl" ,tcl)))
775 (inputs
776 `(("gd" ,gd)
777 ("libusb" ,libusb)
778 ("libxml2" ,libxml2)
779 ("readline" ,readline)))
780 (arguments
781 `(#:configure-flags '("--disable-static"
782 "--with-lua-binding"
783 "--with-python-binding"
784 "--with-tcl-binding"
785 "--with-xml-support")))
786 (synopsis "Tools and API to control radios")
787 (description
788 "The Ham Radio Control Library (Hamlib) is a project to provide programs
789with a consistent Application Programming Interface (API) for controlling the
790myriad of radios and rotators available to amateur radio and communications
791users.")
792 (home-page "https://hamlib.github.io/")
793 (license (list license:gpl2+ license:lgpl2.1+))))
5a915632
GLV
794
795(define wsjtx-hamlib
796 ;; Fork of hamlib with custom patches used by wsjtx.
797 (package
798 (inherit hamlib)
799 (name "wsjtx-hamlib")
183f0698 800 (version "2.2.2")
5a915632
GLV
801 (source
802 (origin
803 (method git-fetch)
804 (uri (git-reference
805 (url "https://git.code.sf.net/u/bsomervi/hamlib.git")
806 (commit (string-append "wsjtx-" version))))
807 (file-name (git-file-name name version))
808 (sha256
09e27115 809 (base32 "01h5ps0yq5vi1x9rkw742gx6a5fj02zhbpi89i412qdfbnyk35cv"))))
5a915632
GLV
810 (native-inputs
811 `(("autoconf" ,autoconf)
812 ("automake" ,automake)
813 ("libtool" ,libtool)
814 ("texinfo" ,texinfo)
09e27115
GLV
815 ,@(package-native-inputs hamlib)))
816 (arguments
817 `(#:configure-flags '("--disable-static"
818 "--with-lua-binding"
819 "--with-python-binding"
820 "--with-tcl-binding"
821 "--with-xml-support")
822 #:phases
823 (modify-phases %standard-phases
824 (add-after 'unpack 'fix-tests
825 (lambda _
826 (substitute* "tests/testloc.c"
827 (("dmmm2dec\\(deg, mmm, nesw\\);")
828 "dmmm2dec(deg, mmm, 0, nesw);"))
829 #t)))))))
5a915632
GLV
830
831(define-public wsjtx
832 (package
833 (name "wsjtx")
183f0698 834 (version "2.2.2")
5a915632
GLV
835 (source
836 (origin
837 (method git-fetch)
838 (uri (git-reference
839 (url "https://git.code.sf.net/p/wsjt/wsjtx.git")
840 (commit (string-append "wsjtx-" version))))
841 (file-name (git-file-name name version))
842 (sha256
183f0698 843 (base32 "0fhws44gg05d9y2al0pcdnxwxwh4bazcfl0g5mq2ks1r7w23wi5x"))
5a915632
GLV
844 (modules '((guix build utils)))
845 (snippet
846 '(begin
847 ;; Delete bundled boost to use the shared one.
848 (delete-file-recursively "boost")
849 #t))))
850 (build-system qt-build-system)
851 (native-inputs
852 `(("asciidoc" ,asciidoc)
853 ("gfortran" ,gfortran)
854 ("pkg-config" ,pkg-config)
855 ("qttools" ,qttools)
856 ("ruby-asciidoctor" ,ruby-asciidoctor)))
857 (inputs
858 `(("boost" ,boost)
859 ("fftw" ,fftw)
860 ("fftwf" ,fftwf)
861 ("hamlib" ,wsjtx-hamlib)
862 ("libusb" ,libusb)
863 ("qtbase" ,qtbase)
864 ("qtmultimedia" ,qtmultimedia)
865 ("qtserialport" ,qtserialport)))
866 (arguments
b79794a7
GLV
867 `(#:tests? #f ; No test suite
868 #:phases
869 (modify-phases %standard-phases
870 (add-after 'unpack 'work-around-runtime-bug
871 (lambda _
872 ;; Some of the programs in this package fail to find symbols
873 ;; in libm at runtime. Adding libm manually at the end of the
874 ;; library lists when linking the programs seems to help.
875 ;; TODO: find exactly what is wrong in the way the programs
876 ;; are built.
877 (substitute* "CMakeLists.txt"
878 (("target_link_libraries \\((.*)\\)" all libs)
879 (string-append "target_link_libraries (" libs " m)")))
880 #t)))))
5a915632
GLV
881 (synopsis "Weak-signal ham radio communication program")
882 (description
883 "WSJT-X implements communication protocols or modes called FT4, FT8,
884JT4, JT9, JT65, QRA64, ISCAT, MSK144, and WSPR, as well as one called Echo for
885detecting and measuring your own radio signals reflected from the Moon. These
886modes were all designed for making reliable, confirmed QSOs under extreme
887weak-signal conditions.")
888 (home-page "https://www.physics.princeton.edu/pulsar/k1jt/wsjtx.html")
889 (license license:gpl3)))
f93eebbf 890
8a294ece
GLV
891(define-public js8call
892 (package
893 (inherit wsjtx)
894 (name "js8call")
b8fe812f 895 (version "2.2.0")
8a294ece
GLV
896 (source
897 (origin
898 (method url-fetch)
899 (uri (string-append "http://files.js8call.com/" version
900 "/js8call-" version ".tgz"))
901 (sha256
b8fe812f 902 (base32 "149sjwc4zg6ckgq26af93p4fxappa4k9dh7rdy67g8ajfjad4cd8"))
8a294ece
GLV
903 (modules '((guix build utils)))
904 (snippet
905 '(begin
906 ;; Delete bundled boost to use the shared one.
907 (delete-file-recursively "boost")
908 #t))))
909 (build-system qt-build-system)
910 (native-inputs
911 `(("asciidoc" ,asciidoc)
912 ("gfortran" ,gfortran)
913 ("pkg-config" ,pkg-config)
914 ("qttools" ,qttools)
915 ("ruby-asciidoctor" ,ruby-asciidoctor)))
916 (inputs
917 `(("boost" ,boost)
918 ("fftw" ,fftw)
919 ("fftwf" ,fftwf)
b8fe812f 920 ("hamlib" ,wsjtx-hamlib)
8a294ece
GLV
921 ("libusb" ,libusb)
922 ("qtbase" ,qtbase)
923 ("qtmultimedia" ,qtmultimedia)
924 ("qtserialport" ,qtserialport)))
925 (arguments
926 `(#:tests? #f ; No test suite
927 #:phases
928 (modify-phases %standard-phases
929 (add-after 'unpack 'fix-paths
930 (lambda* (#:key outputs #:allow-other-keys)
931 (substitute* "CMakeLists.txt"
932 (("DESTINATION /usr/share")
933 (string-append "DESTINATION "
934 (assoc-ref outputs "out")
935 "/share")))
936 #t))
ac4847eb
GLV
937 (add-after 'fix-paths 'work-around-runtime-bug
938 (lambda _
939 ;; Some of the programs in this package fail to find symbols
940 ;; in libm at runtime. Adding libm manually at the end of the
941 ;; library lists when linking the programs seems to help.
942 ;; TODO: find exactly what is wrong in the way the programs
943 ;; are built.
944 (substitute* "CMakeLists.txt"
945 (("target_link_libraries \\((.*)\\)" all libs)
946 (string-append "target_link_libraries (" libs " m)")))
947 #t))
8a294ece
GLV
948 (add-after 'unpack 'fix-hamlib
949 (lambda _
950 (substitute* "CMake/Modules/Findhamlib.cmake"
951 (("set \\(ENV\\{PKG_CONFIG_PATH\\}.*\\)")
952 "set (__pc_path $ENV{PKG_CONFIG_PATH})
953 list (APPEND __pc_path \"${__hamlib_pc_path}\")
954 set (ENV{PKG_CONFIG_PATH} \"${__pc_path}\")"))
955 (substitute* "HamlibTransceiver.hpp"
956 (("#ifdef JS8_USE_LEGACY_HAMLIB")
957 "#if 1"))
958 #t)))))
959 (synopsis "Weak-signal ham radio communication program")
960 (description
961 "JS8Call is a software using the JS8 digital mode (a derivative of the FT8
962mode) providing weak signal keyboard to keyboard messaging to amateur radio
963operators.")
964 (home-page "http://js8call.com/")
965 (license license:gpl3)))
966
f93eebbf
GLV
967(define-public xnec2c
968 (package
969 (name "xnec2c")
970 (version "4.1.1")
971 (source
972 (origin
973 (method url-fetch)
974 (uri (string-append "http://www.5b4az.org/pkg/nec2/xnec2c/xnec2c-"
975 version ".tar.bz2"))
976 (sha256
977 (base32 "1myvlkfybb2ha8l0h96ca3iz206zzy9z5iizm0sbab2zzp78n1r9"))))
978 (build-system gnu-build-system)
979 (native-inputs
980 `(("pkg-config" ,pkg-config)))
981 (inputs
982 `(("gtk+" ,gtk+)))
983 (arguments
984 `(#:phases
985 (modify-phases %standard-phases
986 (add-after 'unpack 'fix-makefile
987 (lambda* (#:key outputs #:allow-other-keys)
988 (substitute* '("Makefile.am" "Makefile.in")
989 ;; The DESTDIR variable does not get replaced the prefix
990 ;; in the final Makefile, so let's do here.
991 (("\\$\\(DESTDIR\\)/usr")
992 (assoc-ref outputs "out")))
993 #t))
994 (add-after 'fix-makefile 'fix-paths
995 (lambda* (#:key outputs #:allow-other-keys)
996 ;; Increase the max length of the path to the glade file,
997 ;; so that the '/gnu/store/...' path can fit in.
998 (substitute* '("src/shared.c" "src/shared.h")
999 (("char xnec2c_glade\\[64\\];")
1000 "char xnec2c_glade[256];"))
1001 ;; Fix hard coded references to '/usr/...'.
1002 (substitute* '("src/geom_edit.c" "src/main.c")
1003 (("\"/usr")
1004 (string-append "\"" (assoc-ref outputs "out"))))
1005 #t)))))
1006 (synopsis "Antenna modeling software")
1007 (description
1008 "Xnec2c is a GTK3-based graphical version of nec2c, a translation to the
1009C language of NEC2, the FORTRAN Numerical Electromagnetics Code commonly used
1010for antenna simulation and analysis. It can be used to define the geometry of
1011an antenna, and then plot the radiation pattern or frequency-related data like
1012gain and standing wave ratio.")
1013 (home-page "http://www.5b4az.org/")
1014 (license license:gpl3+)))
4fca1bc5
GLV
1015
1016(define-public dump1090
1017 (package
1018 (name "dump1090")
1019 (version "3.8.1")
1020 (source
1021 (origin
1022 (method git-fetch)
1023 (uri (git-reference
b0e7b699 1024 (url "https://github.com/flightaware/dump1090")
4fca1bc5
GLV
1025 (commit (string-append "v" version))))
1026 (file-name (git-file-name name version))
1027 (sha256
1028 (base32 "0xg8rzrxqklx1m9ncxsd96dlkbjcsxfi2mrb859v50f07xysdyd8"))))
1029 (build-system gnu-build-system)
1030 (native-inputs
1031 `(("pkg-config" ,pkg-config)))
1032 (inputs
1033 `(("libusb" ,libusb)
1034 ("ncurses" ,ncurses)
1035 ("rtl-sdr" ,rtl-sdr)))
1036 (arguments
1037 `(#:test-target "test"
19e8a754 1038 #:make-flags
1ca44ae3
MB
1039 (list (string-append "CC=" ,(cc-for-target))
1040 "BLADERF=no")
4fca1bc5
GLV
1041 #:phases
1042 (modify-phases %standard-phases
19e8a754 1043 (delete 'configure)
4fca1bc5
GLV
1044 (replace 'install
1045 (lambda* (#:key outputs #:allow-other-keys)
1046 (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
1047 (install-file "dump1090" bin)
1048 (install-file "view1090" bin)
1049 #t))))))
1050 (synopsis "Mode S decoder for rtl-sdr devices")
1051 (description
1052 "Dump1090 is a Mode S decoder specifically designed for rtl-sdr devices.
1053It can be used to decode the ADS-B signals that planes emit to indicate
1054their position, altitude, speed, etc.")
1055 (home-page "https://github.com/flightaware/dump1090")
1056 (license license:bsd-3)))
232f2d26
GLV
1057
1058(define-public rtl-433
1059 (package
1060 (name "rtl-433")
1061 (version "20.02")
1062 (source
1063 (origin
1064 (method git-fetch)
1065 (uri (git-reference
b0e7b699 1066 (url "https://github.com/merbanan/rtl_433")
232f2d26
GLV
1067 (commit version)))
1068 (file-name (git-file-name name version))
1069 (sha256
1070 (base32 "11991xky9gawkragdyg27qsf7kw5bhlg7ygvf3fn7ng00x4xbh1z"))))
1071 (build-system cmake-build-system)
1072 (native-inputs
1073 `(("pkg-config" ,pkg-config)))
1074 (inputs
1075 `(("libusb" ,libusb)
1076 ("rtl-sdr" ,rtl-sdr)))
1077 (synopsis "Decoder for radio transmissions in ISM bands")
1078 (description
1079 "This is a generic data receiver, mainly for decoding radio transmissions
1080from devices on the 433 MHz, 868 MHz, 315 MHz, 345 MHz and 915 MHz ISM bands.")
1081 (home-page "https://github.com/merbanan/rtl_433")
1082 (license license:gpl2+)))
8fdd0da4
GLV
1083
1084(define-public multimon-ng
1085 (package
1086 (name "multimon-ng")
1087 (version "1.1.8")
1088 (source
1089 (origin
1090 (method git-fetch)
1091 (uri (git-reference
b0e7b699 1092 (url "https://github.com/EliasOenal/multimon-ng")
8fdd0da4
GLV
1093 (commit version)))
1094 (file-name (git-file-name name version))
1095 (sha256
1096 (base32 "1973xfyvzl1viz19zr83cgqlx5laxbjrca35rqabn6dlb6xb5xk8"))))
1097 (build-system cmake-build-system)
1098 (inputs
1099 `(("libx11" ,libx11)
1100 ("pulseaudio" ,pulseaudio)))
1101 (arguments
1102 '(#:tests? #f)) ; No test suite
1103 (home-page "https://github.com/EliasOenal/multimon-ng")
1104 (synopsis "Decoder for digital radio transmission modes")
1105 (description "Multimon-ng can decode several digital radio transmission
1106modes:
1107@itemize
1108@item POCSAG512, POCSAG1200, POCSAG2400
1109@item FLEX
1110@item EAS
1111@item UFSK1200, CLIPFSK, AFSK1200, AFSK2400, AFSK2400_2, AFSK2400_3
1112@item HAPN4800
1113@item FSK9600
1114@item DTMF
1115@item ZVEI1, ZVEI2, ZVEI3, DZVEI, PZVEI
1116@item EEA, EIA, CCIR
1117@item MORSE CW
1118@item X10
1119@end itemize")
1120 (license license:gpl2+)))