;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017, 2018, 2019, 2020 Arun Isaac ;;; Copyright © 2019, 2020 Christopher Howard ;;; Copyright © 2019, 2020 Evan Straw ;;; Copyright © 2020 Guillaume Le Vaillant ;;; Copyright © 2020 Danny Milosavljevic ;;; Copyright © 2020 Charlie Ritter ;;; Copyright © 2020, 2021 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu packages radio) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix utils) #:use-module (gnu packages algebra) #:use-module (gnu packages audio) #:use-module (gnu packages autotools) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages boost) #:use-module (gnu packages check) #:use-module (gnu packages documentation) #:use-module (gnu packages engineering) #:use-module (gnu packages fltk) #:use-module (gnu packages gcc) #:use-module (gnu packages gd) #:use-module (gnu packages ghostscript) #:use-module (gnu packages glib) #:use-module (gnu packages gstreamer) #:use-module (gnu packages gtk) #:use-module (gnu packages image) #:use-module (gnu packages libusb) #:use-module (gnu packages linux) #:use-module (gnu packages logging) #:use-module (gnu packages lua) #:use-module (gnu packages maths) #:use-module (gnu packages multiprecision) #:use-module (gnu packages ncurses) #:use-module (gnu packages networking) #:use-module (gnu packages pkg-config) #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python) #:use-module (gnu packages python-science) #:use-module (gnu packages python-xyz) #:use-module (gnu packages qt) #:use-module (gnu packages readline) #:use-module (gnu packages ruby) #:use-module (gnu packages sphinx) #:use-module (gnu packages swig) #:use-module (gnu packages tcl) #:use-module (gnu packages tex) #:use-module (gnu packages texinfo) #:use-module (gnu packages xml) #:use-module (gnu packages xorg) #:use-module (guix build-system cmake) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (guix build-system qt)) (define-public liquid-dsp (package (name "liquid-dsp") (version "1.3.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/jgaeddert/liquid-dsp") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1n6dbg13q8ga5qhg1yiszwly4jj0rxqr6f1xwm9waaly5z493xsd")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,autoconf))) (inputs `(("fftw" ,fftw) ("fftwf" ,fftwf))) (home-page "https://liquidsdr.org") (synopsis "Signal processing library for software-defined radios") (description "Liquid DSP is a @dfn{digital signal processing} (DSP) library designed specifically for software-defined radios on embedded platforms. The aim is to provide a lightweight DSP library that does not rely on a myriad of external dependencies or proprietary and otherwise cumbersome frameworks. All signal processing elements are designed to be flexible, scalable, and dynamic, including filters, filter design, oscillators, modems, synchronizers, complex mathematical operations, and much more.") (license license:expat))) (define-public rtl-sdr (package (name "rtl-sdr") (version "0.6.0") (source (origin (method git-fetch) (uri (git-reference (url "https://git.osmocom.org/rtl-sdr/") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "0lmvsnb4xw4hmz6zs0z5ilsah5hjz29g1s0050n59fllskqr3b8k")))) (build-system cmake-build-system) (inputs `(("libusb" ,libusb))) (native-inputs `(("pkg-config" ,pkg-config))) (arguments `(#:configure-flags '("-DDETACH_KERNEL_DRIVER=ON" "-DINSTALL_UDEV_RULES=ON") #:tests? #f ; No tests #:phases (modify-phases %standard-phases (add-after 'unpack 'fix-paths (lambda* (#:key outputs #:allow-other-keys) (substitute* "CMakeLists.txt" (("DESTINATION \"/etc/udev/") (string-append "DESTINATION \"" (assoc-ref outputs "out") "/lib/udev/"))) #t))))) (home-page "https://osmocom.org/projects/sdr/wiki/rtl-sdr") (synopsis "Software defined radio driver for Realtek RTL2832U") (description "DVB-T dongles based on the Realtek RTL2832U can be used as a cheap software defined radio, since the chip allows transferring the raw I/Q samples to the host. @code{rtl-sdr} provides drivers for this purpose. The default Linux driver managing DVB-T dongles as TV devices doesn't work for SDR purposes and clashes with this package. Therefore you must prevent the kernel from loading it automatically by adding the following line to your system configuration: @lisp (kernel-arguments '(\"modprobe.blacklist=dvb_usb_rtl28xxu\")) @end lisp To install the rtl-sdr udev rules, you must extend 'udev-service-type' with this package. E.g.: @code{(udev-rules-service 'rtl-sdr rtl-sdr)}") (license license:gpl2+))) (define-public chirp (package (name "chirp") (version "20201121") (source (origin (method url-fetch) (uri (string-append "https://trac.chirp.danplanet.com/chirp_daily/daily-" version "/chirp-daily-" version ".tar.gz")) (sha256 (base32 "092jryb1jn9li6zj243awv6piz1lhghqsm4phrz7j0rgqf76dy4n")))) (build-system python-build-system) (inputs `(("python2-libxml2" ,python2-libxml2) ("python2-pygtk" ,python2-pygtk) ("python2-pyserial" ,python2-pyserial))) (arguments `(#:python ,python-2)) (home-page "https://chirp.danplanet.com") (synopsis "Cross-radio programming tool") (description "Chirp is a cross-radio programming tool. It supports a growing list of radios across several manufacturers and allows transferring of memory contents between them.") (license (list license:gpl3+ license:lgpl3+)))) ; chirp/elib_intl.py (define-public aptdec (package (name "aptdec") (version "1.7") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/Xerbo/aptdec") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1hf0zb51qc6fyhdjxyij1n3vgwnw3cwksc3r11szbhkml14qjnzk")))) (build-system gnu-build-system) (inputs `(("libpng" ,libpng) ("libsndfile" ,libsndfile))) (arguments `(#:make-flags (list (string-append "CC=" (if ,(%current-target-system) (string-append (assoc-ref %build-inputs "cross-gcc") "/bin/" ,(%current-target-system) "-gcc") "gcc")) (string-append "PREFIX=" %output) (string-append "RPM_BUILD_ROOT=" %output)) #:tests? #f ; no tests #:phases (modify-phases %standard-phases (delete 'configure) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (install-file "atpdec" (string-append out "/bin"))) #t))))) (home-page "https://github.com/Xerbo/aptdec") (synopsis "NOAA Automatic Picture Transmission (APT) decoder") (description "Aptdec decodes Automatic Picture Transmission (APT) images. These are medium resolution images of the Earth transmitted by, among other satellites, the POES NOAA weather satellite series. These transmissions are on a frequency of 137 MHz. They can be received using an inexpensive antenna and a dedicated receiver.") (license license:gpl2+))) (define-public redsea (package (name "redsea") (version "0.18") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/windytan/redsea") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1y96g0ra2krjb2kypm8s5gdfia45yci4f36klsvyzg8d53v5cwhn")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases ;; The configure.ac file does not explicitly link against libiconv ;; except on Mac OS, causing the build to fail. This phase comments ;; out the original AC_SUBST macro (located inside a conditional) and ;; adds an explicit use of it underneath, so that libiconv is always ;; linked against. (add-after 'unpack 'patch-libiconv (lambda _ (substitute* "configure.ac" (("^ +AC_SUBST") "# AC_SUBST") (("esac") "esac\nAC_SUBST([ICONV], [\"-liconv\"])")) #t))))) (inputs `(("libiconv" ,libiconv) ("libsndfile" ,libsndfile) ("liquid-dsp" ,liquid-dsp))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake))) (home-page "https://github.com/windytan/redsea") (synopsis "Lightweight RDS to JSON decoder") (description "redsea is a lightweight command-line @dfn{FM Radio Data System} (FM-RDS) decoder. Redsea can be used with any RTL-SDR USB radio stick with the rtl_fm tool, or any other @dfn{software-defined radio} (SDR) via csdr, for example. It can also decode raw ASCII bitstream, the hex format used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).") (license license:expat))) (define-public gnuradio (package (name "gnuradio") (version "3.8.0.0") (source (origin (method url-fetch) (uri (string-append "https://www.gnuradio.org/releases/gnuradio/" "gnuradio-" version ".tar.xz")) (sha256 (base32 "0aw55gf5549b0fz2qdi7vplcmaf92bj34h40s34b2ycnqasv900r")) (modules '((guix build utils))) (snippet '(begin ;; Delete bundled volk to use the shared one. (delete-file-recursively "volk") #t)))) (build-system cmake-build-system) (native-inputs `(("doxygen" ,doxygen) ("ghostscript" ,ghostscript) ("orc" ,orc) ("pkg-config" ,pkg-config) ("python-cheetah" ,python-cheetah) ("python-mako" ,python-mako) ("python-pyzmq" ,python-pyzmq) ("python-scipy" ,python-scipy) ("python-sphinx" ,python-sphinx) ("swig" ,swig) ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts texlive-latex-amsmath ;; TODO: Add newunicodechar. texlive-latex-graphics))) ("xorg-server" ,xorg-server-for-tests))) (inputs `(("alsa-lib" ,alsa-lib) ("boost" ,boost) ("cairo" ,cairo) ("codec2" ,codec2) ("cppzmq" ,cppzmq) ("fftwf" ,fftwf) ("gmp" ,gmp) ("gsl" ,gsl) ("gsm" ,gsm) ("gtk+" ,gtk+) ("jack" ,jack-1) ("log4cpp" ,log4cpp) ("pango" ,pango) ("portaudio" ,portaudio) ("python" ,python) ("python-click" ,python-click) ("python-click-plugins" ,python-click-plugins) ("python-lxml" ,python-lxml) ("python-numpy" ,python-numpy) ("python-pycairo" ,python-pycairo) ("python-pygobject" ,python-pygobject) ("python-pyqt" ,python-pyqt) ("python-pyyaml" ,python-pyyaml) ("qtbase" ,qtbase) ("qwt" ,qwt) ("volk" ,volk) ("zeromq" ,zeromq))) (arguments `(#:modules ((guix build cmake-build-system) ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:) ((guix build python-build-system) #:prefix python:) (guix build utils) (ice-9 match)) #:imported-modules (,@%cmake-build-system-modules (guix build glib-or-gtk-build-system) (guix build python-build-system)) #:configure-flags '("-DENABLE_INTERNAL_VOLK=OFF") #:phases (modify-phases %standard-phases (add-after 'unpack 'fix-paths (lambda* (#:key inputs #:allow-other-keys) (let ((qwt (assoc-ref inputs "qwt"))) (substitute* "cmake/Modules/FindQwt.cmake" (("/usr/include") (string-append qwt "/include")) (("/usr/lib") (string-append qwt "/lib")) (("qwt6-\\$\\{QWT_QT_VERSION\\}") "qwt"))) (substitute* "cmake/Modules/GrPython.cmake" (("dist-packages") "site-packages")) (substitute* '("gr-vocoder/swig/vocoder_swig.i" "gr-vocoder/include/gnuradio/vocoder/codec2.h" "gr-vocoder/include/gnuradio/vocoder/freedv_api.h") (("