gnu: calibre: Wrap QTWEBENGINEPROCESS_PATH.
[jackhill/guix/guix.git] / gnu / packages / radio.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2017, 2018, 2019, 2020 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 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 Tobias Geerinckx-Rice <me@tobias.gr>
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
25 (define-module (gnu packages radio)
26 #:use-module ((guix licenses) #:prefix license:)
27 #:use-module (guix packages)
28 #:use-module (guix download)
29 #:use-module (guix git-download)
30 #:use-module (guix utils)
31 #:use-module (gnu packages algebra)
32 #:use-module (gnu packages audio)
33 #:use-module (gnu packages autotools)
34 #:use-module (gnu packages base)
35 #:use-module (gnu packages bash)
36 #:use-module (gnu packages boost)
37 #:use-module (gnu packages check)
38 #:use-module (gnu packages documentation)
39 #:use-module (gnu packages engineering)
40 #:use-module (gnu packages fltk)
41 #:use-module (gnu packages gcc)
42 #:use-module (gnu packages gd)
43 #:use-module (gnu packages ghostscript)
44 #:use-module (gnu packages glib)
45 #:use-module (gnu packages gstreamer)
46 #:use-module (gnu packages gtk)
47 #:use-module (gnu packages image)
48 #:use-module (gnu packages libusb)
49 #:use-module (gnu packages linux)
50 #:use-module (gnu packages logging)
51 #:use-module (gnu packages lua)
52 #:use-module (gnu packages maths)
53 #:use-module (gnu packages multiprecision)
54 #:use-module (gnu packages ncurses)
55 #:use-module (gnu packages networking)
56 #:use-module (gnu packages pkg-config)
57 #:use-module (gnu packages pulseaudio)
58 #:use-module (gnu packages python)
59 #:use-module (gnu packages python-science)
60 #:use-module (gnu packages python-xyz)
61 #:use-module (gnu packages qt)
62 #:use-module (gnu packages readline)
63 #:use-module (gnu packages ruby)
64 #:use-module (gnu packages sphinx)
65 #:use-module (gnu packages swig)
66 #:use-module (gnu packages tcl)
67 #:use-module (gnu packages tex)
68 #:use-module (gnu packages texinfo)
69 #:use-module (gnu packages xml)
70 #:use-module (gnu packages xorg)
71 #:use-module (guix build-system cmake)
72 #:use-module (guix build-system glib-or-gtk)
73 #:use-module (guix build-system gnu)
74 #:use-module (guix build-system python)
75 #:use-module (guix build-system qt))
76
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
84 (url "https://github.com/jgaeddert/liquid-dsp")
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
99 specifically for software-defined radios on embedded platforms. The aim is to
100 provide a lightweight DSP library that does not rely on a myriad of external
101 dependencies or proprietary and otherwise cumbersome frameworks. All signal
102 processing elements are designed to be flexible, scalable, and dynamic,
103 including filters, filter design, oscillators, modems, synchronizers, complex
104 mathematical operations, and much more.")
105 (license license:expat)))
106
107 (define-public rtl-sdr
108 (package
109 (name "rtl-sdr")
110 (version "0.6.0")
111 (source
112 (origin
113 (method git-fetch)
114 (uri (git-reference
115 (url "https://git.osmocom.org/rtl-sdr/")
116 (commit version)))
117 (file-name (git-file-name name version))
118 (sha256
119 (base32
120 "0lmvsnb4xw4hmz6zs0z5ilsah5hjz29g1s0050n59fllskqr3b8k"))))
121 (build-system cmake-build-system)
122 (inputs
123 `(("libusb" ,libusb)))
124 (native-inputs
125 `(("pkg-config" ,pkg-config)))
126 (arguments
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"
135 (("DESTINATION \"/etc/udev/")
136 (string-append "DESTINATION \""
137 (assoc-ref outputs "out")
138 "/lib/udev/")))
139 #t)))))
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
143 cheap software defined radio, since the chip allows transferring the raw I/Q
144 samples to the host. @code{rtl-sdr} provides drivers for this purpose.
145
146 The default Linux driver managing DVB-T dongles as TV devices doesn't work for
147 SDR purposes and clashes with this package. Therefore you must prevent the
148 kernel from loading it automatically by adding the following line to your
149 system configuration:
150
151 @lisp
152 (kernel-arguments '(\"modprobe.blacklist=dvb_usb_rtl28xxu\"))
153 @end lisp
154
155 To install the rtl-sdr udev rules, you must extend 'udev-service-type' with
156 this package. E.g.: @code{(udev-rules-service 'rtl-sdr rtl-sdr)}")
157 (license license:gpl2+)))
158
159 (define-public chirp
160 (package
161 (name "chirp")
162 (version "20200430")
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
170 "060fzplgmpfrk6wkfaasx7phpfk90mmylk6drbwzk4f9r1655vda"))))
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
181 growing list of radios across several manufacturers and allows transferring of
182 memory contents between them.")
183 (license (list license:gpl3+
184 license:lgpl3+)))) ; chirp/elib_intl.py
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
194 (url "https://github.com/Xerbo/aptdec")
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
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))
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)))))
223 (home-page "https://github.com/Xerbo/aptdec")
224 (synopsis "NOAA Automatic Picture Transmission (APT) decoder")
225 (description "Aptdec decodes Automatic Picture Transmission (APT) images.
226 These are medium resolution images of the Earth transmitted by, among other
227 satellites, the POES NOAA weather satellite series. These transmissions are
228 on a frequency of 137 MHz. They can be received using an inexpensive antenna
229 and a dedicated receiver.")
230 (license license:gpl2+)))
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
272 System} (FM-RDS) decoder. Redsea can be used with any RTL-SDR USB radio stick
273 with the rtl_fm tool, or any other @dfn{software-defined radio} (SDR) via
274 csdr, for example. It can also decode raw ASCII bitstream, the hex format
275 used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
276 (license license:expat)))
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
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))))
295 (build-system cmake-build-system)
296 (native-inputs
297 `(("doxygen" ,doxygen)
298 ("ghostscript" ,ghostscript)
299 ("orc" ,orc)
300 ("pkg-config" ,pkg-config)
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)
327 ("python" ,python)
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)
338 ("volk" ,volk)
339 ("zeromq" ,zeromq)))
340 (arguments
341 `(#:modules ((guix build cmake-build-system)
342 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
343 ((guix build python-build-system) #:prefix python:)
344 (guix build utils)
345 (ice-9 match))
346 #:imported-modules (,@%cmake-build-system-modules
347 (guix build glib-or-gtk-build-system)
348 (guix build python-build-system))
349 #:configure-flags
350 '("-DENABLE_INTERNAL_VOLK=OFF")
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
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)))))
398 (native-search-paths
399 ;; Variables required to find third-party plugins at runtime.
400 (list (search-path-specification
401 (variable "GRC_BLOCKS_PATH")
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"))))))
409 (synopsis "Toolkit for software-defined radios")
410 (description
411 "GNU Radio is a development toolkit that provides signal processing blocks
412 to implement software radios. It can be used with external RF hardware to
413 create software-defined radios, or without hardware in a simulation-like
414 environment.")
415 (home-page "https://www.gnuradio.org")
416 (license license:gpl3+)))
417
418 (define-public gnuradio-osmosdr
419 (package
420 (name "gnuradio-osmosdr")
421 (version "0.2.2")
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 "1aqj5cylipmmjh1x1kb2j8262hxq6mi86dgb2zphj94wvsab2ghx"))))
431 (build-system cmake-build-system)
432 (native-inputs
433 `(("doxygen" ,doxygen)
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)
444 ("hackrf" ,hackrf)
445 ("log4cpp" ,log4cpp)
446 ("rtl-sdr" ,rtl-sdr)
447 ("volk" ,volk)))
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
450 to access different radio hardware.")
451 (home-page "https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR")
452 (license license:gpl3+)))
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)
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)
494 primitives for SDR (Software Defined Radio).")
495 (home-page "https://osmocom.org/projects/libosmo-dsp")
496 (license license:gpl2+)))
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)
525 ("log4cpp" ,log4cpp)
526 ("volk" ,volk)))
527 (synopsis "GNU Radio block to correct IQ imbalance")
528 (description
529 "This is a GNU Radio block to correct IQ imbalance in quadrature
530 receivers. 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
534 to the fix block above.
535 @end itemize")
536 (home-page "https://git.osmocom.org/gr-iqbal/")
537 (license license:gpl3+)))
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
547 (url "https://github.com/csete/gqrx")
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)
568 ("qtsvg" ,qtsvg)
569 ("volk" ,volk)))
570 (arguments
571 `(#:tests? #f)) ; No tests
572 (synopsis "Software defined radio receiver")
573 (description "Gqrx is a software defined radio (SDR) receiver implemented
574 using GNU Radio and the Qt GUI toolkit.")
575 (home-page "https://gqrx.dk/")
576 (license license:gpl3+)))
577
578 (define-public fldigi
579 (package
580 (name "fldigi")
581 (version "4.1.14")
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
588 (base32 "0hr6xbv01xf7z4r2jxxhn8xjdmca2198q4m9glh4877dllvfq6xj"))))
589 (build-system gnu-build-system)
590 (native-inputs
591 `(("pkg-config" ,pkg-config)))
592 (inputs
593 `(("alsa-lib" ,alsa-lib)
594 ("fltk" ,fltk)
595 ("hamlib" ,hamlib)
596 ("libpng" ,libpng)
597 ("libsamplerate" ,libsamplerate)
598 ("libusb" ,libusb)
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
608 based program that is used for both transmitting and receiving data by
609 connecting the microphone and headphone connections of a computer to some radio
610 hardware.")
611 (home-page "http://www.w1hkj.com/")
612 (license license:gpl3+)))
613
614 (define-public flrig
615 (package
616 (name "flrig")
617 (version "1.3.51")
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
624 (base32 "0aq4x0ai9q08ypfhzfj2inc4z3q39zq1l6h9as1kil9yn4zbay61"))))
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.
637 It provides computer aided control of various radios using a serial
638 or USB connection.")
639 (home-page "http://www.w1hkj.com/")
640 (license license:gpl3+)))
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
664 "FLAMP is a program for transferring files by radio waves using AMP
665 (Amateur Multicast Protocol).")
666 (home-page "http://www.w1hkj.com/")
667 (license license:gpl3+)))
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
692 encapsulate both text and binary files in a way that allows them to be
693 transmitted over any of several digital modes and verified at the receipt end
694 for correctness.")
695 (home-page "http://www.w1hkj.com/")
696 (license license:gpl3+)))
697
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
711 (url "https://github.com/mossmann/hackrf")
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
749 Software Defined Radio (SDR) over USB. Installing this package installs the
750 userspace hackrf utilities and C library. To install the hackrf udev rules,
751 you must extend 'udev-service-type' with this package. E.g.:
752 @code{(udev-rules-service 'hackrf hackrf #:groups '(\"dialout\"))}.")
753 (license license:gpl2))))
754
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
789 with a consistent Application Programming Interface (API) for controlling the
790 myriad of radios and rotators available to amateur radio and communications
791 users.")
792 (home-page "https://hamlib.github.io/")
793 (license (list license:gpl2+ license:lgpl2.1+))))
794
795 (define wsjtx-hamlib
796 ;; Fork of hamlib with custom patches used by wsjtx.
797 (package
798 (inherit hamlib)
799 (name "wsjtx-hamlib")
800 (version "2.2.2")
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
809 (base32 "01h5ps0yq5vi1x9rkw742gx6a5fj02zhbpi89i412qdfbnyk35cv"))))
810 (native-inputs
811 `(("autoconf" ,autoconf)
812 ("automake" ,automake)
813 ("libtool" ,libtool)
814 ("texinfo" ,texinfo)
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)))))))
830
831 (define-public wsjtx
832 (package
833 (name "wsjtx")
834 (version "2.2.2")
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
843 (base32 "0fhws44gg05d9y2al0pcdnxwxwh4bazcfl0g5mq2ks1r7w23wi5x"))
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
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)))))
881 (synopsis "Weak-signal ham radio communication program")
882 (description
883 "WSJT-X implements communication protocols or modes called FT4, FT8,
884 JT4, JT9, JT65, QRA64, ISCAT, MSK144, and WSPR, as well as one called Echo for
885 detecting and measuring your own radio signals reflected from the Moon. These
886 modes were all designed for making reliable, confirmed QSOs under extreme
887 weak-signal conditions.")
888 (home-page "https://www.physics.princeton.edu/pulsar/k1jt/wsjtx.html")
889 (license license:gpl3)))
890
891 (define-public js8call
892 (package
893 (inherit wsjtx)
894 (name "js8call")
895 (version "2.2.0")
896 (source
897 (origin
898 (method url-fetch)
899 (uri (string-append "http://files.js8call.com/" version
900 "/js8call-" version ".tgz"))
901 (sha256
902 (base32 "149sjwc4zg6ckgq26af93p4fxappa4k9dh7rdy67g8ajfjad4cd8"))
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)
920 ("hamlib" ,wsjtx-hamlib)
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))
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))
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
962 mode) providing weak signal keyboard to keyboard messaging to amateur radio
963 operators.")
964 (home-page "http://js8call.com/")
965 (license license:gpl3)))
966
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
1009 C language of NEC2, the FORTRAN Numerical Electromagnetics Code commonly used
1010 for antenna simulation and analysis. It can be used to define the geometry of
1011 an antenna, and then plot the radiation pattern or frequency-related data like
1012 gain and standing wave ratio.")
1013 (home-page "http://www.5b4az.org/")
1014 (license license:gpl3+)))
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
1024 (url "https://github.com/flightaware/dump1090")
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"
1038 #:make-flags
1039 (list (string-append "CC=" ,(cc-for-target))
1040 "BLADERF=no")
1041 #:phases
1042 (modify-phases %standard-phases
1043 (delete 'configure)
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.
1053 It can be used to decode the ADS-B signals that planes emit to indicate
1054 their position, altitude, speed, etc.")
1055 (home-page "https://github.com/flightaware/dump1090")
1056 (license license:bsd-3)))
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
1066 (url "https://github.com/merbanan/rtl_433")
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
1080 from 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+)))
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
1092 (url "https://github.com/EliasOenal/multimon-ng")
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
1106 modes:
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+)))