├── README.md ├── legacy ├── SoapyRemote │ ├── README.md │ ├── images │ │ └── pluto.dfu │ ├── overlay │ │ ├── bin │ │ │ ├── SoapySDRServer │ │ │ └── SoapySDRUtil │ │ ├── etc │ │ │ └── init.d │ │ │ │ ├── S94pluto-mods │ │ │ │ └── S95SoapyRemote │ │ ├── include │ │ │ └── SoapySDR │ │ │ │ ├── Config.h │ │ │ │ ├── Config.hpp │ │ │ │ ├── Constants.h │ │ │ │ ├── ConverterPrimatives.hpp │ │ │ │ ├── ConverterRegistry.hpp │ │ │ │ ├── Device.h │ │ │ │ ├── Device.hpp │ │ │ │ ├── Errors.h │ │ │ │ ├── Errors.hpp │ │ │ │ ├── Formats.h │ │ │ │ ├── Formats.hpp │ │ │ │ ├── Logger.h │ │ │ │ ├── Logger.hpp │ │ │ │ ├── Modules.h │ │ │ │ ├── Modules.hpp │ │ │ │ ├── Registry.hpp │ │ │ │ ├── Time.h │ │ │ │ ├── Time.hpp │ │ │ │ ├── Types.h │ │ │ │ ├── Types.hpp │ │ │ │ ├── Version.h │ │ │ │ └── Version.hpp │ │ ├── lib │ │ │ ├── SoapySDR │ │ │ │ └── modules0.7 │ │ │ │ │ ├── libPlutSDRSupport.so │ │ │ │ │ └── libremoteSupport.so │ │ │ ├── libSoapySDR.so │ │ │ ├── libSoapySDR.so.0.7 │ │ │ ├── libSoapySDR.so.0.7.0 │ │ │ ├── pkgconfig │ │ │ │ └── SoapySDR.pc │ │ │ ├── sysctl.d │ │ │ │ └── SoapySDRServer.conf │ │ │ └── systemd │ │ │ │ └── system │ │ │ │ └── SoapySDRServer.service │ │ └── share │ │ │ ├── cmake │ │ │ └── SoapySDR │ │ │ │ ├── SoapySDRConfig.cmake │ │ │ │ ├── SoapySDRConfigVersion.cmake │ │ │ │ └── SoapySDRUtil.cmake │ │ │ └── man │ │ │ └── man1 │ │ │ ├── SoapySDRServer.1 │ │ │ └── SoapySDRUtil.1 │ ├── soapy-success.txt │ ├── soapyplutosdr-success.txt │ ├── soapyremote-success.txt │ └── zynq_pluto_defconfig ├── dump1090 │ ├── README.md │ ├── images │ │ └── pluto.dfu │ ├── overlay │ │ ├── bin │ │ │ └── dump1090.sh │ │ ├── dump1090 │ │ │ ├── README.md │ │ │ ├── dump1090 │ │ │ ├── gmap.html │ │ │ ├── public_html │ │ │ │ ├── config.js │ │ │ │ ├── coolclock │ │ │ │ │ ├── coolclock.js │ │ │ │ │ ├── excanvas.js │ │ │ │ │ └── moreskins.js │ │ │ │ ├── extension.js │ │ │ │ ├── gmap.html │ │ │ │ ├── gmap.html_orig │ │ │ │ ├── options.js │ │ │ │ ├── planeObject.js │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ └── tools │ │ │ │ └── debug.html │ │ └── etc │ │ │ └── init.d │ │ │ ├── S94pluto-mods │ │ │ └── S95dump1090 │ └── zynq_pluto_defconfig └── openwebrx │ ├── README.md │ ├── images │ └── pluto.dfu │ ├── overlay │ ├── bin │ │ ├── SoapySDRUtil │ │ ├── csdr │ │ ├── csdr-fm │ │ ├── nmux │ │ ├── openwebrx.sh │ │ ├── readsettings.sh │ │ ├── rx_fm │ │ ├── rx_power │ │ ├── rx_sdr │ │ ├── savenow.sh │ │ ├── settings.sh │ │ └── temp-settings.sh │ ├── etc │ │ └── init.d │ │ │ ├── S94pluto-mods │ │ │ └── S95openwebrx │ ├── lib │ │ ├── SoapySDR │ │ │ └── modules0.7 │ │ │ │ └── libPlutSDRSupport.so │ │ ├── libSoapySDR.so │ │ ├── libSoapySDR.so.0.7 │ │ ├── libSoapySDR.so.0.7.0 │ │ ├── libcsdr.so.0.15 │ │ └── pkgconfig │ │ │ └── SoapySDR.pc │ └── openwebrx │ │ ├── CONTRIBUTING.md │ │ ├── CONTRIBUTORS │ │ ├── ICLA.txt │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── config_webrx.py │ │ ├── config_webrx.py_orig │ │ ├── config_webrx.pyc │ │ ├── csdr.py │ │ ├── csdr.pyc │ │ ├── htdocs │ │ ├── favicon.ico │ │ ├── gfx │ │ │ ├── font-expletus-sans │ │ │ │ ├── ExpletusSans-Medium.ttf │ │ │ │ └── OFL.txt │ │ │ ├── openwebrx-3d-spectrum.png │ │ │ ├── openwebrx-avatar-background.png │ │ │ ├── openwebrx-avatar.png │ │ │ ├── openwebrx-background-cool-blue.png │ │ │ ├── openwebrx-background-lingrad.png │ │ │ ├── openwebrx-ha5kfu-top-logo.png │ │ │ ├── openwebrx-logo-big.png │ │ │ ├── openwebrx-panel-log.png │ │ │ ├── openwebrx-panel-receiver.png │ │ │ ├── openwebrx-panel-status.png │ │ │ ├── openwebrx-play-button.png │ │ │ ├── openwebrx-rx-details-arrow-up.png │ │ │ ├── openwebrx-rx-details-arrow.png │ │ │ ├── openwebrx-scale-background.png │ │ │ ├── openwebrx-speaker-muted.png │ │ │ ├── openwebrx-speaker.png │ │ │ ├── openwebrx-squelch-button.png │ │ │ ├── openwebrx-top-logo.png │ │ │ ├── openwebrx-top-photo.jpg │ │ │ ├── openwebrx-waterfall-auto.png │ │ │ ├── openwebrx-waterfall-default.png │ │ │ ├── openwebrx-zoom-in-total.png │ │ │ ├── openwebrx-zoom-in.png │ │ │ ├── openwebrx-zoom-out-total.png │ │ │ └── openwebrx-zoom-out.png │ │ ├── inactive.html │ │ ├── index.wrx │ │ ├── jquery-3.2.1.min.js │ │ ├── jquery.nanoscroller.js │ │ ├── mathbox-bundle.min.js │ │ ├── mathbox.css │ │ ├── nanoscroller.css │ │ ├── openwebrx.css │ │ ├── openwebrx.js │ │ ├── retry.html │ │ ├── sdr.js │ │ └── upgrade.html │ │ ├── openwebrx.py │ │ ├── rxws.py │ │ ├── rxws.pyc │ │ ├── sdrhu.py │ │ └── sdrhu.pyc │ └── zynq_pluto_defconfig └── plutoweb ├── README.md ├── buildgz.sh ├── images ├── boot.dfu ├── boot.frm ├── pluto.dfu ├── pluto.frm └── uboot-env.dfu ├── overlay ├── bin │ ├── SoapySDRServer │ ├── SoapySDRUtil │ ├── arm.retrogram-plutosdr │ ├── csdr │ ├── dump1090.sh │ ├── leanchansim │ ├── leandvb │ ├── leandvb_tui.sh │ ├── leandvb_vt100ui.sh │ ├── leandvbtx │ ├── leaniiorx │ ├── leaniiotx │ ├── leanmlmrx │ ├── leansdrcat │ ├── leansdrscan │ ├── leansdrserv │ ├── leantsgen │ ├── minidemod-wfm │ ├── minidemod-wfm-atan │ ├── morfeus_tool_linux_armv7 │ ├── multimon-ng │ ├── nmux │ ├── openwebrx.sh │ ├── pow_pluto │ ├── readsettings.sh │ ├── retrogram-plutosdr.sh │ ├── rtl_433 │ ├── rx_fm │ ├── rx_power │ ├── rx_sdr │ ├── savenow.sh │ ├── settings.sh │ ├── soapyremote.sh │ ├── updatewatch.sh │ └── usbmounter.sh ├── dump1090 │ ├── dump1090 │ ├── gmap.html │ ├── public_html │ │ ├── config.js │ │ ├── coolclock │ │ │ ├── coolclock.js │ │ │ ├── excanvas.js │ │ │ └── moreskins.js │ │ ├── extension.js │ │ ├── gmap.html │ │ ├── gmap.html_orig │ │ ├── options.js │ │ ├── planeObject.js │ │ ├── script.js │ │ └── style.css │ └── tools │ │ └── debug.html ├── etc │ ├── httpd.conf │ ├── init.d │ │ ├── S94pluto-mods │ │ ├── S95autostart │ │ ├── S96SoapyRemote │ │ ├── S96dump1090 │ │ ├── S96leantrx │ │ ├── S96none │ │ ├── S96openwebrx │ │ ├── S97autoreboot │ │ └── S97autoupdate │ ├── motd.new │ ├── php.ini │ └── rtl_433 │ │ ├── chungear_bcf-0019x2.conf │ │ ├── energy_count_3000.conf │ │ ├── rtl_433.example.conf │ │ ├── silverline_doorbell.conf │ │ ├── steffen_switch.conf │ │ └── valeo_car_key.conf ├── leantrx │ ├── cgi-bin │ │ ├── cgiutils.sh │ │ ├── dvbrx.cgi │ │ ├── dvbtx.cgi │ │ ├── getstream.cgi │ │ ├── mlmrx.cgi │ │ ├── recordings.cgi │ │ └── sysinfo.cgi │ └── html │ │ ├── audioplayer.js │ │ ├── dvbrx.html │ │ ├── dvbrx.js │ │ ├── dvbtx.html │ │ ├── dvbtx.js │ │ ├── index.html │ │ ├── leantrx.css │ │ ├── mlmrx.html │ │ ├── mlmrx.js │ │ └── stdui.js ├── lib │ ├── SoapySDR │ │ └── modules0.8 │ │ │ ├── libPlutoSDRSupport.so │ │ │ └── libremoteSupport.so │ ├── libSoapySDR.so │ ├── libSoapySDR.so.0.8 │ ├── libSoapySDR.so.0.8.0 │ ├── libcsdr.so.0.15 │ ├── python2.7 │ │ └── site-packages │ │ │ ├── SoapySDR.py │ │ │ └── _SoapySDR.so │ └── sysctl.d │ │ └── SoapySDRServer.conf ├── moRFeus_listener │ ├── get_status.http │ ├── get_status.sh │ ├── morf_cli.sh │ └── morf_tcp.sh ├── openwebrx │ ├── config_webrx.py │ ├── config_webrx.pyc │ ├── csdr.py │ ├── csdr.pyc │ ├── htdocs │ │ ├── favicon.ico │ │ ├── gfx │ │ │ ├── font-expletus-sans │ │ │ │ ├── ExpletusSans-Medium.ttf │ │ │ │ └── OFL.txt │ │ │ ├── openwebrx-3d-spectrum.png │ │ │ ├── openwebrx-avatar-background.png │ │ │ ├── openwebrx-avatar.png │ │ │ ├── openwebrx-background-cool-blue.png │ │ │ ├── openwebrx-background-lingrad.png │ │ │ ├── openwebrx-ha5kfu-top-logo.png │ │ │ ├── openwebrx-logo-big.png │ │ │ ├── openwebrx-panel-log.png │ │ │ ├── openwebrx-panel-receiver.png │ │ │ ├── openwebrx-panel-status.png │ │ │ ├── openwebrx-play-button.png │ │ │ ├── openwebrx-rx-details-arrow-up.png │ │ │ ├── openwebrx-rx-details-arrow.png │ │ │ ├── openwebrx-scale-background.png │ │ │ ├── openwebrx-speaker-muted.png │ │ │ ├── openwebrx-speaker.png │ │ │ ├── openwebrx-squelch-button.png │ │ │ ├── openwebrx-top-logo.png │ │ │ ├── openwebrx-top-photo.jpg │ │ │ ├── openwebrx-waterfall-auto.png │ │ │ ├── openwebrx-waterfall-default.png │ │ │ ├── openwebrx-zoom-in-total.png │ │ │ ├── openwebrx-zoom-in.png │ │ │ ├── openwebrx-zoom-out-total.png │ │ │ └── openwebrx-zoom-out.png │ │ ├── inactive.html │ │ ├── index.wrx │ │ ├── jquery-3.2.1.min.js │ │ ├── jquery.nanoscroller.js │ │ ├── mathbox-bundle.min.js │ │ ├── mathbox.css │ │ ├── nanoscroller.css │ │ ├── openwebrx.css │ │ ├── openwebrx.js │ │ ├── retry.html │ │ ├── sdr.js │ │ └── upgrade.html │ ├── openwebrx.py │ ├── rxws.py │ ├── rxws.pyc │ ├── sdrhu.py │ └── sdrhu.pyc ├── pluto_power │ ├── plot.gnu │ ├── plot.sh │ └── sna.sh ├── plutoscripts │ ├── CW-pluto.py │ ├── DATV │ │ ├── datv-rx-leandvb.sh │ │ ├── datv-test.sh │ │ ├── datv-tx-mpeg2.sh │ │ ├── datv-tx-mpeg4.sh │ │ ├── datv-tx-test.sh │ │ ├── mpeg2-download.sh │ │ └── mpeg4-download.sh │ ├── nbfm-rx.sh │ └── wbfm-rx.sh ├── usr │ └── share │ │ └── terminfo │ │ └── l │ │ └── linux └── www │ ├── README │ ├── dump1090.README.txt │ ├── minidemod.README.txt │ ├── moRFeus_listener.README.txt │ ├── openwebrx.README.txt │ ├── pluto_power.README.txt │ └── plutoscripts.README.txt │ ├── Transfer │ └── DROP_FILES_HERE_250MB_LIMIT │ ├── cgi-bin │ ├── control.cgi │ ├── leantrx │ └── upload.cgi │ ├── colorbox.css │ ├── formdata.js │ ├── getsettings.php │ ├── images │ ├── controls.png │ ├── dump1090.png │ ├── img01.jpg │ ├── img03.gif │ ├── loading.gif │ ├── openwebrx.png │ └── soapyremote.png │ ├── index.htm │ ├── index.html │ ├── jquery.colorbox-min.js │ ├── leantrx │ ├── settings.htm │ └── style.css ├── update3.tgz ├── update3.tgz.md5sum └── zynq_pluto_defconfig /README.md: -------------------------------------------------------------------------------- 1 | # PlutoWeb 2 | *** This repo is huge, I don't suggest you clone it but rather grab the latest tagged release source code bundle. https://github.com/unixpunk/PlutoWeb/releases/latest 3 | 4 | Use latest plutoweb image for most flexibility going forward. All other single-program images moved to legacy. 5 | 6 | Suggested method of flashing the FIRST TIME is dfu: uboot-env.dfu, boot.dfu, pluto.dfu 7 | 8 | From then on you just need to flash the pluto.dfu or drop the pluto.frm in the USB mass storage device and eject, you don't need to reflash the others until the next plutosdr-fw update. 9 | 10 | Suggested method of configuration is config.txt in the USB mass storage device. 11 | 12 | If you don't want to flash these images to test, tar up the overlay folder from legacy/dump1090 or legacy/SoapyRemote, scp tarball root@pluto.local:./ then ssh root@pluto.local cd / && tar xf root/tarball && ls /bin. 13 | 14 | Create new issues with suggestions for other software to package into images for the PlutoSDR and I'll see what I can do. 15 | 16 | # Notice 17 | The PlutoSDR was designed to be hacked...its a learning tool. There is NO security on it. It should NEVER be presented to the internet publicly. Any remote access should be done via VPN or other secure tunnel like SSH. This ESPECIALLY includes PlutoWeb itself! 18 | 19 | # Features 20 | PlutoWeb interface up and running thanks to ImDroided 21 |
PlutoWeb has the ability to select which program to auto-start at boot 22 |
SoapyRemote automatically allows both normal PlutoSDR via USB and remotely via OTG Ethernet/Wifi 23 |
OpenWebRX supports persistent settings - change them via USB config.txt file, via SSH settings.sh command or via the PlutoWeb interface 24 |
Persistent sdr.hu settings allowing the pluto+ethernet adapter to be listed on sdr.hu (search pluto to find any online) 25 |
LeanTRX (and leansdr) - Until there is a leantrx button on PlutoWeb, select SoapyRemote instead. Then visit the /leantrx/ URL on your pluto. 26 | 27 | # Known Issues 28 | Wifi doesn't work at all? Anyone have it working? Please open an issue with details on the device and any steps taken to get it working. 29 | 30 | # Install 31 | There are 2 ways to flash the PlutoSDR the first is: 32 | 33 | First put the boot.frm on the mass storage and eject it, then wait. Once its done and back up, put the pluto.frm on the mass storage and eject it. Then it should boot, reboot once and be ready to go. If using USB, just enter the 192.168.2.1 IP into your browser. 34 | 35 | The other way to flash the PlutoSDR is with the dfu utility. From the plutoweb/images directory run 36 | 37 | sudo dfu-util -a firmware.dfu -D pluto.dfu 38 | 39 | If you have issues after and it wont come back up you will need to flash boot.dfu 40 | 41 | sudo dfu-util -a boot.dfu -D boot.dfu 42 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/README.md: -------------------------------------------------------------------------------- 1 | # SoapyRemote 2 | 3 | Flash the pluto image and wait for it to boot and then reboot again. This is the script enabling dual-core mode and the 70-6000mhz mod and rebooting. It will only happen once after each flash. 4 | 5 | This image also happens to function as a normal PlutoSDR when plugged into USB like normal, so this is like adding remote support. Enjoy. 6 | 7 | SoapyRemote starts automatically at boot. My working test case is using an OTG NIC on the 'USB' port and 1a or larger power adapter on the 'power' port. It uses DHCP. 8 | 9 | Make sure you have SoapySDR and SoapyRemote installed locally as well as a SDR app that supports SoapySDR. I tested with CubicSDR and I'm able to get up to 3msps as usable audio, gets choppy but can still understand clearly. It should automatically be detected. 10 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/images/pluto.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/SoapyRemote/images/pluto.dfu -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/bin/SoapySDRServer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/SoapyRemote/overlay/bin/SoapySDRServer -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/bin/SoapySDRUtil: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/SoapyRemote/overlay/bin/SoapySDRUtil -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/etc/init.d/S94pluto-mods: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | start() { 4 | REBOOTNEEDED=0 5 | echo "Checking for maxcpus and ad9364 mods..." 6 | export `fw_printenv maxcpus` 7 | export `fw_printenv attr_val` 8 | ## Check/set dual-core mode 9 | if [ $maxcpus == 1 ]; then 10 | echo "Enabling dual-core mode..." 11 | fw_setenv maxcpus 12 | REBOOTNEEDED=1 13 | fi 14 | ## Check/set 70-6000mhz trick (default is 325-3800Mhz) 15 | if [ "$attr_val" != "ad9364" ]; then 16 | echo "Enabling 70-6000Mhz mod..." 17 | fw_setenv attr_name compatible 18 | fw_setenv attr_val "ad9364" 19 | REBOOTNEEDED=1 20 | fi 21 | if [ $REBOOTNEEDED == 1 ]; then 22 | echo "Rebooting!" 23 | pluto_reboot reset 24 | fi 25 | echo "Mods already in place, continuing." 26 | } 27 | 28 | stop() { 29 | echo "Nothing to stop." 30 | } 31 | 32 | # See how we were called. 33 | case "$1" in 34 | start) 35 | start 36 | ;; 37 | stop) 38 | stop 39 | ;; 40 | *) 41 | echo "Usage: $0 {start|stop}" 42 | exit 1 43 | esac 44 | 45 | exit $? 46 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/etc/init.d/S95SoapyRemote: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | [ -f /bin/SoapySDRServer ] || exit 0 4 | 5 | start() { 6 | printf "Starting SoapyRemote: " 7 | /bin/SoapySDRServer --bind & 8 | echo "done" 9 | } 10 | 11 | 12 | stop() { 13 | printf "Stopping SoapyRemote: " 14 | killall SoapySDRServer 15 | echo "done" 16 | } 17 | 18 | restart() { 19 | stop 20 | start 21 | } 22 | 23 | # See how we were called. 24 | case "$1" in 25 | start) 26 | start 27 | ;; 28 | stop) 29 | stop 30 | ;; 31 | restart|reload) 32 | restart 33 | ;; 34 | *) 35 | echo "Usage: $0 {start|stop|reload|restart}" 36 | exit 1 37 | esac 38 | 39 | exit $? 40 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Config.h: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Config.h 3 | /// 4 | /// Common macro definitions for Soapy SDR library API export. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2014-2014 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | // http://gcc.gnu.org/wiki/Visibility 13 | // Generic helper definitions for shared library support 14 | #if defined _WIN32 || defined __CYGWIN__ 15 | #define SOAPY_SDR_HELPER_DLL_IMPORT __declspec(dllimport) 16 | #define SOAPY_SDR_HELPER_DLL_EXPORT __declspec(dllexport) 17 | #define SOAPY_SDR_HELPER_DLL_LOCAL 18 | #else 19 | #if __GNUC__ >= 4 20 | #define SOAPY_SDR_HELPER_DLL_IMPORT __attribute__ ((visibility ("default"))) 21 | #define SOAPY_SDR_HELPER_DLL_EXPORT __attribute__ ((visibility ("default"))) 22 | #define SOAPY_SDR_HELPER_DLL_LOCAL __attribute__ ((visibility ("hidden"))) 23 | #else 24 | #define SOAPY_SDR_HELPER_DLL_IMPORT 25 | #define SOAPY_SDR_HELPER_DLL_EXPORT 26 | #define SOAPY_SDR_HELPER_DLL_LOCAL 27 | #endif 28 | #endif 29 | 30 | // Now we use the generic helper definitions above to define SOAPY_SDR_API and SOAPY_SDR_LOCAL. 31 | // SOAPY_SDR_API is used for the public API symbols. It either DLL imports or DLL exports (or does nothing for static build) 32 | // SOAPY_SDR_LOCAL is used for non-api symbols. 33 | 34 | #define SOAPY_SDR_DLL //always building a DLL 35 | 36 | #ifdef SOAPY_SDR_DLL // defined if SOAPY is compiled as a DLL 37 | #ifdef SOAPY_SDR_DLL_EXPORTS // defined if we are building the SOAPY DLL (instead of using it) 38 | #define SOAPY_SDR_API SOAPY_SDR_HELPER_DLL_EXPORT 39 | #define SOAPY_SDR_EXTERN 40 | #else 41 | #define SOAPY_SDR_API SOAPY_SDR_HELPER_DLL_IMPORT 42 | #define SOAPY_SDR_EXTERN extern 43 | #endif // SOAPY_SDR_DLL_EXPORTS 44 | #define SOAPY_SDR_LOCAL SOAPY_SDR_HELPER_DLL_LOCAL 45 | #else // SOAPY_SDR_DLL is not defined: this means SOAPY is a static lib. 46 | #define SOAPY_SDR_API 47 | #define SOAPY_SDR_LOCAL 48 | #define SOAPY_SDR_EXTERN 49 | #endif // SOAPY_SDR_DLL 50 | 51 | #include 52 | 53 | #ifndef _MSC_VER 54 | #include 55 | #endif 56 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Config.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Config.hpp 3 | /// 4 | /// Common macro definitions for Soapy SDR library API export. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2014-2014 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | #include 14 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Constants.h: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Constants.h 3 | /// 4 | /// Constants used in the device API. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2014-2016 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | 14 | /*! 15 | * Constant to represent the transmit direction 16 | */ 17 | #define SOAPY_SDR_TX 0 18 | 19 | /*! 20 | * Constant to represent the receive direction 21 | */ 22 | #define SOAPY_SDR_RX 1 23 | 24 | /*! 25 | * Indicate end of burst for transmit or receive. 26 | * For write, end of burst if set by the caller. 27 | * For read, end of burst is set by the driver. 28 | */ 29 | #define SOAPY_SDR_END_BURST (1 << 1) 30 | 31 | /*! 32 | * Indicates that the time stamp is valid. 33 | * For write, the caller must set has time when timeNs is provided. 34 | * For read, the driver sets has time when timeNs is provided. 35 | */ 36 | #define SOAPY_SDR_HAS_TIME (1 << 2) 37 | 38 | /*! 39 | * Indicates that stream terminated prematurely. 40 | * This is the flag version of an overflow error 41 | * that indicates an overflow with the end samples. 42 | */ 43 | #define SOAPY_SDR_END_ABRUPT (1 << 3) 44 | 45 | /*! 46 | * Indicates transmit or receive only a single packet. 47 | * Applicable when the driver fragments samples into packets. 48 | * For write, the user sets this flag to only send a single packet. 49 | * For read, the user sets this flag to only receive a single packet. 50 | */ 51 | #define SOAPY_SDR_ONE_PACKET (1 << 4) 52 | 53 | /*! 54 | * Indicate that this read call and the next results in a fragment. 55 | * Used when the implementation has an underlying packet interface. 56 | * The caller can use this indicator and the SOAPY_SDR_ONE_PACKET flag 57 | * on subsequent read stream calls to re-align with packet boundaries. 58 | */ 59 | #define SOAPY_SDR_MORE_FRAGMENTS (1 << 5) 60 | 61 | /*! 62 | * Indicate that the stream should wait for an external trigger event. 63 | * This flag might be used with the flags argument in any of the 64 | * stream API calls. The trigger implementation is hardware-specific. 65 | */ 66 | #define SOAPY_SDR_WAIT_TRIGGER (1 << 6) 67 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/ConverterPrimatives.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/ConverterPrimatives.hpp 3 | /// 4 | /// inline Soapy real Format Converter primatives. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2017-2017 Coburn Wightman 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | 14 | namespace SoapySDR 15 | { 16 | 17 | const uint32_t U32_ZERO_OFFSET = uint32_t(1<<31); 18 | const uint16_t U16_ZERO_OFFSET = uint16_t(1<<15); 19 | const uint8_t U8_ZERO_OFFSET = uint8_t(1<<7); 20 | 21 | const uint32_t S32_FULL_SCALE = (U32_ZERO_OFFSET-1); 22 | const uint16_t S16_FULL_SCALE = (U16_ZERO_OFFSET-1); 23 | const uint8_t S8_FULL_SCALE = (U8_ZERO_OFFSET-1); 24 | 25 | /*! 26 | * Conversion primatives for converting real values between Soapy Formats. 27 | * \param from the value to convert from 28 | * \return the converted value 29 | */ 30 | 31 | // type conversion: float <> signed integers 32 | 33 | inline int32_t F32toS32(float from){ 34 | return int32_t(from * S32_FULL_SCALE); 35 | } 36 | inline float S32toF32(int32_t from){ 37 | return float(from) / S32_FULL_SCALE; 38 | } 39 | 40 | inline int16_t F32toS16(float from){ 41 | return int16_t(from * S16_FULL_SCALE); 42 | } 43 | inline float S16toF32(int16_t from){ 44 | return float(from) / S16_FULL_SCALE; 45 | } 46 | 47 | inline int8_t F32toS8(float from){ 48 | return int8_t(from * S8_FULL_SCALE); 49 | } 50 | inline float S8toF32(int8_t from){ 51 | return float(from) / S8_FULL_SCALE; 52 | } 53 | 54 | 55 | // type conversion: offset binary <> two's complement (signed) integers 56 | 57 | inline int32_t U32toS32(uint32_t from){ 58 | return int32_t(from - U32_ZERO_OFFSET); 59 | } 60 | 61 | inline uint32_t S32toU32(int32_t from){ 62 | return uint32_t(from) + U32_ZERO_OFFSET; 63 | } 64 | 65 | inline int16_t U16toS16(uint16_t from){ 66 | return int16_t(from - U16_ZERO_OFFSET); 67 | } 68 | 69 | inline uint16_t S16toU16(int16_t from){ 70 | return uint16_t(from) + U16_ZERO_OFFSET; 71 | } 72 | 73 | inline int8_t U8toS8(uint8_t from){ 74 | return int8_t(from - U8_ZERO_OFFSET); 75 | } 76 | 77 | inline uint8_t S8toU8(int8_t from){ 78 | return uint8_t(from) + U8_ZERO_OFFSET; 79 | } 80 | 81 | // size conversion: signed <> signed 82 | 83 | inline int16_t S32toS16(int32_t from){ 84 | return int16_t(from >> 16); 85 | } 86 | inline int32_t S16toS32(int16_t from){ 87 | return int32_t(from << 16); 88 | } 89 | 90 | inline int8_t S16toS8(int16_t from){ 91 | return int8_t(from >> 8); 92 | } 93 | inline int16_t S8toS16(int8_t from){ 94 | return int16_t(from << 8); 95 | } 96 | 97 | // compound conversions 98 | 99 | // float <> unsigned (type and size) 100 | 101 | inline uint32_t F32toU32(float from){ 102 | return S32toU32(F32toS32(from)); 103 | } 104 | inline float U32toF32(uint32_t from){ 105 | return S32toF32(U32toS32(from)); 106 | } 107 | 108 | inline uint16_t F32toU16(float from){ 109 | return S16toU16(F32toS16(from)); 110 | } 111 | inline float U16toF32(uint16_t from){ 112 | return S16toF32(U16toS16(from)); 113 | } 114 | 115 | inline uint8_t F32toU8(float from){ 116 | return S8toU8(F32toS8(from)); 117 | } 118 | inline float U8toF32(uint8_t from){ 119 | return S8toF32(U8toS8(from)); 120 | } 121 | 122 | // signed <> unsigned (type and size) 123 | 124 | inline uint16_t S32toU16(int32_t from){ 125 | return S16toU16(S32toS16(from)); 126 | } 127 | inline int32_t U16toS32(uint16_t from){ 128 | return S16toS32(U16toS16(from)); 129 | } 130 | 131 | inline uint8_t S32toU8(int32_t from){ 132 | return S8toU8(S16toS8(S32toS16(from))); 133 | } 134 | inline int32_t U8toS32(uint8_t from){ 135 | return S16toS32(S8toS16(U8toS8(from))); 136 | } 137 | 138 | inline uint8_t S16toU8(int16_t from){ 139 | return S8toU8(S16toS8(from)); 140 | } 141 | inline int16_t U8toS16(uint8_t from){ 142 | return S8toS16(U8toS8(from)); 143 | } 144 | 145 | inline uint16_t S8toU16(int8_t from){ 146 | return S16toU16(S8toS16(from)); 147 | } 148 | inline int8_t U16toS8(uint16_t from){ 149 | return S16toS8(U16toS16(from)); 150 | } 151 | 152 | 153 | } 154 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Errors.h: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Errors.h 3 | /// 4 | /// Error codes used in the device API. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2014-2015 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | 14 | #ifdef __cplusplus 15 | extern "C" { 16 | #endif 17 | 18 | /*! 19 | * Convert a error code to a string for printing purposes. 20 | * If the error code is unrecognized, errToStr returns "UNKNOWN". 21 | * \param errorCode a negative integer return code 22 | * \return a pointer to a string representing the error 23 | */ 24 | SOAPY_SDR_API const char *SoapySDR_errToStr(const int errorCode); 25 | 26 | #ifdef __cplusplus 27 | } 28 | #endif 29 | 30 | /*! 31 | * Returned when read has a timeout. 32 | */ 33 | #define SOAPY_SDR_TIMEOUT (-1) 34 | 35 | /*! 36 | * Returned for non-specific stream errors. 37 | */ 38 | #define SOAPY_SDR_STREAM_ERROR (-2) 39 | 40 | /*! 41 | * Returned when read has data corruption. 42 | * For example, the driver saw a malformed packet. 43 | */ 44 | #define SOAPY_SDR_CORRUPTION (-3) 45 | 46 | /*! 47 | * Returned when read has an overflow condition. 48 | * For example, and internal buffer has filled. 49 | */ 50 | #define SOAPY_SDR_OVERFLOW (-4) 51 | 52 | /*! 53 | * Returned when a requested operation or flag setting 54 | * is not supported by the underlying implementation. 55 | */ 56 | #define SOAPY_SDR_NOT_SUPPORTED (-5) 57 | 58 | /*! 59 | * Returned when a the device encountered a stream time 60 | * which was expired (late) or too early to process. 61 | */ 62 | #define SOAPY_SDR_TIME_ERROR (-6) 63 | 64 | /*! 65 | * Returned when write caused an underflow condition. 66 | * For example, a continuous stream was interrupted. 67 | */ 68 | #define SOAPY_SDR_UNDERFLOW (-7) 69 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Errors.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Errors.hpp 3 | /// 4 | /// Error codes used in the device API. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2015-2015 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | #include 14 | 15 | namespace SoapySDR 16 | { 17 | 18 | /*! 19 | * Convert a error code to a string for printing purposes. 20 | * If the error code is unrecognized, errToStr returns "UNKNOWN". 21 | * \param errorCode a negative integer return code 22 | * \return a pointer to a string representing the error 23 | */ 24 | SOAPY_SDR_API const char *errToStr(const int errorCode); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Formats.h: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Formats.h 3 | /// 4 | /// Format strings used in the stream API. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2015-2015 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | #include //size_t 14 | 15 | //! Complex 64-bit floats (complex double) 16 | #define SOAPY_SDR_CF64 "CF64" 17 | 18 | //! Complex 32-bit floats (complex float) 19 | #define SOAPY_SDR_CF32 "CF32" 20 | 21 | //! Complex signed 32-bit integers (complex int32) 22 | #define SOAPY_SDR_CS32 "CS32" 23 | 24 | //! Complex unsigned 32-bit integers (complex uint32) 25 | #define SOAPY_SDR_CU32 "CU32" 26 | 27 | //! Complex signed 16-bit integers (complex int16) 28 | #define SOAPY_SDR_CS16 "CS16" 29 | 30 | //! Complex unsigned 16-bit integers (complex uint16) 31 | #define SOAPY_SDR_CU16 "CU16" 32 | 33 | //! Complex signed 12-bit integers (3 bytes) 34 | #define SOAPY_SDR_CS12 "CS12" 35 | 36 | //! Complex unsigned 12-bit integers (3 bytes) 37 | #define SOAPY_SDR_CU12 "CU12" 38 | 39 | //! Complex signed 8-bit integers (complex int8) 40 | #define SOAPY_SDR_CS8 "CS8" 41 | 42 | //! Complex unsigned 8-bit integers (complex uint8) 43 | #define SOAPY_SDR_CU8 "CU8" 44 | 45 | //! Complex signed 4-bit integers (1 byte) 46 | #define SOAPY_SDR_CS4 "CS4" 47 | 48 | //! Complex unsigned 4-bit integers (1 byte) 49 | #define SOAPY_SDR_CU4 "CU4" 50 | 51 | //! Real 64-bit floats (double) 52 | #define SOAPY_SDR_F64 "F64" 53 | 54 | //! Real 32-bit floats (float) 55 | #define SOAPY_SDR_F32 "F32" 56 | 57 | //! Real signed 32-bit integers (int32) 58 | #define SOAPY_SDR_S32 "S32" 59 | 60 | //! Real unsigned 32-bit integers (uint32) 61 | #define SOAPY_SDR_U32 "U32" 62 | 63 | //! Real signed 16-bit integers (int16) 64 | #define SOAPY_SDR_S16 "S16" 65 | 66 | //! Real unsigned 16-bit integers (uint16) 67 | #define SOAPY_SDR_U16 "U16" 68 | 69 | //! Real signed 8-bit integers (int8) 70 | #define SOAPY_SDR_S8 "S8" 71 | 72 | //! Real unsigned 8-bit integers (uint8) 73 | #define SOAPY_SDR_U8 "U8" 74 | 75 | #ifdef __cplusplus 76 | extern "C" { 77 | #endif 78 | 79 | /*! 80 | * Get the size of a single element in the specified format. 81 | * \param format a supported format string 82 | * \return the size of an element in bytes 83 | */ 84 | SOAPY_SDR_API size_t SoapySDR_formatToSize(const char *format); 85 | 86 | #ifdef __cplusplus 87 | } 88 | #endif 89 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Formats.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Formats.hpp 3 | /// 4 | /// Format strings used in the stream API. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2015-2015 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | namespace SoapySDR 18 | { 19 | 20 | /*! 21 | * Get the size of a single element in the specified format. 22 | * \param format a supported format string 23 | * \return the size of an element in bytes 24 | */ 25 | SOAPY_SDR_API size_t formatToSize(const std::string &format); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Logger.h: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Logger.h 3 | /// 4 | /// Logger API for SoapySDR devices. 5 | /// Implementations should use the logger rather than stdio. 6 | /// The default log handler prints to stderr. 7 | /// 8 | /// \copyright 9 | /// Copyright (c) 2014-2015 Josh Blum 10 | /// SPDX-License-Identifier: BSL-1.0 11 | /// 12 | 13 | #pragma once 14 | #include 15 | #include 16 | 17 | /*! 18 | * The available priority levels for log messages. 19 | * 20 | * The default log level threshold is SOAPY_SDR_INFO. 21 | * Log messages with lower priorities are dropped. 22 | * 23 | * The default threshold can be set via the 24 | * SOAPY_SDR_LOG_LEVEL environment variable. 25 | * Set SOAPY_SDR_LOG_LEVEL to the string value: 26 | * "WARNING", "ERROR", "DEBUG", etc... 27 | * or set it to the equivalent integer value. 28 | */ 29 | typedef enum 30 | { 31 | SOAPY_SDR_FATAL = 1, //!< A fatal error. The application will most likely terminate. This is the highest priority. 32 | SOAPY_SDR_CRITICAL = 2, //!< A critical error. The application might not be able to continue running successfully. 33 | SOAPY_SDR_ERROR = 3, //!< An error. An operation did not complete successfully, but the application as a whole is not affected. 34 | SOAPY_SDR_WARNING = 4, //!< A warning. An operation completed with an unexpected result. 35 | SOAPY_SDR_NOTICE = 5, //!< A notice, which is an information with just a higher priority. 36 | SOAPY_SDR_INFO = 6, //!< An informational message, usually denoting the successful completion of an operation. 37 | SOAPY_SDR_DEBUG = 7, //!< A debugging message. 38 | SOAPY_SDR_TRACE = 8, //!< A tracing message. This is the lowest priority. 39 | SOAPY_SDR_SSI = 9, //!< Streaming status indicators such as "U" (underflow) and "O" (overflow). 40 | } SoapySDRLogLevel; 41 | 42 | //! Compile-time detection macro for SSI feature 43 | #define SOAPY_SDR_SSI SOAPY_SDR_SSI 44 | 45 | #ifdef __cplusplus 46 | extern "C" { 47 | #endif 48 | 49 | /*! 50 | * Send a message to the registered logger. 51 | * \param logLevel a possible logging level 52 | * \param message a logger message string 53 | */ 54 | SOAPY_SDR_API void SoapySDR_log(const SoapySDRLogLevel logLevel, const char *message); 55 | 56 | /*! 57 | * Send a message to the registered logger. 58 | * \param logLevel a possible logging level 59 | * \param format a printf style format string 60 | * \param argList an argument list for the formatter 61 | */ 62 | SOAPY_SDR_API void SoapySDR_vlogf(const SoapySDRLogLevel logLevel, const char *format, va_list argList); 63 | 64 | /*! 65 | * Send a message to the registered logger. 66 | * \param logLevel a possible logging level 67 | * \param format a printf style format string 68 | */ 69 | static inline void SoapySDR_logf(const SoapySDRLogLevel logLevel, const char *format, ...) 70 | { 71 | va_list argList; 72 | va_start(argList, format); 73 | SoapySDR_vlogf(logLevel, format, argList); 74 | va_end(argList); 75 | } 76 | 77 | /*! 78 | * Typedef for the registered log handler function. 79 | */ 80 | typedef void (*SoapySDRLogHandler)(const SoapySDRLogLevel logLevel, const char *message); 81 | 82 | /*! 83 | * Register a new system log handler. 84 | * Platforms should call this to replace the default stdio handler. 85 | */ 86 | SOAPY_SDR_API void SoapySDR_registerLogHandler(const SoapySDRLogHandler handler); 87 | 88 | /*! 89 | * Set the log level threshold. 90 | * Log messages with lower priority are dropped. 91 | */ 92 | SOAPY_SDR_API void SoapySDR_setLogLevel(const SoapySDRLogLevel logLevel); 93 | 94 | #ifdef __cplusplus 95 | } 96 | #endif 97 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Logger.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Logger.hpp 3 | /// 4 | /// Logger API for SoapySDR devices. 5 | /// Implementations should use the logger rather than stdio. 6 | /// The default log handler prints to stderr. 7 | /// 8 | /// \copyright 9 | /// Copyright (c) 2014-2015 Josh Blum 10 | /// SPDX-License-Identifier: BSL-1.0 11 | /// 12 | 13 | #pragma once 14 | #include 15 | #include 16 | #include 17 | 18 | namespace SoapySDR 19 | { 20 | 21 | typedef SoapySDRLogLevel LogLevel; 22 | 23 | /*! 24 | * Send a message to the registered logger. 25 | * \param logLevel a possible logging level 26 | * \param message a logger message string 27 | */ 28 | SOAPY_SDR_API void log(const LogLevel logLevel, const std::string &message); 29 | 30 | /*! 31 | * Send a message to the registered logger. 32 | * \param logLevel a possible logging level 33 | * \param format a printf style format string 34 | * \param argList an argument list for the formatter 35 | */ 36 | SOAPY_SDR_API void vlogf(const SoapySDRLogLevel logLevel, const char *format, va_list argList); 37 | 38 | /*! 39 | * Send a message to the registered logger. 40 | * \param logLevel a possible logging level 41 | * \param format a printf style format string 42 | */ 43 | static inline void logf(const SoapySDRLogLevel logLevel, const char *format, ...) 44 | { 45 | va_list argList; 46 | va_start(argList, format); 47 | SoapySDR::vlogf(logLevel, format, argList); 48 | va_end(argList); 49 | } 50 | 51 | /*! 52 | * Typedef for the registered log handler function. 53 | */ 54 | typedef SoapySDRLogHandler LogHandler; 55 | 56 | /*! 57 | * Register a new system log handler. 58 | * Platforms should call this to replace the default stdio handler. 59 | */ 60 | SOAPY_SDR_API void registerLogHandler(const LogHandler &handler); 61 | 62 | /*! 63 | * Set the log level threshold. 64 | * Log messages with lower priority are dropped. 65 | */ 66 | SOAPY_SDR_API void setLogLevel(const LogLevel logLevel); 67 | 68 | } 69 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Modules.h: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Modules.h 3 | /// 4 | /// Utility functions to deal with modules. 5 | /// These utility functions are made available for advanced usage. 6 | /// For most use cases, the API will automatically load modules. 7 | /// 8 | /// \copyright 9 | /// Copyright (c) 2014-2018 Josh Blum 10 | /// SPDX-License-Identifier: BSL-1.0 11 | /// 12 | 13 | #pragma once 14 | #include 15 | #include 16 | #include //size_t 17 | 18 | #ifdef __cplusplus 19 | extern "C" { 20 | #endif 21 | 22 | //! Query the root installation path 23 | SOAPY_SDR_API const char *SoapySDR_getRootPath(void); 24 | 25 | /*! 26 | * The list of paths automatically searched by loadModules(). 27 | * \param [out] length the number of elements in the result. 28 | * \return a list of automatically searched file paths 29 | */ 30 | SOAPY_SDR_API char **SoapySDR_listSearchPaths(size_t *length); 31 | 32 | /*! 33 | * List all modules found in default path. 34 | * The result is an array of strings owned by the caller. 35 | * \param [out] length the number of elements in the result. 36 | * \return a list of file paths to loadable modules 37 | */ 38 | SOAPY_SDR_API char **SoapySDR_listModules(size_t *length); 39 | 40 | /*! 41 | * List all modules found in the given path. 42 | * The result is an array of strings owned by the caller. 43 | * \param path a directory on the system 44 | * \param [out] length the number of elements in the result. 45 | * \return a list of file paths to loadable modules 46 | */ 47 | SOAPY_SDR_API char **SoapySDR_listModulesPath(const char *path, size_t *length); 48 | 49 | /*! 50 | * Load a single module given its file system path. 51 | * The caller must free the result error string. 52 | * \param path the path to a specific module file 53 | * \return an error message, empty on success 54 | */ 55 | SOAPY_SDR_API char *SoapySDR_loadModule(const char *path); 56 | 57 | /*! 58 | * List all registration loader errors for a given module path. 59 | * The resulting dictionary contains all registry entry names 60 | * provided by the specified module. The value of each entry 61 | * is an error message string or empty on successful load. 62 | * \param path the path to a specific module file 63 | * \return a dictionary of registry names to error messages 64 | */ 65 | SOAPY_SDR_API SoapySDRKwargs SoapySDR_getLoaderResult(const char *path); 66 | 67 | /*! 68 | * Get a version string for the specified module. 69 | * Modules may optionally provide version strings. 70 | * \param path the path to a specific module file 71 | * \return a version string or empty if no version provided 72 | */ 73 | SOAPY_SDR_API char *SoapySDR_getModuleVersion(const char *path); 74 | 75 | /*! 76 | * Unload a module that was loaded with loadModule(). 77 | * The caller must free the result error string. 78 | * \param path the path to a specific module file 79 | * \return an error message, empty on success 80 | */ 81 | SOAPY_SDR_API char *SoapySDR_unloadModule(const char *path); 82 | 83 | /*! 84 | * Load the support modules installed on this system. 85 | * This call will only actually perform the load once. 86 | * Subsequent calls are a NOP. 87 | */ 88 | SOAPY_SDR_API void SoapySDR_loadModules(void); 89 | 90 | #ifdef __cplusplus 91 | } 92 | #endif 93 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Modules.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Modules.hpp 3 | /// 4 | /// Utility functions to deal with modules. 5 | /// These utility functions are made available for advanced usage. 6 | /// For most use cases, the API will automatically load modules. 7 | /// 8 | /// \copyright 9 | /// Copyright (c) 2014-2018 Josh Blum 10 | /// SPDX-License-Identifier: BSL-1.0 11 | /// 12 | 13 | #pragma once 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | namespace SoapySDR 20 | { 21 | 22 | //! Query the root installation path 23 | SOAPY_SDR_API std::string getRootPath(void); 24 | 25 | /*! 26 | * The list of paths automatically searched by loadModules(). 27 | * \return a list of automatically searched file paths 28 | */ 29 | SOAPY_SDR_API std::vector listSearchPaths(void); 30 | 31 | /*! 32 | * List all modules found in default path. 33 | * \return a list of file paths to loadable modules 34 | */ 35 | SOAPY_SDR_API std::vector listModules(void); 36 | 37 | /*! 38 | * List all modules found in the given path. 39 | * \param path a directory on the system 40 | * \return a list of file paths to loadable modules 41 | */ 42 | SOAPY_SDR_API std::vector listModules(const std::string &path); 43 | 44 | /*! 45 | * Load a single module given its file system path. 46 | * \param path the path to a specific module file 47 | * \return an error message, empty on success 48 | */ 49 | SOAPY_SDR_API std::string loadModule(const std::string &path); 50 | 51 | /*! 52 | * List all registration loader errors for a given module path. 53 | * The resulting dictionary contains all registry entry names 54 | * provided by the specified module. The value of each entry 55 | * is an error message string or empty on successful load. 56 | * \param path the path to a specific module file 57 | * \return a dictionary of registry names to error messages 58 | */ 59 | SOAPY_SDR_API Kwargs getLoaderResult(const std::string &path); 60 | 61 | /*! 62 | * Get a version string for the specified module. 63 | * Modules may optionally provide version strings. 64 | * \param path the path to a specific module file 65 | * \return a version string or empty if no version provided 66 | */ 67 | SOAPY_SDR_API std::string getModuleVersion(const std::string &path); 68 | 69 | /*! 70 | * Unload a module that was loaded with loadModule(). 71 | * \param path the path to a specific module file 72 | * \return an error message, empty on success 73 | */ 74 | SOAPY_SDR_API std::string unloadModule(const std::string &path); 75 | 76 | /*! 77 | * Load the support modules installed on this system. 78 | * This call will only actually perform the load once. 79 | * Subsequent calls are a NOP. 80 | */ 81 | SOAPY_SDR_API void loadModules(void); 82 | 83 | //! \cond 84 | //! Internal call to register version with a module during load 85 | class SOAPY_SDR_API ModuleVersion 86 | { 87 | public: 88 | ModuleVersion(const std::string &version); 89 | }; 90 | //! \endcond 91 | 92 | } 93 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Registry.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Registry.hpp 3 | /// 4 | /// Device factory registration API. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2014-2015 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | namespace SoapySDR 20 | { 21 | 22 | //! forward declaration of device 23 | class Device; 24 | 25 | //! typedef for a device enumeration function 26 | typedef KwargsList (*FindFunction)(const Kwargs &); 27 | 28 | //! typedef for a device factory function 29 | typedef Device* (*MakeFunction)(const Kwargs &); 30 | 31 | //! typedef for a dictionary of find functions 32 | typedef std::map FindFunctions; 33 | 34 | //! typedef for a dictionary of make functions 35 | typedef std::map MakeFunctions; 36 | 37 | /*! 38 | * A registry object loads device functions into the global registry. 39 | */ 40 | class SOAPY_SDR_API Registry 41 | { 42 | public: 43 | 44 | /*! 45 | * Register a SDR device find and make function. 46 | * \param name a unique name to identify the entry 47 | * \param find the find function returns an arg list 48 | * \param make the make function returns a device sptr 49 | * \param abi this value must be SOAPY_SDR_ABI_VERSION 50 | */ 51 | Registry(const std::string &name, const FindFunction &find, const MakeFunction &make, const std::string &abi); 52 | 53 | //! Cleanup this registry entry 54 | ~Registry(void); 55 | 56 | /*! 57 | * List all loaded find functions. 58 | * \return a dictionary of registry entry names to find functions 59 | */ 60 | static FindFunctions listFindFunctions(void); 61 | 62 | /*! 63 | * List all loaded make functions. 64 | * \return a dictionary of registry entry names to make functions 65 | */ 66 | static MakeFunctions listMakeFunctions(void); 67 | 68 | private: 69 | std::string _name; 70 | }; 71 | 72 | } 73 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Time.h: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Time.h 3 | /// 4 | /// Utility functions to convert time and ticks. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2015-2015 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | 14 | #ifdef __cplusplus 15 | extern "C" { 16 | #endif 17 | 18 | /*! 19 | * Convert a tick count into a time in nanoseconds using the tick rate. 20 | * \param ticks a integer tick count 21 | * \param rate the ticks per second 22 | * \return the time in nanoseconds 23 | */ 24 | SOAPY_SDR_API long long SoapySDR_ticksToTimeNs(const long long ticks, const double rate); 25 | 26 | /*! 27 | * Convert a time in nanoseconds into a tick count using the tick rate. 28 | * \param timeNs time in nanoseconds 29 | * \param rate the ticks per second 30 | * \return the integer tick count 31 | */ 32 | SOAPY_SDR_API long long SoapySDR_timeNsToTicks(const long long timeNs, const double rate); 33 | 34 | #ifdef __cplusplus 35 | } 36 | #endif 37 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Time.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Time.hpp 3 | /// 4 | /// Utility functions to convert time and ticks. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2015-2015 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | #include 14 | 15 | namespace SoapySDR 16 | { 17 | 18 | /*! 19 | * Convert a tick count into a time in nanoseconds using the tick rate. 20 | * \param ticks a integer tick count 21 | * \param rate the ticks per second 22 | * \return the time in nanoseconds 23 | */ 24 | static inline long long ticksToTimeNs(const long long ticks, const double rate); 25 | 26 | /*! 27 | * Convert a time in nanoseconds into a tick count using the tick rate. 28 | * \param timeNs time in nanoseconds 29 | * \param rate the ticks per second 30 | * \return the integer tick count 31 | */ 32 | static inline long long timeNsToTicks(const long long timeNs, const double rate); 33 | 34 | } 35 | 36 | static inline long long SoapySDR::ticksToTimeNs(const long long ticks, const double rate) 37 | { 38 | return SoapySDR_ticksToTimeNs(ticks, rate); 39 | } 40 | 41 | static inline long long SoapySDR::timeNsToTicks(const long long timeNs, const double rate) 42 | { 43 | return SoapySDR_timeNsToTicks(timeNs, rate); 44 | } 45 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Types.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Types.hpp 3 | /// 4 | /// Misc data type definitions used in the API. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2014-2017 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | namespace SoapySDR 19 | { 20 | 21 | //! Typedef for a dictionary of key-value string arguments 22 | typedef std::map Kwargs; 23 | 24 | /*! 25 | * Convert a markup string to a key-value map. 26 | * The markup format is: "key0=value0, key1=value1" 27 | */ 28 | SOAPY_SDR_API Kwargs KwargsFromString(const std::string &markup); 29 | 30 | /*! 31 | * Convert a key-value map to a markup string. 32 | * The markup format is: "key0=value0, key1=value1" 33 | */ 34 | SOAPY_SDR_API std::string KwargsToString(const Kwargs &args); 35 | 36 | //! Typedef for a list of key-word dictionaries 37 | typedef std::vector KwargsList; 38 | 39 | /*! 40 | * A simple min/max numeric range pair 41 | */ 42 | class SOAPY_SDR_API Range 43 | { 44 | public: 45 | 46 | //! Create an empty range (0.0, 0.0) 47 | Range(void); 48 | 49 | //! Create a min/max range 50 | Range(const double minimum, const double maximum, const double step=0.0); 51 | 52 | //! Get the range minimum 53 | double minimum(void) const; 54 | 55 | //! Get the range maximum 56 | double maximum(void) const; 57 | 58 | //! Get the range step size 59 | double step(void) const; 60 | 61 | private: 62 | double _min, _max, _step; 63 | }; 64 | 65 | /*! 66 | * Typedef for a list of min/max range pairs. 67 | * Overall minimum: rl.front().minimum(); 68 | * Overall maximum: rl.back().maximum(); 69 | */ 70 | typedef std::vector RangeList; 71 | 72 | /*! 73 | * Argument info describes a key/value argument. 74 | */ 75 | class SOAPY_SDR_API ArgInfo 76 | { 77 | public: 78 | 79 | //! Default constructor 80 | ArgInfo(void); 81 | 82 | //! The key used to identify the argument (required) 83 | std::string key; 84 | 85 | /*! 86 | * The default value of the argument when not specified (required) 87 | * Numbers should use standard floating point and integer formats. 88 | * Boolean values should be represented as "true" and "false". 89 | */ 90 | std::string value; 91 | 92 | //! The displayable name of the argument (optional, use key if empty) 93 | std::string name; 94 | 95 | //! A brief description about the argument (optional) 96 | std::string description; 97 | 98 | //! The units of the argument: dB, Hz, etc (optional) 99 | std::string units; 100 | 101 | //! The data type of the argument (required) 102 | enum Type {BOOL, INT, FLOAT, STRING} type; 103 | 104 | /*! 105 | * The range of possible numeric values (optional) 106 | * When specified, the argument should be restricted to this range. 107 | * The range is only applicable to numeric argument types. 108 | */ 109 | Range range; 110 | 111 | /*! 112 | * A discrete list of possible values (optional) 113 | * When specified, the argument should be restricted to this options set. 114 | */ 115 | std::vector options; 116 | 117 | /*! 118 | * A discrete list of displayable names for the enumerated options (optional) 119 | * When not specified, the option value itself can be used as a display name. 120 | */ 121 | std::vector optionNames; 122 | }; 123 | 124 | /*! 125 | * Typedef for a list of Argument infos. 126 | */ 127 | typedef std::vector ArgInfoList; 128 | 129 | } 130 | 131 | inline double SoapySDR::Range::minimum(void) const 132 | { 133 | return _min; 134 | } 135 | 136 | inline double SoapySDR::Range::maximum(void) const 137 | { 138 | return _max; 139 | } 140 | 141 | inline double SoapySDR::Range::step(void) const 142 | { 143 | return _step; 144 | } 145 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/include/SoapySDR/Version.hpp: -------------------------------------------------------------------------------- 1 | /// 2 | /// \file SoapySDR/Version.hpp 3 | /// 4 | /// Utility functions to query version information. 5 | /// 6 | /// \copyright 7 | /// Copyright (c) 2014-2016 Josh Blum 8 | /// SPDX-License-Identifier: BSL-1.0 9 | /// 10 | 11 | #pragma once 12 | #include 13 | #include 14 | #include 15 | 16 | namespace SoapySDR 17 | { 18 | 19 | /*! 20 | * Get the SoapySDR library API version as a string. 21 | * The format of the version string is major.minor.increment, 22 | * where the digits are taken directly from SOAPY_SDR_API_VERSION. 23 | */ 24 | SOAPY_SDR_API std::string getAPIVersion(void); 25 | 26 | /*! 27 | * Get the ABI version string that the library was built against. 28 | * A client can compare SOAPY_SDR_ABI_VERSION to getABIVersion() 29 | * to check for ABI incompatibility before using the library. 30 | * If the values are not equal then the client code was 31 | * compiled against a different ABI than the library. 32 | */ 33 | SOAPY_SDR_API std::string getABIVersion(void); 34 | 35 | /*! 36 | * Get the library version and build information string. 37 | * The format of the version string is major.minor.patch-buildInfo. 38 | * This function is commonly used to identify the software back-end 39 | * to the user for command-line utilities and graphical applications. 40 | */ 41 | SOAPY_SDR_API std::string getLibVersion(void); 42 | 43 | } 44 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/lib/SoapySDR/modules0.7/libPlutSDRSupport.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/SoapyRemote/overlay/lib/SoapySDR/modules0.7/libPlutSDRSupport.so -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/lib/SoapySDR/modules0.7/libremoteSupport.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/SoapyRemote/overlay/lib/SoapySDR/modules0.7/libremoteSupport.so -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/lib/libSoapySDR.so: -------------------------------------------------------------------------------- 1 | libSoapySDR.so.0.7 -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/lib/libSoapySDR.so.0.7: -------------------------------------------------------------------------------- 1 | libSoapySDR.so.0.7.0 -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/lib/libSoapySDR.so.0.7.0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/SoapyRemote/overlay/lib/libSoapySDR.so.0.7.0 -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/lib/pkgconfig/SoapySDR.pc: -------------------------------------------------------------------------------- 1 | prefix=/home/steve/Desktop/SDR/Pluto/staging 2 | exec_prefix=${prefix} 3 | libdir=${exec_prefix}/lib 4 | includedir=${prefix}/include 5 | 6 | Name: Soapy SDR 7 | Description: Vendor and platform neutral SDR interface library. 8 | URL: https://github.com/pothosware/SoapySDR/wiki 9 | Version: 0.7.0 10 | Requires: 11 | Requires.private: 12 | Conflicts: 13 | Cflags: -I${includedir} 14 | Libs: -L${libdir} -lSoapySDR 15 | Libs.private: 16 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/lib/sysctl.d/SoapySDRServer.conf: -------------------------------------------------------------------------------- 1 | #SoapyRemote: Increase the default socket buffer sizes 2 | #to fit the default size requested for client and server. 3 | net.core.rmem_max=104857600 4 | net.core.wmem_max=104857600 5 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/lib/systemd/system/SoapySDRServer.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=SoapyRemote network server 3 | Wants=network-online.target 4 | After=network-online.target 5 | 6 | [Service] 7 | ExecStart=/home/steve/Desktop/SDR/Pluto/staging/bin/SoapySDRServer --bind 8 | KillMode=process 9 | Restart=on-failure 10 | 11 | [Install] 12 | WantedBy=multi-user.target 13 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/share/cmake/SoapySDR/SoapySDRConfigVersion.cmake: -------------------------------------------------------------------------------- 1 | set(PACKAGE_FIND_NAME "SoapySDR") 2 | set(PACKAGE_VERSION "0.7.0-ga42ee56a") 3 | 4 | # Check whether the requested PACKAGE_FIND_VERSION is compatible 5 | if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") 6 | set(PACKAGE_VERSION_COMPATIBLE FALSE) 7 | else() 8 | set(PACKAGE_VERSION_COMPATIBLE TRUE) 9 | if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") 10 | set(PACKAGE_VERSION_EXACT TRUE) 11 | endif() 12 | endif() 13 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/share/man/man1/SoapySDRServer.1: -------------------------------------------------------------------------------- 1 | .\" SoapySDRServer.1 - manpage for SoapySDRServer 2 | .\" 3 | .\" 4 | .TH SOAPYSDRSERVER 1 2016\-10\-28 "SoapyRemote 0.3.2" 5 | .SH NAME 6 | \fBSoapySDRServer\fR \- provide access to local SoapySDR devices over network 7 | .\" ---------------------------------------------------------------------------- 8 | .SH SYNOPSIS 9 | \fBSoapySDRServer\fR [\fIOPTIONS\fR] 10 | .\" ---------------------------------------------------------------------------- 11 | .SH DESCRIPTION 12 | SoapySDRServer is a server that exports all locally available SoapySDR devices 13 | over the network. 14 | On the other side, a SoapyRemote module for SoapySDR connects to this server and 15 | provides the server's modules locally. 16 | .\" ---------------------------------------------------------------------------- 17 | .SH OPTIONS 18 | .TP 19 | \fB\-\-bind\fR[=\fIIP\fR[:\fIPORT\fR]] 20 | Run server. 21 | If an \fIIP\fR argument is not given, bind to the default port 55132 on all 22 | local network addresses. 23 | \fIIP\fR is the IPv4 or IPv6 address to bind to. 24 | If the either of the special values "0.0.0.0" or "[::]" for \fIIP\fR is given 25 | it will bind to all local addresses. 26 | \fIPORT\fR is an optional port number to use instead of the default. 27 | .TP 28 | \fB\-\-help\fR 29 | Display help and exit. 30 | .\" ---------------------------------------------------------------------------- 31 | .SH HOMEPAGE 32 | SoapySDRServer is part of the 33 | .UR https://github.com/pothosware/SoapyRemote/wiki 34 | SoapyRemote project 35 | .UE . 36 | .\" ---------------------------------------------------------------------------- 37 | .SH AUTHORS 38 | The SoapyRemote client and server were written mostly by 39 | .MT josh@pothosware.com 40 | Josh Blum 41 | .ME 42 | with additional contributions from Bastille Networks. 43 | .\" 44 | .\"This man page was originally written for the Debian project by 45 | .\".MT aeb@debian.org 46 | .\"Andreas Bombe 47 | .\".ME . 48 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/overlay/share/man/man1/SoapySDRUtil.1: -------------------------------------------------------------------------------- 1 | .\" SoapySDRUtil.1 - manpage for SoapySDRUtil 2 | .\" 3 | .\" 4 | .TH SOAPYSDRUTIL 1 2016\-10\-28 "SoapySDR 0.5.4" 5 | .SH NAME 6 | \fBSoapySDRUtil\fR \- query and change module information of SoapySDR 7 | .\" ---------------------------------------------------------------------------- 8 | .SH SYNOPSIS 9 | \fBSoapySDRUtil\fR [\fIOPTIONS\fR] 10 | .\" ---------------------------------------------------------------------------- 11 | .SH DESCRIPTION 12 | SoapySDRUtil is a command line application that provides basic 13 | diagnostic utility for SoapySDR by printing installation information, 14 | available modules, discovered devices, and tests on instantiated devices. 15 | .\" ---------------------------------------------------------------------------- 16 | .SH OPTIONS 17 | .TP 18 | \fB\-\-info\fR 19 | Print general information on the library, list all found hardware support 20 | modules and available factories. 21 | .TP 22 | \fB\-\-find\fR[="\fISPEC\fR"] 23 | Discover available devices, restricted to those matching the \fISPEC\fR if 24 | given. 25 | If no matching devices are found it will exit with exit status 1. 26 | .TP 27 | \fB\-\-make\fR[="\fISPEC\fR"] 28 | Open and close device matching \fISPEC\fR if possible. 29 | If \fISPEC\fR is not given, the first discovered device is opened. 30 | .TP 31 | \fB\-\-probe\fR[="\fISPEC\fR"] 32 | Show detailed information on all devices or the devices matching \fISPEC\fR if 33 | given. 34 | .TP 35 | \fB\-\-check\fR=\fINAME\fR 36 | Check and print if driver module named \fINAME\fR is present. 37 | If it is not found it will exit with exit status 1. 38 | .\" ---------------------------------------------------------------------------- 39 | .SH HOMEPAGE 40 | SoapySDRUtil is part of the 41 | .UR https://github.com/pothosware/SoapySDR/wiki 42 | SoapySDR project 43 | .UE . 44 | .\" ---------------------------------------------------------------------------- 45 | .SH AUTHORS 46 | The SoapySDR library, including SoapySDRUtil, was written mostly by 47 | .MT josh@pothosware.com 48 | Josh Blum 49 | .ME . 50 | .\" 51 | .\"This man page was originally written for the Debian project by 52 | .\".MT aeb@debian.org 53 | .\"Andreas Bombe 54 | .\".ME . 55 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/soapy-success.txt: -------------------------------------------------------------------------------- 1 | Toolchain: (staging is the sysroot of the firmware as it sits on the device) 2 | SET(ROOTFS "/home/steve/Desktop/SDR/Pluto/staging") 3 | SET(MULTIARCH "arm-linux-gnueabi") 4 | SET(CMAKE_SYSTEM_NAME "Linux") 5 | SET(CMAKE_SYSTEM_PROCESSOR "armv7") 6 | SET(CMAKE_C_COMPILER arm-xilinx-linux-gnueabi-gcc) 7 | SET(CMAKE_CXX_COMPILER arm-xilinx-linux-gnueabi-g++) 8 | SET(CMAKE_SYSROOT "${ROOTFS}") 9 | SET(CMAKE_FIND_ROOT_PATH "${ROOTFS}") 10 | SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 11 | SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 12 | SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 13 | SET(CPPFLAGS "-DG_DISABLE_CAST_CHECKS -DNDEBUG -g1 -O0 -I${ROOTFS}/usr/include -isystem ${ROOTFS}/usr/include") 14 | SET(ENV{CFLAGS} "${CPPFLAGS}") 15 | SET(ENV{CXXFLAGS} "${CPPFLAGS}") 16 | SET(ENV{LDFLAGS} "-Wl,-rpath-link,${ROOTFS}/lib") 17 | 18 | cmake: 19 | cmake -DCMAKE_TOOLCHAIN_FILE=../../Toolchain-Pluto.cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/home/steve/Desktop/SDR/Pluto/staging -DENABLE_TESTS:BOOL=OFF -DENABLE_PYTHON3:BOOL=OFF -DENABLE_DOCS:BOOL=OFF -DENABLE_PYTHON:BOOL=OFF -DSOAPY_SDR_ROOT:PATH=/home/steve/Desktop/SDR/Pluto/staging 20 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/soapyplutosdr-success.txt: -------------------------------------------------------------------------------- 1 | Toolchain: (staging is the sysroot of the firmware as it sits on the device) 2 | SET(ROOTFS "/home/steve/Desktop/SDR/Pluto/staging") 3 | SET(MULTIARCH "arm-linux-gnueabi") 4 | SET(CMAKE_SYSTEM_NAME "Linux") 5 | SET(CMAKE_SYSTEM_PROCESSOR "armv7") 6 | SET(CMAKE_C_COMPILER arm-xilinx-linux-gnueabi-gcc) 7 | SET(CMAKE_CXX_COMPILER arm-xilinx-linux-gnueabi-g++) 8 | SET(CMAKE_SYSROOT "${ROOTFS}") 9 | SET(CMAKE_FIND_ROOT_PATH "${ROOTFS}") 10 | SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 11 | SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 12 | SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 13 | SET(CPPFLAGS "-DG_DISABLE_CAST_CHECKS -DNDEBUG -g1 -O0 -I${ROOTFS}/usr/include -isystem ${ROOTFS}/usr/include") 14 | SET(ENV{CFLAGS} "${CPPFLAGS}") 15 | SET(ENV{CXXFLAGS} "${CPPFLAGS}") 16 | SET(ENV{LDFLAGS} "-Wl,-rpath-link,${ROOTFS}/lib") 17 | 18 | cmake: 19 | cmake -DCMAKE_TOOLCHAIN_FILE=../../Toolchain-Pluto.cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/home/steve/Desktop/SDR/Pluto/staging 20 | -------------------------------------------------------------------------------- /legacy/SoapyRemote/soapyremote-success.txt: -------------------------------------------------------------------------------- 1 | Toolchain: (staging is the sysroot of the firmware as it sits on the device) 2 | SET(ROOTFS "/home/steve/Desktop/SDR/Pluto/staging") 3 | SET(MULTIARCH "arm-linux-gnueabi") 4 | SET(CMAKE_SYSTEM_NAME "Linux") 5 | SET(CMAKE_SYSTEM_PROCESSOR "armv7") 6 | SET(CMAKE_C_COMPILER arm-xilinx-linux-gnueabi-gcc) 7 | SET(CMAKE_CXX_COMPILER arm-xilinx-linux-gnueabi-g++) 8 | SET(CMAKE_SYSROOT "${ROOTFS}") 9 | SET(CMAKE_FIND_ROOT_PATH "${ROOTFS}") 10 | SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 11 | SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 12 | SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 13 | SET(CPPFLAGS "-DG_DISABLE_CAST_CHECKS -DNDEBUG -g1 -O0 -I${ROOTFS}/usr/include -isystem ${ROOTFS}/usr/include") 14 | SET(ENV{CFLAGS} "${CPPFLAGS}") 15 | SET(ENV{CXXFLAGS} "${CPPFLAGS}") 16 | SET(ENV{LDFLAGS} "-Wl,-rpath-link,${ROOTFS}/lib") 17 | 18 | cmake: 19 | ke -DCMAKE_TOOLCHAIN_FILE=../../Toolchain-Pluto.cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/home/steve/Desktop/SDR/Pluto/staging 20 | -------------------------------------------------------------------------------- /legacy/dump1090/README.md: -------------------------------------------------------------------------------- 1 | # dump1090 2 | 3 | Flash the pluto image and wait for it to boot and then reboot again. This is the script enabling dual-core mode and rebooting. It will only happen once after each flash. 4 | 5 | dump1090 starts automatically at boot. My working test case is using an OTG NIC on the 'USB' port and 1a or larger power adapter on the 'power' port. It uses DHCP, normally you can just use http://pluto.local:8080 and it will just work, even if your PC is connected to the 'USB' port. 6 | 7 | This isn't the feature-rich fork of dump1090, so its mostly useful as a standalone ADS-B map, not much in the way of external integration available. 8 | 9 | Can temporarily change options: ssh root@pluto.local "/etc/init.d/S95dump1090 stop && vi /bin/dump1090.sh && /etc/init.d/S95dump1090 start" 10 | -------------------------------------------------------------------------------- /legacy/dump1090/images/pluto.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/dump1090/images/pluto.dfu -------------------------------------------------------------------------------- /legacy/dump1090/overlay/bin/dump1090.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ## Run dump1090 with the best options available in this fork 4 | cd /dump1090 5 | ./dump1090 --net --net-http-port 8080 --gain 89 --aggressive 6 | -------------------------------------------------------------------------------- /legacy/dump1090/overlay/dump1090/dump1090: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/dump1090/overlay/dump1090/dump1090 -------------------------------------------------------------------------------- /legacy/dump1090/overlay/dump1090/public_html/config.js: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------- 2 | // 3 | // This file is to configure the configurable settings. 4 | // Load this file before script.js file at gmap.html. 5 | // 6 | // -------------------------------------------------------- 7 | 8 | // -- Output Settings ------------------------------------- 9 | // Show metric values 10 | Metric = false; // true or false 11 | 12 | // -- Map settings ---------------------------------------- 13 | // The Latitude and Longitude in decimal format 14 | //CONST_CENTERLAT = 45.0; 15 | //CONST_CENTERLON = 9.0; 16 | // The google maps zoom level, 0 - 16, lower is further out 17 | //CONST_ZOOMLVL = 5; 18 | 19 | // -- Marker settings ------------------------------------- 20 | // The default marker color 21 | MarkerColor = "rgb(127, 127, 127)"; 22 | SelectedColor = "rgb(225, 225, 225)"; 23 | StaleColor = "rgb(190, 190, 190)"; 24 | 25 | // -- Site Settings --------------------------------------- 26 | SiteShow = false; // true or false 27 | // The Latitude and Longitude in decimal format 28 | SiteLat = 45.0; 29 | SiteLon = 9.0; 30 | 31 | SiteCircles = true; // true or false (Only shown if SiteShow is true) 32 | // In nautical miles or km (depending settings value 'Metric') 33 | SiteCirclesDistances = new Array(100,150,200); 34 | 35 | -------------------------------------------------------------------------------- /legacy/dump1090/overlay/dump1090/public_html/extension.js: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------- 2 | // 3 | // This file is so users can modify how the page acts 4 | // without diving to deep in the code. This way we can 5 | // also try out or hold custom code for ourselves and 6 | // not check it into the repo. 7 | // 8 | // There is a div id'ed as plane_extension for use with 9 | // this javascript file. 10 | // ----------------------------------------------------- 11 | 12 | function extendedInitalize() { 13 | // Write your initalization here 14 | // Gets called just before the 1-sec function call loop is setup 15 | } 16 | 17 | function extendedPulse() { 18 | // This will get called every second after all the main functions 19 | } 20 | -------------------------------------------------------------------------------- /legacy/dump1090/overlay/dump1090/public_html/gmap.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DUMP1090 18 | 19 | 20 | 23 |
24 |
25 |
26 | 58 |
59 | Squak 7x00 is reported and shown.
60 | This is most likely an error in reciving or decoding.
61 | Please do not call the local authorities, they already know about it if it is valid squak. 62 |
63 |
64 | 65 | 66 | -------------------------------------------------------------------------------- /legacy/dump1090/overlay/dump1090/public_html/gmap.html_orig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DUMP1090 18 | 19 | 20 | 23 |
24 |
25 |
26 | 58 |
59 | Squak 7x00 is reported and shown.
60 | This is most likely an error in reciving or decoding.
61 | Please do not call the local authorities, they already know about it if it is valid squak. 62 |
63 |
64 | 65 | 66 | -------------------------------------------------------------------------------- /legacy/dump1090/overlay/dump1090/public_html/options.js: -------------------------------------------------------------------------------- 1 | var listKMLType = ['Approch', 'Departure', 'Transit', 'Custom1', 'Custom2']; 2 | var listKMLs = localStorage['listKMLs'] || []; 3 | 4 | function optionsInitalize() { 5 | // Write your initalization here 6 | // Gets called just before the 1-sec function call loop is setup 7 | $( "#dialog-modal" ).dialog({ 8 | height: 140, 9 | modal: true, 10 | autoOpen: false, 11 | closeOnEscape: false 12 | }); 13 | } 14 | 15 | function optionsModal() { 16 | $( "#dialog-modal" ).dialog( "open"); 17 | } 18 | -------------------------------------------------------------------------------- /legacy/dump1090/overlay/dump1090/public_html/style.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | margin: 0; padding: 0; background-color: #ffffff; font-family: Tahoma, Sans-Serif; 3 | font-size: 10pt; overflow: auto; height: 100%; 4 | } 5 | div#map_container { float: left; width: 100%; height: 100%; } 6 | div#map_canvas { height: 100%; margin-right: 420px; } 7 | 8 | div#sidebar_container { float: left; width: 410px; margin-left: -410px; height: 100%; overflow: auto; } 9 | 10 | div#SpecialSquawkWarning { position: absolute; bottom: 25px; right: 430px; border: 2px solid red; 11 | background-color: #FFFFA3; opacity: 0.75; filter:alpha(opacity=75); padding: 5px; 12 | display: none; text-align: center; } 13 | 14 | table#optionsTabs { width: 100%; font-size: small; font-family: monospace; background-color: #ddd; 15 | border: 1px; border-color: #000000;} 16 | 17 | #tableinfo, #sudo_buttons { font-size: x-small; font-family: monospace; } 18 | 19 | .vPosition { font-weight: bold; background-color: #d5ffd5; } 20 | .squawk7500 { font-weight: bold; background-color: #ff5555; } 21 | .squawk7600 { font-weight: bold; background-color: #00ffff; } 22 | .squawk7700 { font-weight: bold; background-color: #ffff00; } 23 | .selected { background-color: #dddddd; } 24 | .plane_table_row { cursor: pointer; } 25 | 26 | #selectedinfotitle { font-size: larger; } 27 | #selectedinfo { font-size: small; } 28 | #selectedinfo a { text-decoration: none; color: blue; font-size: x-small;} 29 | #selectedinfo.dim { opacity: 0.3; filter:alpha(opacity=30); /* For IE8 and earlier */ } 30 | 31 | .pointer { cursor: pointer; } 32 | 33 | -------------------------------------------------------------------------------- /legacy/dump1090/overlay/etc/init.d/S94pluto-mods: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | start() { 4 | REBOOTNEEDED=0 5 | echo "Checking for maxcpus and ad9364 mods..." 6 | export `fw_printenv maxcpus` 7 | export `fw_printenv attr_val` 8 | ## Check/set dual-core mode 9 | if [ $maxcpus == 1 ]; then 10 | echo "Enabling dual-core mode..." 11 | fw_setenv maxcpus 12 | REBOOTNEEDED=1 13 | fi 14 | ## Check/set 70-6000mhz trick (default is 325-3800Mhz) 15 | if [ "$attr_val" != "ad9364" ]; then 16 | echo "Enabling 70-6000Mhz mod..." 17 | fw_setenv attr_name compatible 18 | fw_setenv attr_val "ad9364" 19 | REBOOTNEEDED=1 20 | fi 21 | if [ $REBOOTNEEDED == 1 ]; then 22 | echo "Rebooting!" 23 | pluto_reboot reset 24 | fi 25 | echo "Mods already in place, continuing." 26 | } 27 | 28 | stop() { 29 | echo "Nothing to stop." 30 | } 31 | 32 | restart() { 33 | stop 34 | start 35 | } 36 | 37 | # See how we were called. 38 | case "$1" in 39 | start) 40 | start 41 | ;; 42 | stop) 43 | stop 44 | ;; 45 | restart|reload) 46 | restart 47 | ;; 48 | *) 49 | echo "Usage: $0 {start|stop|reload|restart}" 50 | exit 1 51 | esac 52 | 53 | exit $? 54 | -------------------------------------------------------------------------------- /legacy/dump1090/overlay/etc/init.d/S95dump1090: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | [ -f /bin/dump1090.sh ] || exit 0 4 | 5 | start() { 6 | printf "Starting dump1090: " 7 | /bin/dump1090.sh & 8 | echo "done" 9 | } 10 | 11 | 12 | stop() { 13 | printf "Stopping dump1090: " 14 | killall dump1090 15 | echo "done" 16 | } 17 | 18 | restart() { 19 | stop 20 | start 21 | } 22 | 23 | # See how we were called. 24 | case "$1" in 25 | start) 26 | start 27 | ;; 28 | stop) 29 | stop 30 | ;; 31 | restart|reload) 32 | restart 33 | ;; 34 | *) 35 | echo "Usage: $0 {start|stop|reload|restart}" 36 | exit 1 37 | esac 38 | 39 | exit $? 40 | -------------------------------------------------------------------------------- /legacy/openwebrx/README.md: -------------------------------------------------------------------------------- 1 | # OpenWebRX 2 | 3 | Flash the pluto image and wait for it to boot and then reboot again. This is the script enabling dual-core mode and the 70-6000mhz mod and rebooting. It will only happen once after each flash. 4 | 5 | OpenWebRX now starts automatically at boot. My working test case is using an OTG NIC on the 'USB' port and 1a or larger power adapter on the 'power' port. It uses DHCP, normally you can just use http://pluto.local:8073 and it will just work, even if your PC is connected to the 'USB' port and not a OTG NIC. 6 | 7 | *** We can now persist settings across reboots if you don't like my default Chicago PD range. ssh root@pluto.local and run either temp-settings.sh or settings.sh. The former will not write to nvram, just update via file and restart OpenWebRX. Once you have settings you like, then use settings.sh to set them permanently. 8 | -------------------------------------------------------------------------------- /legacy/openwebrx/images/pluto.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/images/pluto.dfu -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/SoapySDRUtil: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/bin/SoapySDRUtil -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/csdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/bin/csdr -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/csdr-fm: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | : ' 3 | Copyright (c) 2014, Andras Retzler 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 19 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | ' 26 | 27 | USAGE="csdr-fm: a script to listen to FM radio with RTL-SDR and csdr. 28 | 29 | usage: 30 | csdr-fm frequency_mhz [gain_db] 31 | 32 | example: 33 | csdr-fm 89.5 34 | csdr-fm 89.5 30 35 | 36 | " 37 | GAIN=30 38 | if [ $# -eq 2 ]; then GAIN="$2"; fi 39 | if [ $# -eq 0 ]; then echo "$USAGE"; exit -1; fi 40 | 41 | rtl_sdr -s 2400000 -f `python -c "print int($1*1e6)"` -g $GAIN - | csdr convert_u8_f | csdr fir_decimate_cc 10 0.05 HAMMING | csdr fmdemod_quadri_cf | csdr fractional_decimator_ff 5 | csdr deemphasis_wfm_ff 48000 50e-6 | csdr convert_f_i16 | mplayer -cache 1024 -quiet -rawaudio samplesize=2:channels=1:rate=48000 -demuxer rawaudio - 42 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/nmux: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/bin/nmux -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/openwebrx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ## Pull in any saved settings or use defaults 3 | . /bin/readsettings.sh 4 | 5 | ## This is a workaround for an issue where SoapySDR remembers its install path 6 | ## and tries to use it as its 'root' directory...Fake it. 7 | if [ ! -d "/home/steve/Desktop/SDR/Pluto" ]; then 8 | mkdir -p /home/steve/Desktop/SDR/Pluto 9 | ln -s / /home/steve/Desktop/SDR/Pluto/staging 10 | fi 11 | 12 | ## Start openwebrx 13 | cd /openwebrx 14 | python openwebrx.py 15 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/readsettings.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ## Source this file for either default or previous settings 3 | 4 | ## Use temp settings if they exist instead of pulling from NVRAM 5 | if [ -f /root/temp-settings ]; then 6 | echo "Temp settings found, using them..." 7 | . /root/temp-settings 8 | if [ -z ${center_freq} ]; then 9 | export center_freq=460250000 10 | fi 11 | if [ -z ${start_freq} ]; then 12 | export start_freq=460102200 13 | fi 14 | if [ -z ${samp_rate} ]; then 15 | export samp_rate=600000 16 | fi 17 | if [ -z ${start_mod} ]; then 18 | export start_mod="nfm" 19 | fi 20 | if [ -z ${rf_gain} ]; then 21 | export rf_gain=89 22 | fi 23 | if [ -z ${ppm} ]; then 24 | export ppm=0 25 | fi 26 | echo "" 27 | echo "Current settings are:" 28 | echo "Center frequency = $center_freq" 29 | echo "Starting frequency = $start_freq" 30 | echo "Sample rate = $samp_rate" 31 | echo "Starting demodulator = $start_mod" 32 | echo "RF gain = $rf_gain" 33 | echo "PPM = $ppm" 34 | echo "" 35 | else 36 | echo "No temp settings found, pulling from NVRAM and saving to temp file..." 37 | export `fw_printenv center_freq` 38 | if [ -z ${center_freq} ]; then 39 | export center_freq=460250000 40 | fi 41 | export `fw_printenv start_freq` 42 | if [ -z ${start_freq} ]; then 43 | export start_freq=460102200 44 | fi 45 | export `fw_printenv samp_rate` 46 | if [ -z ${samp_rate} ]; then 47 | export samp_rate=600000 48 | fi 49 | if [ -z ${start_mod} ]; then 50 | export start_mod="nfm" 51 | fi 52 | export `fw_printenv rf_gain` 53 | if [ -z ${rf_gain} ]; then 54 | export rf_gain=89 55 | fi 56 | export `fw_printenv ppm` 57 | if [ -z ${ppm} ]; then 58 | export ppm=0 59 | fi 60 | echo "export center_freq=$center_freq" >/root/temp-settings 61 | echo "export start_freq=$start_freq" >>/root/temp-settings 62 | echo "export samp_rate=$samp_rate" >>/root/temp-settings 63 | echo "export start_mod=$start_mod" >>/root/temp-settings 64 | echo "export rf_gain=$rf_gain" >>/root/temp-settings 65 | echo "export ppm=$ppm" >>/root/temp-settings 66 | chmod +x /root/temp-settings 67 | echo "" 68 | echo "Ignore any messages above this line..." 69 | echo "" 70 | echo "Current settings are:" 71 | echo "Center frequency = $center_freq" 72 | echo "Starting frequency = $start_freq" 73 | echo "Sample rate = $samp_rate" 74 | echo "Starting demodulator = $start_mod" 75 | echo "RF gain = $rf_gain" 76 | echo "PPM = $ppm" 77 | echo "" 78 | fi 79 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/rx_fm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/bin/rx_fm -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/rx_power: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/bin/rx_power -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/rx_sdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/bin/rx_sdr -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/savenow.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ## Set commands 3 | . /bin/readsettings.sh 4 | echo "Changes saved here will take effect now and persist across reboots." 5 | echo "If you (re)flash the PlutoSDR you will lose your settings." 6 | read -p "Do you want to save the current settings to NVRAM? (y/n): " yn 7 | case $yn in 8 | [Yy]* ) 9 | echo "Wait while writing to NVRAM..." 10 | fw_setenv center_freq $center_freq 11 | fw_setenv start_freq $start_freq 12 | fw_setenv samp_rate $samp_rate 13 | fw_setenv start_mod $start_mod 14 | fw_setenv rf_gain $rf_gain 15 | fw_setenv ppm $ppm 16 | echo "Done." 17 | exit;; 18 | * ) exit;; 19 | esac 20 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/settings.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ## Set commands 3 | . /bin/readsettings.sh 4 | echo "Changes made here will take effect now and persist across reboots." 5 | echo "If you (re)flash the PlutoSDR you will lose your settings." 6 | read -p "Do you want to change these settings? (y/n): " yn 7 | case $yn in 8 | [Yy]* ) 9 | echo "If you make a mistake, CTRL+C to exit and then start over." 10 | read -p "Enter the new center frequency (70000000-6000000000): [460250000] " center_freq 11 | read -p "Enter the new starting frequency (70000000-6000000000): [460102200] " start_freq 12 | read -p "Enter the new sample rate (65105-10000000): [600000] " samp_rate 13 | read -p "Enter the new starting demodulator (nfm,am,lsb,usb,cw): [nfm] " start_mod 14 | read -p "Enter the new RF gain in dB (0-89): [89] " rf_gain 15 | read -p "Enter the new PPM adjustment: [0] " ppm 16 | echo "Writting settings to temp file..." 17 | echo "export center_freq=$center_freq" >/root/temp-settings 18 | echo "export start_freq=$start_freq" >>/root/temp-settings 19 | echo "export samp_rate=$samp_rate" >>/root/temp-settings 20 | echo "export start_mod=$start_mod" >>/root/temp-settings 21 | echo "export rf_gain=$rf_gain" >>/root/temp-settings 22 | echo "export ppm=$ppm" >>/root/temp-settings 23 | chmod +x /root/temp-settings 24 | echo "Wait while writing to NVRAM..." 25 | fw_setenv center_freq $center_freq 26 | fw_setenv start_freq $start_freq 27 | fw_setenv samp_rate $samp_rate 28 | fw_setenv start_mod $start_mod 29 | fw_setenv rf_gain $rf_gain 30 | fw_setenv ppm $ppm 31 | echo "Done. Restarting OpenWebRX now..." 32 | /etc/init.d/S95openwebrx stop 33 | /etc/init.d/S95openwebrx start 34 | exit;; 35 | * ) exit;; 36 | esac 37 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/bin/temp-settings.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ## Set commands 3 | . /bin/readsettings.sh 4 | echo "Changes made here will take effect now and reset to previous on reboot." 5 | read -p "Do you want to change these settings? (y/n): " yn 6 | case $yn in 7 | [Yy]* ) 8 | echo "If you make a mistake, CTRL+C to exit and then start over." 9 | read -p "Enter the new center frequency (70000000-6000000000): [460250000] " center_freq 10 | read -p "Enter the new starting frequency (70000000-6000000000): [460102200] " start_freq 11 | read -p "Enter the new sample rate (65105-10000000): [600000] " samp_rate 12 | read -p "Enter the new starting demodulator (nfm,am,lsb,usb,cw): [nfm] " start_mod 13 | read -p "Enter the new RF gain in dB (0-89): [89] " rf_gain 14 | read -p "Enter the new PPM adjustment: [0] " ppm 15 | echo "Writting settings to temp file..." 16 | echo "export center_freq=$center_freq" >/root/temp-settings 17 | echo "export start_freq=$start_freq" >>/root/temp-settings 18 | echo "export samp_rate=$samp_rate" >>/root/temp-settings 19 | echo "export start_mod=$start_mod" >>/root/temp-settings 20 | echo "export rf_gain=$rf_gain" >>/root/temp-settings 21 | echo "export ppm=$ppm" >>/root/temp-settings 22 | chmod +x /root/temp-settings 23 | echo "Done. Restarting OpenWebRX now..." 24 | /etc/init.d/S95openwebrx stop 25 | /etc/init.d/S95openwebrx start 26 | exit;; 27 | * ) exit;; 28 | esac 29 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/etc/init.d/S94pluto-mods: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | start() { 4 | REBOOTNEEDED=0 5 | echo "Checking for maxcpus and ad9364 mods..." 6 | export `fw_printenv maxcpus` 7 | export `fw_printenv attr_val` 8 | ## Check/set dual-core mode 9 | if [ $maxcpus == 1 ]; then 10 | echo "Enabling dual-core mode..." 11 | fw_setenv maxcpus 12 | REBOOTNEEDED=1 13 | fi 14 | ## Check/set 70-6000mhz trick (default is 325-3800Mhz) 15 | if [ "$attr_val" != "ad9364" ]; then 16 | echo "Enabling 70-6000Mhz mod..." 17 | fw_setenv attr_name compatible 18 | fw_setenv attr_val "ad9364" 19 | REBOOTNEEDED=1 20 | fi 21 | if [ $REBOOTNEEDED == 1 ]; then 22 | echo "Rebooting!" 23 | pluto_reboot reset 24 | fi 25 | echo "Mods already in place, continuing." 26 | } 27 | 28 | stop() { 29 | echo "Nothing to stop." 30 | } 31 | 32 | restart() { 33 | stop 34 | start 35 | } 36 | 37 | # See how we were called. 38 | case "$1" in 39 | start) 40 | start 41 | ;; 42 | stop) 43 | stop 44 | ;; 45 | restart|reload) 46 | restart 47 | ;; 48 | *) 49 | echo "Usage: $0 {start|stop|reload|restart}" 50 | exit 1 51 | esac 52 | 53 | exit $? 54 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/etc/init.d/S95openwebrx: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | [ -f /bin/openwebrx.sh ] || exit 0 4 | 5 | start() { 6 | printf "Starting OpenWebRX: " 7 | screen -Dm /bin/openwebrx.sh $0 & 8 | echo "done" 9 | } 10 | 11 | 12 | stop() { 13 | printf "Stopping OpenWebRX: " 14 | killall python 15 | killall csdr 16 | killall nc 17 | killall nmux 18 | killall screen 19 | echo "done" 20 | } 21 | 22 | restart() { 23 | stop 24 | start 25 | } 26 | 27 | # See how we were called. 28 | case "$1" in 29 | start) 30 | start 31 | ;; 32 | stop) 33 | stop 34 | ;; 35 | restart|reload) 36 | restart 37 | ;; 38 | *) 39 | echo "Usage: $0 {start|stop|reload|restart}" 40 | exit 1 41 | esac 42 | 43 | exit $? 44 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/lib/SoapySDR/modules0.7/libPlutSDRSupport.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/lib/SoapySDR/modules0.7/libPlutSDRSupport.so -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/lib/libSoapySDR.so: -------------------------------------------------------------------------------- 1 | libSoapySDR.so.0.7 -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/lib/libSoapySDR.so.0.7: -------------------------------------------------------------------------------- 1 | libSoapySDR.so.0.7.0 -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/lib/libSoapySDR.so.0.7.0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/lib/libSoapySDR.so.0.7.0 -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/lib/libcsdr.so.0.15: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/lib/libcsdr.so.0.15 -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/lib/pkgconfig/SoapySDR.pc: -------------------------------------------------------------------------------- 1 | prefix=/home/steve/Desktop/SDR/Pluto/tools 2 | exec_prefix=${prefix} 3 | libdir=${exec_prefix}/lib 4 | includedir=${prefix}/include 5 | 6 | Name: Soapy SDR 7 | Description: Vendor and platform neutral SDR interface library. 8 | URL: https://github.com/pothosware/SoapySDR/wiki 9 | Version: 0.7.0 10 | Requires: 11 | Requires.private: 12 | Conflicts: 13 | Cflags: -I${includedir} 14 | Libs: -L${libdir} -lSoapySDR 15 | Libs.private: 16 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | First of all, thank you for taking the time to contribute to this project! 2 | 3 | Before I can accept your contributions, I need a signed copy of the Individual Contributor License Agreement (ICLA) from you, which is available here. 4 | 5 | The ICLA is needed because it will allow me to dual license the OpenWebRX project under AGPL and a commercial license. 6 | I will also apply dual licensing to csdr, but only those parts that are original work (e.g. without the parts enabled by `-DUSE_IMA_ADPCM`; code taken from other projects is clearly separable). 7 | 8 | However, even if there is commercial interest in the projects, I promise to keep them as open as possible, keeping my original intention to provide an open-source web-based SDR receiver software to the amateur radio operators and SDR enthusiasts. 9 | 10 | This contributor agreement is based on the one of Apache Software Foundation, with some modifications. (You can review differences here). 11 | When you contribute for the first time, I will send you the ICLA. Replying with only the information requested and the text "I Agree" is sufficient. 12 | 13 | Thanks, 14 | 15 | Andras, HA7ILM 16 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/CONTRIBUTORS: -------------------------------------------------------------------------------- 1 | This is a list of the great people who contributed code to the OpenWebRX repository. (Names are sorted alphabetically.) 2 | 3 | Gnoxter 4 | John Seamons, ZL/KF6VO 5 | 6 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/config_webrx.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/config_webrx.pyc -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/csdr.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/csdr.pyc -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/favicon.ico -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/font-expletus-sans/ExpletusSans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/font-expletus-sans/ExpletusSans-Medium.ttf -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-3d-spectrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-3d-spectrum.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-avatar-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-avatar-background.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-avatar.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-background-cool-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-background-cool-blue.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-background-lingrad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-background-lingrad.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-ha5kfu-top-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-ha5kfu-top-logo.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-logo-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-logo-big.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-panel-log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-panel-log.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-panel-receiver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-panel-receiver.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-panel-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-panel-status.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-play-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-play-button.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-rx-details-arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-rx-details-arrow-up.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-rx-details-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-rx-details-arrow.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-scale-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-scale-background.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-speaker-muted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-speaker-muted.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-speaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-speaker.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-squelch-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-squelch-button.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-top-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-top-logo.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-top-photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-top-photo.jpg -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-waterfall-auto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-waterfall-auto.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-waterfall-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-waterfall-default.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-in-total.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-in-total.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-in.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-out-total.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-out-total.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-out.png -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/inactive.html: -------------------------------------------------------------------------------- 1 | 2 | 22 | OpenWebRX 23 | 74 | 75 | 76 | 77 |
78 | 79 |
80 | Sorry, the receiver is inactive due to internal error. 81 |
82 |
83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/nanoscroller.css: -------------------------------------------------------------------------------- 1 | /** initial setup **/ 2 | .nano { 3 | position : relative; 4 | width : 100%; 5 | height : 100%; 6 | overflow : hidden; 7 | } 8 | .nano > .nano-content { 9 | position : absolute; 10 | overflow : scroll; 11 | overflow-x : hidden; 12 | top : 0; 13 | right : 0; 14 | bottom : 0; 15 | left : 0; 16 | } 17 | .nano > .nano-content:focus { 18 | outline: thin dotted; 19 | } 20 | .nano > .nano-content::-webkit-scrollbar { 21 | display: none; 22 | } 23 | .has-scrollbar > .nano-content::-webkit-scrollbar { 24 | display: block; 25 | } 26 | .nano > .nano-pane { 27 | background : rgba(0,0,0,.25); 28 | position : absolute; 29 | width : 8px; 30 | right : 0; 31 | top : 0; 32 | bottom : 0; 33 | visibility : hidden\9; /* Target only IE7 and IE8 with this hack */ 34 | opacity : .01; 35 | -webkit-transition : .2s; 36 | -moz-transition : .2s; 37 | -o-transition : .2s; 38 | transition : .2s; 39 | -moz-border-radius : 3px; 40 | -webkit-border-radius : 3px; 41 | border-radius : 3px; 42 | } 43 | .nano > .nano-pane > .nano-slider { 44 | background: #444; 45 | background: rgba(0,0,0,.5); 46 | position : relative; 47 | margin : 0 0px; 48 | -moz-border-radius : 4px; 49 | -webkit-border-radius : 4px; 50 | border-radius : 4px; 51 | } 52 | .nano:hover > .nano-pane, .nano-pane.active, .nano-pane.flashed { 53 | visibility : visible\9; /* Target only IE7 and IE8 with this hack */ 54 | opacity : 0.99; 55 | } 56 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/retry.html: -------------------------------------------------------------------------------- 1 | 2 | 22 | OpenWebRX 23 | 74 | 79 | 80 | 81 | 82 | 83 |
84 | 85 |
86 | There are no client slots left on this server. 87 |
88 | Please wait until a client disconnects.
We will try to reconnect in 30 seconds... 89 |
90 |
91 |
92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/htdocs/upgrade.html: -------------------------------------------------------------------------------- 1 | 2 | 22 | OpenWebRX 23 | 74 | 78 | 79 | 80 | 81 | 82 |
83 | 84 |
85 | Only the latest Google Chrome browser is supported at the moment.
86 | Please download and install Google Chrome.
87 |
88 | Alternatively, you may proceed to OpenWebRX, but it's not supposed to work as expected.
89 | Click here if you still want to try OpenWebRX. 90 |
91 |
92 |
93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/rxws.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/rxws.pyc -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/sdrhu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python2 2 | """ 3 | 4 | This file is part of OpenWebRX, 5 | an open-source SDR receiver software with a web UI. 6 | Copyright (c) 2013-2015 by Andras Retzler 7 | 8 | This program is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU Affero General Public License as 10 | published by the Free Software Foundation, either version 3 of the 11 | License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU Affero General Public License for more details. 17 | 18 | You should have received a copy of the GNU Affero General Public License 19 | along with this program. If not, see . 20 | 21 | """ 22 | 23 | import config_webrx as cfg, time, subprocess 24 | 25 | def run(continuously=True): 26 | if not cfg.sdrhu_key: return 27 | firsttime="(Your receiver is soon getting listed on sdr.hu!)" 28 | while True: 29 | cmd = "wget --timeout=15 -4qO- http://sdr.hu/update --post-data \"url=http://"+cfg.server_hostname+":"+str(cfg.web_port)+"&apikey="+cfg.sdrhu_key+"\" 2>&1" 30 | #print "[openwebrx-sdrhu]", cmd 31 | returned=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).communicate() 32 | returned=returned[0] 33 | #print returned 34 | if "UPDATE:" in returned: 35 | retrytime_mins = 20 36 | value=returned.split("UPDATE:")[1].split("\n",1)[0] 37 | if value.startswith("SUCCESS"): 38 | print "[openwebrx-sdrhu] Update succeeded! "+firsttime 39 | firsttime="" 40 | else: 41 | print "[openwebrx-sdrhu] Update failed, your receiver cannot be listed on sdr.hu! Reason:", value 42 | else: 43 | retrytime_mins = 2 44 | print "[openwebrx-sdrhu] wget failed while updating, your receiver cannot be listed on sdr.hu!" 45 | if not continuously: break 46 | time.sleep(60*retrytime_mins) 47 | 48 | if __name__=="__main__": 49 | run(False) 50 | 51 | -------------------------------------------------------------------------------- /legacy/openwebrx/overlay/openwebrx/sdrhu.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/legacy/openwebrx/overlay/openwebrx/sdrhu.pyc -------------------------------------------------------------------------------- /plutoweb/README.md: -------------------------------------------------------------------------------- 1 | # PlutoWeb 2 | 3 | This is an image with a web interface to control settings for openwebrx and which program to auto-start so you don't need to use ssh anymore. 4 | 5 | Once you flash your device, visit http://pluto.local/ 6 | 7 | The auto-reboot option is disabled by default and only takes effect after a reboot. 8 | 9 | Auto-update is also disabled by default. 10 | 11 | Find the corresponding README.md for each program in the respective legacy folder for more details. 12 | -------------------------------------------------------------------------------- /plutoweb/buildgz.sh: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | cd /home/steve/Desktop/SDR/Pluto/PlutoWeb/plutoweb/overlay 4 | rm -f ../update3.tgz* 5 | tar -czvf ../update3.tgz * 6 | cd .. 7 | md5sum -b update3.tgz >update3.tgz.md5sum 8 | -------------------------------------------------------------------------------- /plutoweb/images/boot.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/images/boot.dfu -------------------------------------------------------------------------------- /plutoweb/images/boot.frm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/images/boot.frm -------------------------------------------------------------------------------- /plutoweb/images/pluto.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/images/pluto.dfu -------------------------------------------------------------------------------- /plutoweb/images/pluto.frm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/images/pluto.frm -------------------------------------------------------------------------------- /plutoweb/images/uboot-env.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/images/uboot-env.dfu -------------------------------------------------------------------------------- /plutoweb/overlay/bin/SoapySDRServer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/SoapySDRServer -------------------------------------------------------------------------------- /plutoweb/overlay/bin/SoapySDRUtil: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/SoapySDRUtil -------------------------------------------------------------------------------- /plutoweb/overlay/bin/arm.retrogram-plutosdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/arm.retrogram-plutosdr -------------------------------------------------------------------------------- /plutoweb/overlay/bin/csdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/csdr -------------------------------------------------------------------------------- /plutoweb/overlay/bin/dump1090.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ## Pull in settings 3 | . /bin/readsettings.sh >/dev/null 4 | 5 | cd /dump1090 6 | while [[ "$autostart" = "dump1090" ]]; do 7 | ./dump1090 --net --net-http-port 8080 --gain 89 --aggressive 8 | sleep 1 9 | . /bin/readsettings.sh >/dev/null 10 | done 11 | -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leanchansim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leanchansim -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leandvb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leandvb -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leandvb_tui.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ -z "$1" ]; then 4 | echo "Usage: $0 /path/to/leandvb --fd-info 2 [leandvb options] < IQ > TS" 1>&2 5 | exit 1 6 | fi 7 | 8 | echo -e "\nleandvb text UI example" 1>&2 9 | 10 | (exec $* 2>&1 1>&4 | 11 | ( while read tag val; do 12 | case "$tag" in 13 | LOCK) 14 | case "$val" in 15 | 0) lock="[SEARCH]" ;; 16 | 1) lock="[LOCKED]" ;; 17 | esac ;; 18 | MER) mer=$(printf "[MER %4.1f dB]" "$val") ;; 19 | SS) ss=$(printf "[SS %3.0f]" "$val") ;; 20 | FREQ) freq=$(printf "[Offset %+7.0f Hz]" "$val") ;; 21 | CR) cr=$(printf "[FEC %s]" "$val") ;; 22 | SR) sr=$(printf "[SR %7.0f Hz]" "$val") ;; 23 | *) echo -e "\n$tag $val" 1>&2 ;; 24 | esac 25 | echo -ne "\r$ss $freq $mer $lock $sr $cr" 1>&2 26 | done) 27 | ) 4>&1 28 | echo 1>&2 -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leandvb_vt100ui.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ -z "$1" ]; then 4 | echo "Usage: $0 /path/to/leandvb --fd-info 2 --fd-const 2 [leandvb options] < IQ > TS" 1>&2 5 | exit 1 6 | fi 7 | 8 | printat() { 9 | row=$1; col=$2; fmt=$3; shift 3 10 | printf "\033[${row};${col}f$fmt" $* 1>&2 11 | } 12 | 13 | print_symbols() { 14 | char="$1" 15 | set $2 16 | shift 17 | for iq in $*; do 18 | echo $iq | ( 19 | IFS="," read i q 20 | [ $i -lt -128 ] && i=-128 21 | [ $i -gt 127 ] && i=127 22 | [ $q -lt -128 ] && q=-128 23 | [ $q -gt 127 ] && q=127 24 | printat $((11-$q/12)) $((50+$i/6)) "$char" 25 | r=$((11-$q/12)) 26 | c=$((50+$i/6)) 27 | # printat $r $c "$char" 28 | ) 29 | done 30 | } 31 | 32 | constel_decim=50 33 | 34 | constel_count=0 35 | print_constel() { 36 | if [ $constel_count -lt $constel_decim ]; then 37 | constel_count=$((constel_count+1)) 38 | return 39 | fi 40 | constel_count=0 41 | 42 | y=1 43 | while [ $y -le 21 ]; do 44 | #printat $y 50 "|" 45 | printat $y 29 " | " 46 | y=$((y+1)) 47 | done 48 | printat 11 29 "---------------------+---------------------" 49 | print_symbols "x" "$2" 50 | print_symbols "#" "$1" 51 | } 52 | 53 | printf "\033[2J\033[?25l" 1>&2 54 | 55 | printat 2 3 "leandvb VT100 UI example" 56 | 57 | (exec $* 2>&1 1>&4 | 58 | ( while read tag val; do 59 | case "$tag" in 60 | SS) printat 4 3 "SS: %3.0f" "$val" ;; 61 | MER) printat 6 3 "MER: %4.1f dB" "$val" ;; 62 | FREQ) printat 8 3 "Offset: %+7.0f Hz" "$val" ;; 63 | LOCK) 64 | case "$val" in 65 | 0) printat 10 3 "SYNCHRONIZING..." ;; 66 | 1) printat 10 3 "LOCKED " ;; 67 | esac ;; 68 | CR) printat 12 3 "FEC: %s" "$val" ;; 69 | SR) printat 14 3 "SR: %7.0f Hz" "$val" ;; 70 | CONST) constel="$val" ;; 71 | SYMBOLS) print_constel "$constel" "$val" ;; 72 | *) printat 20 1 "$tag $val" 73 | esac 74 | done) 75 | ) 4>&1 76 | 77 | printat 30 1 "\033[?25h" 78 | -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leandvbtx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leandvbtx -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leaniiorx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leaniiorx -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leaniiotx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leaniiotx -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leanmlmrx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leanmlmrx -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leansdrcat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leansdrcat -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leansdrscan: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leansdrscan -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leansdrserv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leansdrserv -------------------------------------------------------------------------------- /plutoweb/overlay/bin/leantsgen: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/leantsgen -------------------------------------------------------------------------------- /plutoweb/overlay/bin/minidemod-wfm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/minidemod-wfm -------------------------------------------------------------------------------- /plutoweb/overlay/bin/minidemod-wfm-atan: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/minidemod-wfm-atan -------------------------------------------------------------------------------- /plutoweb/overlay/bin/morfeus_tool_linux_armv7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/morfeus_tool_linux_armv7 -------------------------------------------------------------------------------- /plutoweb/overlay/bin/multimon-ng: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/multimon-ng -------------------------------------------------------------------------------- /plutoweb/overlay/bin/nmux: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/nmux -------------------------------------------------------------------------------- /plutoweb/overlay/bin/openwebrx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ## Pull in any saved settings or use defaults 3 | . /bin/readsettings.sh >/dev/null 4 | 5 | ## Check and apply override pre-set 6 | if [ $openwebrx_override == 1 ]; then 7 | export max_clients=15 8 | export samp_rate=100000 9 | echo "Using Pre-Set 100ksps = 15 users max" 10 | elif [ $openwebrx_override == 2 ]; then 11 | export max_clients=7 12 | export samp_rate=300000 13 | echo "Using Pre-Set 300ksps = 7 users max" 14 | elif [ $openwebrx_override == 3 ]; then 15 | export samp_rate=900000 16 | export max_clients=2 17 | echo "Using Pre-Set 900ksps = 2 users max" 18 | elif [ $openwebrx_override == 4 ]; then 19 | export samp_rate=1500000 20 | export max_clients=1 21 | echo "Using Pre-Set 1.5msps = 1 user max" 22 | fi 23 | 24 | ## Start openwebrx 25 | cd /openwebrx 26 | python openwebrx.py 27 | -------------------------------------------------------------------------------- /plutoweb/overlay/bin/pow_pluto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/pow_pluto -------------------------------------------------------------------------------- /plutoweb/overlay/bin/retrogram-plutosdr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | TERM=linux /bin/arm.retrogram-plutosdr $@ 3 | -------------------------------------------------------------------------------- /plutoweb/overlay/bin/rtl_433: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/rtl_433 -------------------------------------------------------------------------------- /plutoweb/overlay/bin/rx_fm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/rx_fm -------------------------------------------------------------------------------- /plutoweb/overlay/bin/rx_power: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/rx_power -------------------------------------------------------------------------------- /plutoweb/overlay/bin/rx_sdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/bin/rx_sdr -------------------------------------------------------------------------------- /plutoweb/overlay/bin/soapyremote.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ## Pull in settings 3 | . /bin/readsettings.sh >/dev/null 4 | 5 | cd 6 | while [[ "$autostart" = "SoapyRemote" ]]; do 7 | /bin/SoapySDRServer --bind 8 | sleep 1 9 | . /bin/readsettings.sh >/dev/null 10 | done 11 | -------------------------------------------------------------------------------- /plutoweb/overlay/bin/updatewatch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Don't need to run this directly, its called on boot if autoupdate=y 3 | 4 | # Our job is to loop and check for the existence of update3.tgz and update3.tgz.md5sum 5 | # If we find update3.tgz, we'll assume its legit and use it. This makes us very hackable. 6 | # You could use any update3.tgz and we will blindly extract it right over the top of / 7 | # The update3.tgz is simply the overlay folder zipped up. 8 | 9 | # If we see an update3.tgz.md5sum first, we'll use it to verify the upload 10 | # Again, this screams, "HACK ME!". But for real, hack it better. 11 | # Source current settings 12 | . /bin/readsettings.sh >/dev/null 13 | flash_indication_on() { 14 | echo timer > /sys/class/leds/led0:green/trigger 15 | echo 40 > /sys/class/leds/led0:green/delay_off 16 | echo 40 > /sys/class/leds/led0:green/delay_on 17 | } 18 | 19 | flash_indication_off() { 20 | echo heartbeat > /sys/class/leds/led0:green/trigger 21 | } 22 | 23 | SLEEP=10s 24 | 25 | while true 26 | do 27 | sleep $SLEEP 28 | if [ "$updatesrunning" = "y" ]; then 29 | sleep $SLEEP 30 | else 31 | for file in /root/update3.tgz /media/update3.tgz 32 | do 33 | if [ -f $file.md5sum ]; then 34 | if diff -q $file.md5sum /root/.update3.tgz.md5sum; then 35 | echo "*** Auto-updates enabled - already up to date as $file ***" >>/etc/motd 36 | rm -f $file $file.md5sum 37 | updatesrunning=n 38 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 39 | else 40 | updatesrunning=y 41 | flash_indication_on 42 | sed -i 's/updatesrunning=n/updatesrunning=y/' /root/plutoweb.conf 43 | echo "Found $file.md5sum, checking for $file" 44 | sleep 3 45 | if [ -f $file ]; then 46 | echo "Found $file" 47 | sleep 5 48 | if [ "$(md5sum -b $file | awk -F\\ '{ print $1 }')" = "$(cat $file.md5sum | awk -F\\ '{ print $1 }')" ]; then 49 | cd / && gzip -dc $file | tar -xvf - && echo "*** Auto-updates enabled and $file completed successfully with md5 ***" >>/etc/motd && echo "$file update complete!" && rm -f /root/plutoweb.conf && /bin/readsettings.sh >/dev/null 50 | rm -f $file $file.md5sum 51 | updatesrunning=n 52 | flash_indication_off 53 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 54 | else 55 | echo "$file failed the md5sum." 56 | echo "*** Auto-updates enabled but $file failed the md5sum ***" >>/etc/motd 57 | rm -f $file $file.md5sum 58 | updatesrunning=n 59 | flash_indication_off 60 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 61 | fi 62 | else 63 | echo "$file not found." 64 | rm -f $file $file.md5sum 65 | updatesrunning=n 66 | flash_indication_off 67 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 68 | fi 69 | fi 70 | fi 71 | if [ -f $file ]; then 72 | updatesrunning=y 73 | flash_indication_on 74 | sed -i 's/updatesrunning=n/updatesrunning=y/' /root/plutoweb.conf 75 | echo "Found $file - Waiting 5 seconds before proceeding..." 76 | sleep 5 77 | cd / && gzip -dc $file | tar -xvf - && echo "*** Auto-updates enabled and $file completed successfully ***" >>/etc/motd && echo "$file update complete!" && rm -f /root/plutoweb.conf && /bin/readsettings.sh >/dev/null 78 | rm -f $file $file.md5sum 79 | updatesrunning=n 80 | flash_indication_off 81 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 82 | fi 83 | done 84 | fi 85 | . /bin/readsettings.sh >/dev/null 86 | done 87 | -------------------------------------------------------------------------------- /plutoweb/overlay/bin/usbmounter.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Don't run this manually, it runs automatically 4 | 5 | # PlutoWeb Diskmounter and usb overlay worker 6 | if [ -b /dev/sda1 ] && [ ! -d /usb ]; then 7 | mkdir /usb 8 | mount /dev/sda1 /usb 9 | if [ -d /usb/plutoweb/overlay ]; then 10 | cd /usb/plutoweb/overlay 11 | for i in `find *`; do 12 | if [ -d $i ]; then 13 | [ -d /$i ]||{ rm -rf /$i; mkdir /$i; } 14 | else 15 | rm -rf /$i 16 | ln -s /usb/plutoweb/overlay/$i /$i 17 | fi 18 | done 19 | fi 20 | # Launch autorun.sh script, if found 21 | [ -f /usb/plutoweb/autorun.sh ] && /bin/sh /usb/plutoweb/autorun.sh & 22 | fi 23 | -------------------------------------------------------------------------------- /plutoweb/overlay/dump1090/dump1090: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/dump1090/dump1090 -------------------------------------------------------------------------------- /plutoweb/overlay/dump1090/public_html/config.js: -------------------------------------------------------------------------------- 1 | // -------------------------------------------------------- 2 | // 3 | // This file is to configure the configurable settings. 4 | // Load this file before script.js file at gmap.html. 5 | // 6 | // -------------------------------------------------------- 7 | 8 | // -- Output Settings ------------------------------------- 9 | // Show metric values 10 | Metric = false; // true or false 11 | 12 | // -- Map settings ---------------------------------------- 13 | // The Latitude and Longitude in decimal format 14 | //CONST_CENTERLAT = 45.0; 15 | //CONST_CENTERLON = 9.0; 16 | // The google maps zoom level, 0 - 16, lower is further out 17 | //CONST_ZOOMLVL = 5; 18 | 19 | // -- Marker settings ------------------------------------- 20 | // The default marker color 21 | MarkerColor = "rgb(127, 127, 127)"; 22 | SelectedColor = "rgb(225, 225, 225)"; 23 | StaleColor = "rgb(190, 190, 190)"; 24 | 25 | // -- Site Settings --------------------------------------- 26 | SiteShow = false; // true or false 27 | // The Latitude and Longitude in decimal format 28 | SiteLat = 45.0; 29 | SiteLon = 9.0; 30 | 31 | SiteCircles = true; // true or false (Only shown if SiteShow is true) 32 | // In nautical miles or km (depending settings value 'Metric') 33 | SiteCirclesDistances = new Array(100,150,200); 34 | 35 | -------------------------------------------------------------------------------- /plutoweb/overlay/dump1090/public_html/extension.js: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------- 2 | // 3 | // This file is so users can modify how the page acts 4 | // without diving to deep in the code. This way we can 5 | // also try out or hold custom code for ourselves and 6 | // not check it into the repo. 7 | // 8 | // There is a div id'ed as plane_extension for use with 9 | // this javascript file. 10 | // ----------------------------------------------------- 11 | 12 | function extendedInitalize() { 13 | // Write your initalization here 14 | // Gets called just before the 1-sec function call loop is setup 15 | } 16 | 17 | function extendedPulse() { 18 | // This will get called every second after all the main functions 19 | } 20 | -------------------------------------------------------------------------------- /plutoweb/overlay/dump1090/public_html/gmap.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DUMP1090 18 | 19 | 20 | 23 |
24 |
25 |
26 | 58 |
59 | Squak 7x00 is reported and shown.
60 | This is most likely an error in reciving or decoding.
61 | Please do not call the local authorities, they already know about it if it is valid squak. 62 |
63 |
64 | 65 | 66 | -------------------------------------------------------------------------------- /plutoweb/overlay/dump1090/public_html/gmap.html_orig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DUMP1090 18 | 19 | 20 | 23 |
24 |
25 |
26 | 58 |
59 | Squak 7x00 is reported and shown.
60 | This is most likely an error in reciving or decoding.
61 | Please do not call the local authorities, they already know about it if it is valid squak. 62 |
63 |
64 | 65 | 66 | -------------------------------------------------------------------------------- /plutoweb/overlay/dump1090/public_html/options.js: -------------------------------------------------------------------------------- 1 | var listKMLType = ['Approch', 'Departure', 'Transit', 'Custom1', 'Custom2']; 2 | var listKMLs = localStorage['listKMLs'] || []; 3 | 4 | function optionsInitalize() { 5 | // Write your initalization here 6 | // Gets called just before the 1-sec function call loop is setup 7 | $( "#dialog-modal" ).dialog({ 8 | height: 140, 9 | modal: true, 10 | autoOpen: false, 11 | closeOnEscape: false 12 | }); 13 | } 14 | 15 | function optionsModal() { 16 | $( "#dialog-modal" ).dialog( "open"); 17 | } 18 | -------------------------------------------------------------------------------- /plutoweb/overlay/dump1090/public_html/style.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | margin: 0; padding: 0; background-color: #ffffff; font-family: Tahoma, Sans-Serif; 3 | font-size: 10pt; overflow: auto; height: 100%; 4 | } 5 | div#map_container { float: left; width: 100%; height: 100%; } 6 | div#map_canvas { height: 100%; margin-right: 420px; } 7 | 8 | div#sidebar_container { float: left; width: 410px; margin-left: -410px; height: 100%; overflow: auto; } 9 | 10 | div#SpecialSquawkWarning { position: absolute; bottom: 25px; right: 430px; border: 2px solid red; 11 | background-color: #FFFFA3; opacity: 0.75; filter:alpha(opacity=75); padding: 5px; 12 | display: none; text-align: center; } 13 | 14 | table#optionsTabs { width: 100%; font-size: small; font-family: monospace; background-color: #ddd; 15 | border: 1px; border-color: #000000;} 16 | 17 | #tableinfo, #sudo_buttons { font-size: x-small; font-family: monospace; } 18 | 19 | .vPosition { font-weight: bold; background-color: #d5ffd5; } 20 | .squawk7500 { font-weight: bold; background-color: #ff5555; } 21 | .squawk7600 { font-weight: bold; background-color: #00ffff; } 22 | .squawk7700 { font-weight: bold; background-color: #ffff00; } 23 | .selected { background-color: #dddddd; } 24 | .plane_table_row { cursor: pointer; } 25 | 26 | #selectedinfotitle { font-size: larger; } 27 | #selectedinfo { font-size: small; } 28 | #selectedinfo a { text-decoration: none; color: blue; font-size: x-small;} 29 | #selectedinfo.dim { opacity: 0.3; filter:alpha(opacity=30); /* For IE8 and earlier */ } 30 | 31 | .pointer { cursor: pointer; } 32 | 33 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/httpd.conf: -------------------------------------------------------------------------------- 1 | *.php:/usr/bin/php-cgi 2 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S94pluto-mods: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | flash_indication_on() { 4 | echo timer > /sys/class/leds/led0:green/trigger 5 | echo 40 > /sys/class/leds/led0:green/delay_off 6 | echo 40 > /sys/class/leds/led0:green/delay_on 7 | } 8 | 9 | start() { 10 | REBOOTNEEDED=0 11 | echo "Checking for maxcpus and ad9364 mods..." 12 | export `fw_printenv maxcpus` 13 | export `fw_printenv attr_val` 14 | ## Check/set dual-core mode 15 | if [ $maxcpus == 1 ]; then 16 | flash_indication_on 17 | echo "Enabling dual-core mode..." 18 | fw_setenv maxcpus 19 | REBOOTNEEDED=1 20 | fi 21 | ## Check/set 70-6000mhz trick (default is 325-3800Mhz) 22 | if [ "$attr_val" != "ad9364" ]; then 23 | flash_indication_on 24 | echo "Enabling 70-6000Mhz mod..." 25 | fw_setenv attr_name compatible 26 | fw_setenv attr_val "ad9364" 27 | REBOOTNEEDED=1 28 | fi 29 | if [ $REBOOTNEEDED == 1 ]; then 30 | echo "Rebooting!" 31 | pluto_reboot reset 32 | else 33 | echo "Mods already in place, continuing." 34 | echo "Updating motd..." 35 | # Update motd 36 | cat /etc/motd.new >>/etc/motd 37 | ln -s /root/plutoweb.conf /www/plutoweb.conf 38 | /bin/sh /etc/init.d/S97autoreboot start & 39 | /bin/sh /etc/init.d/S97autoupdate start 40 | /moRFeus_listener/morf_tcp.sh >/dev/null 2>&1 & 41 | fi 42 | } 43 | 44 | stop() { 45 | echo 46 | } 47 | 48 | # See how we were called. 49 | case "$1" in 50 | start) 51 | start 52 | ;; 53 | stop) 54 | stop 55 | ;; 56 | *) 57 | echo "Usage: $0 {start}" 58 | exit 1 59 | esac 60 | 61 | exit $? 62 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S95autostart: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Read settings from NVRAM 3 | . /bin/readsettings.sh >/dev/null 4 | 5 | start() { 6 | /bin/sh /etc/init.d/S96$autostart start 7 | } 8 | 9 | stop() { 10 | for file in /etc/init.d/S96*; do 11 | /bin/sh $file stop 12 | done 13 | } 14 | 15 | restart() { 16 | stop 17 | start 18 | } 19 | 20 | # See how we were called. 21 | case "$1" in 22 | start) 23 | start 24 | ;; 25 | stop) 26 | stop 27 | ;; 28 | restart) 29 | restart 30 | ;; 31 | *) 32 | echo "Usage: $0 {start|stop|restart}" 33 | exit 1 34 | esac 35 | 36 | exit $? 37 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S96SoapyRemote: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | [ -f /bin/SoapySDRServer ] || exit 0 4 | 5 | start() { 6 | printf "Starting SoapyRemote: " 7 | screen -Dm /bin/soapyremote.sh $0 & 8 | . /bin/readsettings.sh >/dev/null 9 | echo "
- Done - Available here: $ip " 10 | } 11 | 12 | 13 | stop() { 14 | printf "Stopping SoapyRemote: " 15 | killall SoapySDRServer 16 | killall screen 17 | echo "done" 18 | } 19 | 20 | restart() { 21 | stop 22 | start 23 | } 24 | 25 | # See how we were called. 26 | case "$1" in 27 | start) 28 | start 29 | ;; 30 | stop) 31 | stop 32 | ;; 33 | restart|reload) 34 | restart 35 | ;; 36 | *) 37 | echo "Usage: $0 {start|stop|reload|restart}" 38 | exit 1 39 | esac 40 | 41 | exit $? 42 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S96dump1090: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | [ -f /bin/dump1090.sh ] || exit 0 4 | 5 | start() { 6 | printf "Starting dump1090: " 7 | screen -Dm /bin/dump1090.sh $0 & 8 | . /bin/readsettings.sh >/dev/null 9 | echo "
- Done - Available here: http://$ip:8080 " 10 | } 11 | 12 | 13 | stop() { 14 | printf "Stopping dump1090: " 15 | killall dump1090 16 | killall screen 17 | echo "done" 18 | } 19 | 20 | restart() { 21 | stop 22 | start 23 | } 24 | 25 | # See how we were called. 26 | case "$1" in 27 | start) 28 | start 29 | ;; 30 | stop) 31 | stop 32 | ;; 33 | restart|reload) 34 | restart 35 | ;; 36 | *) 37 | echo "Usage: $0 {start|stop|reload|restart}" 38 | exit 1 39 | esac 40 | 41 | exit $? 42 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S96leantrx: -------------------------------------------------------------------------------- 1 | S96none -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S96none: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | start() { 4 | . /bin/readsettings.sh >/dev/null 5 | echo "
" 6 | echo "*** All programs have been stopped! ***" 7 | echo "
" 8 | echo "LeanTRX is available here: http://$ip/leantrx" 9 | } 10 | 11 | 12 | stop() { 13 | echo " " 14 | } 15 | 16 | restart() { 17 | stop 18 | start 19 | } 20 | 21 | # See how we were called. 22 | case "$1" in 23 | start) 24 | start 25 | ;; 26 | stop) 27 | stop 28 | ;; 29 | *) 30 | echo "Usage: $0 {start|stop}" 31 | exit 1 32 | esac 33 | 34 | exit $? 35 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S96openwebrx: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | [ -f /bin/openwebrx.sh ] || exit 0 4 | 5 | start() { 6 | printf "Starting OpenWebRX: " 7 | screen -Dm /bin/openwebrx.sh $0 & 8 | . /bin/readsettings.sh >/dev/null 9 | echo "
- Done - Available here: http://$ip:$web_port " 10 | } 11 | 12 | 13 | stop() { 14 | printf "Stopping OpenWebRX: " 15 | killall python 16 | killall csdr 17 | killall nc 18 | killall nmux 19 | killall screen 20 | echo "done" 21 | } 22 | 23 | restart() { 24 | stop 25 | start 26 | } 27 | 28 | # See how we were called. 29 | case "$1" in 30 | start) 31 | start 32 | ;; 33 | stop) 34 | stop 35 | ;; 36 | restart|reload) 37 | restart 38 | ;; 39 | *) 40 | echo "Usage: $0 {start|stop|reload|restart}" 41 | exit 1 42 | esac 43 | 44 | exit $? 45 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S97autoreboot: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Read settings from NVRAM 4 | . /bin/readsettings.sh >/dev/null 5 | 6 | start() { 7 | if [ "$autoreboot" = "y" ]; then 8 | autoreboot=12 9 | fi 10 | if [ "$autoreboot" != "0" ] && [ "$autoreboot" != "n" ]; then 11 | echo "*** Auto-reboot enabled every $autoreboot hours ***" >>/etc/motd 12 | sleep "$autoreboot"h 13 | pluto_reboot reset 14 | else 15 | echo "Auto-reboot disabled" >>/etc/motd 16 | fi 17 | } 18 | 19 | 20 | stop() { 21 | echo "Nothing to stop..." 22 | } 23 | 24 | # See how we were called. 25 | case "$1" in 26 | start) 27 | start 28 | ;; 29 | stop) 30 | stop 31 | ;; 32 | *) 33 | echo "Usage: $0 {start|stop}" 34 | exit 1 35 | esac 36 | 37 | exit $? 38 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/init.d/S97autoupdate: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Read settings from NVRAM 4 | . /bin/readsettings.sh >/dev/null 5 | 6 | start() { 7 | if [ "$updatesrunning" = "y" ]; then 8 | exit 9 | fi 10 | if [ "$autoupdate" = "y" ]; then 11 | updatesrunning=y 12 | sed -i 's/updatesrunning=n/updatesrunning=y/' /root/plutoweb.conf 13 | # Start downloading and updating 14 | wget -qT 15 -O /root/update3.tgz.md5sum --no-check-certificate https://raw.githubusercontent.com/unixpunk/PlutoWeb/master/plutoweb/update3.tgz.md5sum 15 | if [ ! -f /root/update3.tgz.md5sum ] || [ ! -s /root/update3.tgz.md5sum ]; then 16 | echo "*** Auto-updates enabled but unable to download md5sum ***" >>/etc/motd 17 | rm -f /root/update3.tgz* 18 | updatesrunning=n 19 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 20 | /bin/updatewatch.sh & 21 | exit 22 | fi 23 | if diff -q /root/update3.tgz.md5sum /root/.update3.tgz.md5sum; then 24 | echo "*** Auto-updates enabled - already up to date ***" >>/etc/motd 25 | rm -f /root/update3.tgz* 26 | updatesrunning=n 27 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 28 | /bin/updatewatch.sh & 29 | exit 30 | else 31 | wget -qT 15 -O /root/update3.tgz --no-check-certificate https://raw.githubusercontent.com/unixpunk/PlutoWeb/master/plutoweb/update3.tgz 32 | if [ ! -f /root/update3.tgz ] || [ ! -s /root/update3.tgz ]; then 33 | echo "*** Auto-updates enabled but unable to download update3.tgz ***" >>/etc/motd 34 | rm -f /root/update3.tgz* 35 | updatesrunning=n 36 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 37 | /bin/updatewatch.sh & 38 | exit 39 | fi 40 | if [ "$(md5sum -b /root/update3.tgz | awk -F\\ '{ print $1 }')" = "$(cat /root/update3.tgz.md5sum | awk -F\\ '{ print $1 }')" ]; then 41 | cd / && gzip -dc /root/update3.tgz | tar -xvf - && echo "*** Auto-updates enabled and an update completed successfully ***" >>/etc/motd 42 | rm -f /root/update3.tgz* /root/plutoweb.conf 43 | updatesrunning=n 44 | /bin/updatewatch.sh & 45 | exit 46 | else 47 | echo "*** Auto-updates enabled but md5 mismatch on update3.tgz ***" >>/etc/motd 48 | rm -f /root/update3.tgz* 49 | updatesrunning=n 50 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 51 | /bin/updatewatch.sh & 52 | exit 53 | fi 54 | fi 55 | else 56 | echo "Auto-updates disabled" >>/etc/motd 57 | fi 58 | # Starting update3.tgz watchdog in case someone manually drops in an update3.tgz file 59 | # into the USB mass storage or /root 60 | /bin/updatewatch.sh & 61 | exit 62 | } 63 | 64 | 65 | stop() { 66 | echo "Done. (Nothing to stop)" 67 | sed -i 's/updatesrunning=y/updatesrunning=n/' /root/plutoweb.conf 68 | } 69 | 70 | # See how we were called. 71 | case "$1" in 72 | start) 73 | start 74 | ;; 75 | stop) 76 | stop 77 | ;; 78 | restart) 79 | stop 80 | start 81 | ;; 82 | *) 83 | echo "Usage: $0 {start|stop|restart}" 84 | exit 1 85 | esac 86 | 87 | exit $? 88 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/motd.new: -------------------------------------------------------------------------------- 1 | 2 | PlutoWeb v3.0 3 | 4 | http://pluto.local/ 5 | 6 | Run settings.sh to see available options. 7 | 8 | Dual-core enabled 9 | 70-6000Mhz range enabled 10 | 11 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/rtl_433/chungear_bcf-0019x2.conf: -------------------------------------------------------------------------------- 1 | # Chungear Industrial Co Ltd Fan/Light Remote Controller BCF-0019x2 2 | # 3 | # https://fccid.io/KUJCE9001/User-Manual/User-Manual-171498.pdf 4 | # repeats of 13 short (252 us) or long (484 us) pulses. Packet gap is 8188 us. 5 | 6 | decoder { 7 | name = Chungear_BCF-0019x2, 8 | modulation = OOK_PWM, 9 | short = 252, 10 | long = 484, 11 | gap = 500, 12 | reset = 8500, 13 | tolerance = 100, 14 | get = id:@9:{4}, 15 | get = button:@1:{6}:[47:light_on-off 55:light_dimmer 62:fan_button_0 61:fan_button_1 59:fan_button_2 31:fan_button_3 63:no_button], 16 | } 17 | 18 | # The getters above decode the following bits: 19 | # 20 | # 11011111 10111 light on/off 21 | # 11101111 10111 light dimmer 22 | # 11111101 10111 fan button 0 23 | # 11111011 10111 fan button 1 24 | # 11110111 10111 fan button 2 25 | # 10111111 10111 fan button 3 26 | # 27 | # xxxxxxxx x0xxx dip sw 1 28 | # xxxxxxxx xx0xx dip sw 2 29 | # xxxxxxxx xxx0x dip sw 3 30 | # xxxxxxxx xxxx0 dip sw 4 31 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/rtl_433/energy_count_3000.conf: -------------------------------------------------------------------------------- 1 | # EC3k Energy Count Control 2 | # 3 | # "Voltcraft Energy Count 3000" (868.3 MHz) sensor sold by Conrad 4 | # aka “Velleman NETBSEM4” 5 | # aka “La Crosse Technology Remote Cost Control Monitor – RS3620”. 6 | # aka "ELV Cost Control" 7 | # 8 | # Stub driver 9 | # FSK PCM NRZ 50 us bit width, up to 12 zeros seen, package should be around 578 bits. 10 | # 11 | # Copyright (C) 2015 Tommy Vestermark 12 | 13 | decoder { 14 | name=Energy-Count-3000, 15 | modulation=FSK_PCM, 16 | short=50, 17 | long=50, 18 | reset=800, 19 | bits>=550, 20 | bits<=590 21 | } 22 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/rtl_433/silverline_doorbell.conf: -------------------------------------------------------------------------------- 1 | # Silverline doorbell 2 | 3 | # A typical x1527 OTP encoder device 4 | # sends 12 tristate "bits" encoded as 2 bits each and a sync pulse 5 | 6 | decoder { 7 | name = Silverline-Doorbell, 8 | modulation = OOK_PWM, 9 | short = 120, 10 | long = 404, 11 | gap = 468, 12 | reset = 4472, 13 | bits = 25, 14 | get = channel:@1:555, 15 | get = sound:@17:15, 16 | } 17 | 18 | # The flex spec supports selecting random bits with a getter mask. E.g. 19 | # in this x1527 tristate example every odd bit is `1` and you want to get 20 | # 6 bits "channel" from the first 12 bits (discarding every odd bit) use: 21 | # get=channel:@1:555 22 | # Effectively this is 11 bits (starting with 1 bit offset to discard the 23 | # first bit) because the mask is always aligned on the first set bit 24 | # (i.e. 555, aaa, 000555, ... are identical). 25 | # 26 | # Imagine the 25 bits of the transmission as: 27 | # 1?1?1?1?1?1?1?1?1?1?1?1?1 28 | # The mask `555` is: 29 | # 0000 0101 0101 0101 30 | # aligned to the first set bit 31 | # 10101010101 32 | # offset 1 bit (`@1`) it selects like this: 33 | # 1?1?1?1?1?1?1?1?1?1?1?1?1 34 | # 10101010101 35 | # -> 36 | # ? ? ? ? ? ? 37 | # resulting in that 6 bit value `??????`. 38 | # 39 | # The same way 3 bits "sound" is `get=sound:@17:15` (where `15` here is 40 | # hex for the 5-bit pattern `10101` -- or use `a8` if you want to left align 41 | # the pattern in the byte there). 42 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/rtl_433/steffen_switch.conf: -------------------------------------------------------------------------------- 1 | # Steffen Switch Transmitter, HS1527 based remote button 2 | 3 | # should abort if (bb[0][0]!=0x00 || (bb[1][0]&0x07)!=0x07 || bb[1][0]!=bb[2][0] || bb[2][0]==bb[3][0]) 4 | 5 | decoder { 6 | name = Steffen-Switch, 7 | modulation = OOK_PPM, 8 | short = 370, 9 | long = 750, 10 | gap = 1080, 11 | reset = 6000, 12 | bits = 25, 13 | get = @0:{5}:code, 14 | get = @20:{4}:button:[14:A 13:B 11:C 7:D 15:ALL], 15 | get = @16:{4}:state:[15:OFF 0:ON], 16 | } 17 | -------------------------------------------------------------------------------- /plutoweb/overlay/etc/rtl_433/valeo_car_key.conf: -------------------------------------------------------------------------------- 1 | # Valeo Car Key 2 | # Identifies event, but does not attempt to decrypt rolling code... 3 | # Copyright (C) 2015 Tommy Vestermark 4 | 5 | # preamble is actually repeated e8e8e8... (with ZEROBIT removed: d1d1d1...) 6 | 7 | decoder { 8 | name=Valeo-Car-Key, 9 | modulation=OOK_MC_ZEROBIT, 10 | short=106, 11 | reset=400, 12 | bits=461, 13 | preamble=d1d1d0 14 | } 15 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/cgi-bin/cgiutils.sh: -------------------------------------------------------------------------------- 1 | # This file is part of LeanTRX (c) . 2 | # See the toplevel README for more information. 3 | 4 | case "$(uname -m)" in 5 | armv7l) PATH=$PATH:../bin/armv7l:../bin/armv6l ;; 6 | armv6l) PATH=$PATH:../bin/armv6l ;; 7 | *) PATH=$PATH:../bin/$(uname -m) ;; 8 | esac 9 | 10 | RECORDINGS=../html/recordings 11 | 12 | parse_query_string() { 13 | local IFS="&" 14 | for nameval in $QUERY_STRING; do 15 | IFS="=" 16 | # Whitelist safe characters here 17 | name=$(echo "$nameval" | sed -e 's/^\([a-zA-Z0-9_]*\)=.*$/\1/;t;d') 18 | val=$(echo "$nameval" | sed -e 's/^.*=\([a-zA-Z0-9():,._/-]*\)$/\1/;t;d') 19 | eval param_$name="\"$val\"" 20 | done 21 | } 22 | 23 | killprocs() { 24 | killall -9 leaniiorx leaniiotx leansdrserv leandvb leanmlmrx cat 2> /dev/null 25 | } 26 | 27 | flagparam() { 28 | if [ "$1" = "on" ]; then echo $2; fi 29 | } 30 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/cgi-bin/dvbrx.cgi: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This file is part of LeanTRX (c) . 4 | # See the toplevel README for more information. 5 | 6 | . ./cgiutils.sh 7 | 8 | cat <&1 14 | 15 | param_standard=DVB-S 16 | param_symbrate=2000e3 17 | param_cstln=QPSK 18 | param_cr=1/2 19 | 20 | param_source=leaniiorx 21 | param_devindex=0 22 | param_freq=2449e6 23 | param_samprate=4e6 24 | param_bufsize=$((1024*1024)) 25 | param_nbufs=32 26 | 27 | param_tune=0 28 | param_sampler=nearest 29 | param_rrc_rej=10 30 | param_viterbi=off 31 | param_fastlock=off 32 | param_drift=off 33 | param_satmodem=off 34 | 35 | param_udp=0 36 | param_udpaddr=0 37 | param_udpport=0 38 | param_rtp=0 39 | param_rtpaddr=0 40 | param_rtpport=0 41 | param_httpd=0 42 | param_httpdport=81 43 | param_file_output=0 44 | 45 | parse_query_string 46 | 47 | killprocs 48 | 49 | if [ "$param_file_output" = on ]; then 50 | FILE_OUTPUT="| tee $RECORDINGS/$(date +%Y%m%d-%H%M%S%z).ts" 51 | fi 52 | 53 | command="leaniiorx --bufsize $param_bufsize --nbufs $param_nbufs -f $param_freq -s $param_samprate --bw $param_symbrate -v \ 54 | | leansdrserv --info3-httpd 8003 \ 55 | leandvb --s16 -f $param_samprate --tune $param_tune --sr $param_symbrate --sampler $param_sampler --rrc-rej $param_rrc_rej --const $param_cstln --standard $param_standard --cr $param_cr $(flagparam $param_viterbi --viterbi) $(flagparam $param_fastlock --fastlock) -v --json --anf 0 --fd-info 3 --fd-const 3 --fd-spectrum 3 $FILE_OUTPUT > /dev/null" 56 | 57 | echo $command 58 | eval $command 59 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/cgi-bin/dvbtx.cgi: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This file is part of LeanTRX (c) . 4 | # See the toplevel README for more information. 5 | 6 | . ./cgiutils.sh 7 | 8 | cat <&1 14 | 15 | param_standard=DVB-S 16 | param_cr=1/2 17 | param_cstln=QPSK 18 | param_symbrate=2000e3 19 | param_interp=30 20 | param_rrc_rej=0 21 | 22 | param_dest=leaniiotx 23 | param_devindex=0 24 | param_freq=2449e6 25 | param_bufsize=$((1024*1024)) 26 | param_nbufs=32 27 | 28 | 29 | parse_query_string 30 | 31 | killprocs 32 | 33 | samprate=$(dc $param_symbrate $param_interp mul p) 34 | 35 | command="leantsgen | leandvbtx --cr $param_cr --const $param_cstln -f $param_interp --s16 --power 0 --rrc-rej $param_rrc_rej -v | leaniiotx --bufsize $param_bufsize --nbufs $param_nbufs -f $param_freq -s $samprate --bw $param_symbrate -v" 36 | 37 | echo $command 38 | eval $command 39 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/cgi-bin/getstream.cgi: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This file is part of LeanTRX (c) . 4 | # See the toplevel README for more information. 5 | 6 | # Usage: getstream.cgi?bytes=FIRST-LAST 7 | 8 | FILE=/tmp/stream 9 | 10 | available=$(ls -l $FILE 2> /dev/null | awk '{print $5}') 11 | 12 | if [ "$QUERY_STRING" = "action=sync" ]; then 13 | [ -n "$available" ] || available=0 14 | cat <&2 42 | sleep 0.2 43 | available=$(ls -l $FILE 2> /dev/null | awk '{print $5}') 44 | if [ -n "$available" -a $((first-1)) -gt "$available" ]; then 45 | echo "Stream file has shrunk. Resyncing." 1>&2 46 | force_resync 47 | fi 48 | retries=$((retries-1)) 49 | if [ $retries = 0 ]; then 50 | echo "Stream file is stalled. Resyncing." 1>&2 51 | force_resync 52 | fi 53 | done 54 | 55 | cat < /dev/null 68 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/cgi-bin/mlmrx.cgi: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This file is part of LeanTRX (c) . 4 | # See the toplevel README for more information. 5 | 6 | . ./cgiutils.sh 7 | 8 | cat <&1 14 | 15 | param_Fc=98e6 16 | param_Fs=25.6e6 17 | param_bw=20e6 18 | param_bufsize=$((1024*1024*4)) 19 | param_nbufs=4 20 | param_fftsize=64 21 | param_maxdev=75e3 22 | param_Fa=44100 23 | param_squelch=0 24 | param_channels= 25 | param_uirate=1 26 | 27 | parse_query_string 28 | 29 | echo "channels=$param_channels" 30 | 31 | FREQS=$(echo $param_channels | tr ',' ' ') 32 | 33 | killprocs 34 | rm -f /tmp/stream 35 | 36 | cmd1="nice -n -5 leaniiorx -v -f $param_Fc -s $param_Fs --bw $param_bw \ 37 | --bufsize $param_bufsize --nbufs $param_nbufs" 38 | cmd2="nice -n -5 leansdrserv --info3-httpd 8003 --control4-httpd 8004 -v \ 39 | leanmlmrx --fc $param_Fc --fs $param_Fs \ 40 | -N $param_fftsize --maxdev $param_maxdev \ 41 | --fa $param_Fa --squelch $param_squelch \ 42 | --fd-info 3 --info-rate $param_uirate --fd-control 4 \ 43 | $FREQS" 44 | 45 | echo "$cmd1 | $cmd2 2>&1 > /tmp/stream" 1>&2 46 | 47 | $cmd1 | $cmd2 2>&1 > /tmp/stream 48 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/cgi-bin/recordings.cgi: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This file is part of LeanTRX (c) . 4 | # See the toplevel README for more information. 5 | 6 | . ./cgiutils.sh 7 | 8 | cd $RECORDINGS || exit 1 9 | 10 | cat < 14 | Current time: $(date +%Y%m%d-%H%M%S%z) 15 |
    16 | EOF 17 | 18 | 19 | for f in *; do 20 | cat <$(ls -eh $f) 22 | EOF 23 | done 24 | 25 | cat <
27 | EOF 28 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/cgi-bin/sysinfo.cgi: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This file is part of LeanTRX (c) . 4 | # See the toplevel README for more information. 5 | 6 | . ./cgiutils.sh 7 | 8 | cat <&1 14 | 15 | echo "leantrx version $(cat ../html/version.txt)" 16 | 17 | for cmd in leandvb leandvbtx leanmlmrx leaniiotx leaniiorx; do 18 | echo "$cmd version: $($cmd --version)" 19 | done 20 | 21 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/html/dvbtx.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | DVB transmitter 4 | 5 | 6 | 7 |
LeanTRX - DVB transmitter
8 | 9 | 13 | 21 | 32 | 33 | 34 | 35 | 36 | 39 | 40 | 41 | 42 | 43 |
Standard
Code rate
Constellation
Symbol rate (baud)
Interpolation
RRC rejection
Destination
Device index
Center frequency (Hz)
Buffer size (samples)
Buffer count
44 | 45 |
46 | FOR LABORATORY USE ONLY - CHECK RADIO REGULATIONS BEFORE TRANSMITTING.
47 |
48 | NOTE: CLICKING THE BUTTON DOES NOT STOP THE TRANSMITTER.
49 | 50 |
51 | SDR console 52 |
(Command pipeline will be displayed here)
53 |
(Error messages will be displayed here) 
54 | 55 |
56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/html/dvbtx.js: -------------------------------------------------------------------------------- 1 | // This file is part of LeanTRX (c) . 2 | // See the toplevel README for more information. 3 | 4 | // Config for DVB modulator. 5 | 6 | var config = { 7 | standard: "DVB-S", 8 | cr: "1/2", 9 | cstln: "QPSK", 10 | symbrate: "20e3", 11 | interp: 30, 12 | rrc_rej: "10", 13 | 14 | destination: "leaniiotx", 15 | devindex: 0, 16 | bufsize: 65536, 17 | nbufs: 32, 18 | freq: "2449e6", // As string to preserve formatting 19 | 20 | autorun: false, 21 | }; 22 | 23 | // DVBTX runtime 24 | 25 | function make_sdr_url() { 26 | var params = config_to_cgi(); 27 | return "/cgi-bin/leantrx/dvbtx.cgi?action=run" + params; 28 | } 29 | 30 | function process(obj) { 31 | alert("Unexpected aux output from CGI: "+obj); 32 | } 33 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/html/leantrx.css: -------------------------------------------------------------------------------- 1 | body { background-color:black; color:white; } 2 | a { color: cyan; } 3 | iframe { background-color:grey; } 4 | canvas { } 5 | canvas#symbols { background-color:#002000; } 6 | canvas#spectrum,video { background-color:#101010; } 7 | #command { background-color:#101010; } 8 | #console { background-color:#101010; } 9 | .mlmstation { text-align:center; transform:translate(0,-50%); } 10 | .mlmboundary { text-align:right; } 11 | table { border-spacing:0px; } 12 | .info { color:yellow; } 13 | .title { font-size:larger; } 14 | input.button { 15 | background: lightgrey; 16 | border: 2px solid grey; 17 | border-radius: 4px; 18 | text-align: center; 19 | padding: 8px; 20 | } 21 | -------------------------------------------------------------------------------- /plutoweb/overlay/leantrx/html/mlmrx.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Legacy mode receiver 4 | 5 | 6 | 7 |
LeanTRX - Legacy mode receiver
8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
Source
Device index
Center frequency (Hz)
Bandwidth (Hz)
Sampling rate (Hz)
Buffer size (samples)
Buffer count
FFT size
Max deviation (Hz)
Squelch (0..1)
Audio rate (Hz)
Channels (MHz)
UI refresh rate
26 | 27 |
28 | 29 | 30 | 31 | 32 | 33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 50 |
51 | SDR console 52 |
(Command pipeline will be displayed here)
53 |
(Error messages will be displayed here) 
54 | 55 |
56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /plutoweb/overlay/lib/SoapySDR/modules0.8/libPlutoSDRSupport.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/lib/SoapySDR/modules0.8/libPlutoSDRSupport.so -------------------------------------------------------------------------------- /plutoweb/overlay/lib/SoapySDR/modules0.8/libremoteSupport.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/lib/SoapySDR/modules0.8/libremoteSupport.so -------------------------------------------------------------------------------- /plutoweb/overlay/lib/libSoapySDR.so: -------------------------------------------------------------------------------- 1 | libSoapySDR.so.0.8 -------------------------------------------------------------------------------- /plutoweb/overlay/lib/libSoapySDR.so.0.8: -------------------------------------------------------------------------------- 1 | libSoapySDR.so.0.8.0 -------------------------------------------------------------------------------- /plutoweb/overlay/lib/libSoapySDR.so.0.8.0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/lib/libSoapySDR.so.0.8.0 -------------------------------------------------------------------------------- /plutoweb/overlay/lib/libcsdr.so.0.15: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/lib/libcsdr.so.0.15 -------------------------------------------------------------------------------- /plutoweb/overlay/lib/python2.7/site-packages/_SoapySDR.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/lib/python2.7/site-packages/_SoapySDR.so -------------------------------------------------------------------------------- /plutoweb/overlay/lib/sysctl.d/SoapySDRServer.conf: -------------------------------------------------------------------------------- 1 | #SoapyRemote: Increase the default socket buffer sizes 2 | #to fit the default size requested for client and server. 3 | net.core.rmem_max=104857600 4 | net.core.wmem_max=104857600 5 | -------------------------------------------------------------------------------- /plutoweb/overlay/moRFeus_listener/get_status.http: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | morf_tool_dir=/moRFeus_listener 4 | source $morf_tool_dir/get_status.sh 5 | get_status 6 | 7 | 8 | -------------------------------------------------------------------------------- /plutoweb/overlay/moRFeus_listener/get_status.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Here we set the morf_toolpath variable. Adapt if you need 4 | 5 | 6 | morf_tool=/bin/morfeus_tool_linux_armv7 7 | 8 | function get_status () { 9 | 10 | dummy=$($morf_tool getCurrent) 11 | sleep 0.1 12 | 13 | echo " 14 | ****** moRFeus status 15 | 16 | Frequency : $($morf_tool getFrequency) 17 | Mode : $($morf_tool getFunction) 18 | Power : $($morf_tool getCurrent) 19 | 20 | $(date +%Y-%m-%d" "%H:%M:%S) 21 | 22 | " 23 | echo $status 24 | export morf_tool 25 | } 26 | 27 | 28 | -------------------------------------------------------------------------------- /plutoweb/overlay/moRFeus_listener/morf_cli.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | morf_tool_dir=/moRFeus_listener 4 | morf_tool=/bin/morfeus_tool_linux_armv7 5 | 6 | 7 | source $morf_tool_dir/get_status.sh 8 | 9 | ####### 10 | 11 | echo " 12 | 13 | 14 | *** moRFeus remote control 15 | *** LamaBleu 05/2018 16 | 17 | 18 | moRFeus listener commands : 19 | ----------------------- 20 | 21 | S : Show Status 22 | F 123456789 : Set Frequency (hz) = (85000000-5400000000) 23 | M [n] : Mixer Mode [Power = (0-7)] 24 | G [n] : Generator Mode [Power = (0-7)] 25 | P n : Power = (0-7) 26 | Q or X : Disconnect 27 | KK : Kill Server 28 | " 29 | 30 | get_status 31 | 32 | 33 | while : 34 | do 35 | command="" 36 | freq="" 37 | arg1="" 38 | power="" 39 | mode="" 40 | 41 | read -r morf_com 42 | 43 | 44 | command=$(echo $morf_com | awk '{print $1}') 45 | arg1=$(echo $morf_com | awk '{print $2}') 46 | arg1=${arg1//[![:digit:]]} 47 | 48 | power=$($morf_tool getCurrent) 49 | 50 | case $command in 51 | [Ff]) echo " **** setFrequency $arg1" 52 | if [ -z "$arg1" ]; then arg1=""; fi 53 | $morf_tool setFrequency $((arg1)); arg1="" 54 | get_status; 55 | ;; 56 | [XxQq]) echo " **** DISCONNECT " 57 | echo " Goodbye. " 58 | exit 0; 59 | ;; 60 | [Ss]) get_status; 61 | ;; 62 | KK) echo "Disconnect and kill server - Goodbye forever !" 63 | killall socat 64 | exit 0; 65 | ;; 66 | [Mm]) if [ -z "$arg1" ]; then arg1=$power; fi 67 | echo " **** set Mixer mode - Power $arg1" 68 | $morf_tool Mixer 69 | $morf_tool setCurrent $((arg1)) 70 | get_status; 71 | ;; 72 | [Pp]) if [ -z "$arg1" ]; then arg1=$power; fi 73 | echo " **** set Current - Power $arg1" 74 | $morf_tool setCurrent $((arg1)) 75 | get_status; 76 | ;; 77 | [Gg]) if [ -z "$arg1" ]; then arg1=$power; fi 78 | echo " **** set Generator mode - Power $arg1" 79 | $morf_tool Generator 80 | $morf_tool setCurrent $((arg1)) 81 | get_status; 82 | ;; 83 | *) command="" 84 | freq="" 85 | morf_com="" 86 | arg1="" 87 | get_status; 88 | ;; 89 | esac 90 | 91 | 92 | command="" 93 | freq="" 94 | morf_com="" 95 | arg1="" 96 | 97 | done 98 | 99 | 100 | -------------------------------------------------------------------------------- /plutoweb/overlay/moRFeus_listener/morf_tcp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | killall socat >/dev/null 2>&1 3 | 4 | 5 | morf_tool_dir=/moRFeus_listener 6 | 7 | ## TCP Listener 8 | 9 | socat TCP4-LISTEN:7778,fork,crlf,reuseaddr EXEC:$morf_tool_dir/morf_cli.sh,pty,stderr,echo=0 & 10 | 11 | ### EXAMPLES: 12 | ### telnet 192.168.0.21 7778 13 | ### echo "M 6" > /dev/tcp/192.168.0.21/7778 14 | ### echo "G" | nc 192.168.0.21 7778 15 | ### nc 192.168.0.21 7778 16 | 17 | 18 | 19 | ### UDP Listener 20 | 21 | socat UDP-l:7779,fork,reuseaddr EXEC:$morf_tool_dir/morf_cli.sh & 22 | 23 | ### EXAMPLE: 24 | ### echo "M 1" | nc -u -q3 192.168.0.21 7779 25 | 26 | 27 | 28 | 29 | ### HTTP Listener 30 | 31 | socat TCP-LISTEN:7780,crlf,reuseaddr,fork SYSTEM:"echo 'HTTP/1.0 200'; echo 'Cache-Control\: no-cache'; echo 'Contentype\: text/plain'; $morf_tool_dir/get_status.http" 32 | 33 | ### EXAMPLE: 34 | ### http://192.168.0.21:7780 35 | 36 | 37 | -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/config_webrx.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/config_webrx.pyc -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/csdr.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/csdr.pyc -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/favicon.ico -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/font-expletus-sans/ExpletusSans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/font-expletus-sans/ExpletusSans-Medium.ttf -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-3d-spectrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-3d-spectrum.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-avatar-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-avatar-background.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-avatar.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-background-cool-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-background-cool-blue.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-background-lingrad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-background-lingrad.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-ha5kfu-top-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-ha5kfu-top-logo.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-logo-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-logo-big.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-panel-log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-panel-log.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-panel-receiver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-panel-receiver.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-panel-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-panel-status.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-play-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-play-button.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-rx-details-arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-rx-details-arrow-up.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-rx-details-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-rx-details-arrow.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-scale-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-scale-background.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-speaker-muted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-speaker-muted.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-speaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-speaker.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-squelch-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-squelch-button.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-top-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-top-logo.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-top-photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-top-photo.jpg -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-waterfall-auto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-waterfall-auto.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-waterfall-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-waterfall-default.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-in-total.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-in-total.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-in.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-out-total.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-out-total.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/htdocs/gfx/openwebrx-zoom-out.png -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/inactive.html: -------------------------------------------------------------------------------- 1 | 2 | 22 | OpenWebRX 23 | 74 | 75 | 76 | 77 |
78 | 79 |
80 | Sorry, the receiver is inactive due to internal error. 81 |
82 |
83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/nanoscroller.css: -------------------------------------------------------------------------------- 1 | /** initial setup **/ 2 | .nano { 3 | position : relative; 4 | width : 100%; 5 | height : 100%; 6 | overflow : hidden; 7 | } 8 | .nano > .nano-content { 9 | position : absolute; 10 | overflow : scroll; 11 | overflow-x : hidden; 12 | top : 0; 13 | right : 0; 14 | bottom : 0; 15 | left : 0; 16 | } 17 | .nano > .nano-content:focus { 18 | outline: thin dotted; 19 | } 20 | .nano > .nano-content::-webkit-scrollbar { 21 | display: none; 22 | } 23 | .has-scrollbar > .nano-content::-webkit-scrollbar { 24 | display: block; 25 | } 26 | .nano > .nano-pane { 27 | background : rgba(0,0,0,.25); 28 | position : absolute; 29 | width : 8px; 30 | right : 0; 31 | top : 0; 32 | bottom : 0; 33 | visibility : hidden\9; /* Target only IE7 and IE8 with this hack */ 34 | opacity : .01; 35 | -webkit-transition : .2s; 36 | -moz-transition : .2s; 37 | -o-transition : .2s; 38 | transition : .2s; 39 | -moz-border-radius : 3px; 40 | -webkit-border-radius : 3px; 41 | border-radius : 3px; 42 | } 43 | .nano > .nano-pane > .nano-slider { 44 | background: #444; 45 | background: rgba(0,0,0,.5); 46 | position : relative; 47 | margin : 0 0px; 48 | -moz-border-radius : 4px; 49 | -webkit-border-radius : 4px; 50 | border-radius : 4px; 51 | } 52 | .nano:hover > .nano-pane, .nano-pane.active, .nano-pane.flashed { 53 | visibility : visible\9; /* Target only IE7 and IE8 with this hack */ 54 | opacity : 0.99; 55 | } 56 | -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/retry.html: -------------------------------------------------------------------------------- 1 | 2 | 22 | OpenWebRX 23 | 74 | 79 | 80 | 81 | 82 | 83 |
84 | 85 |
86 | There are no client slots left on this server. 87 |
88 | Please wait until a client disconnects.
We will try to reconnect in 30 seconds... 89 |
90 |
91 |
92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/htdocs/upgrade.html: -------------------------------------------------------------------------------- 1 | 2 | 22 | OpenWebRX 23 | 74 | 78 | 79 | 80 | 81 | 82 |
83 | 84 |
85 | Only the latest Google Chrome browser is supported at the moment.
86 | Please download and install Google Chrome.
87 |
88 | Alternatively, you may proceed to OpenWebRX, but it's not supposed to work as expected.
89 | Click here if you still want to try OpenWebRX. 90 |
91 |
92 |
93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/rxws.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/rxws.pyc -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/sdrhu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python2 2 | """ 3 | 4 | This file is part of OpenWebRX, 5 | an open-source SDR receiver software with a web UI. 6 | Copyright (c) 2013-2015 by Andras Retzler 7 | 8 | This program is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU Affero General Public License as 10 | published by the Free Software Foundation, either version 3 of the 11 | License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU Affero General Public License for more details. 17 | 18 | You should have received a copy of the GNU Affero General Public License 19 | along with this program. If not, see . 20 | 21 | """ 22 | 23 | import config_webrx as cfg, time, subprocess 24 | 25 | def run(continuously=True): 26 | if not cfg.sdrhu_key: return 27 | firsttime="(Your receiver is soon getting listed on sdr.hu!)" 28 | while True: 29 | cmd = "wget --no-check-certificate --timeout=15 -4qO- https://sdr.hu/update --post-data \"url=http://"+cfg.server_hostname+":"+str(cfg.web_port)+"&apikey="+cfg.sdrhu_key+"\" 2>&1" 30 | #print "[openwebrx-sdrhu]", cmd 31 | returned=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).communicate() 32 | returned=returned[0] 33 | #print returned 34 | if "UPDATE:" in returned: 35 | retrytime_mins = 20 36 | value=returned.split("UPDATE:")[1].split("\n",1)[0] 37 | if value.startswith("SUCCESS"): 38 | print "[openwebrx-sdrhu] Update succeeded! "+firsttime 39 | firsttime="" 40 | else: 41 | print "[openwebrx-sdrhu] Update failed, your receiver cannot be listed on sdr.hu! Reason:", value 42 | else: 43 | retrytime_mins = 2 44 | print "[openwebrx-sdrhu] wget failed while updating, your receiver cannot be listed on sdr.hu!" 45 | if not continuously: break 46 | time.sleep(60*retrytime_mins) 47 | 48 | if __name__=="__main__": 49 | run(False) 50 | 51 | -------------------------------------------------------------------------------- /plutoweb/overlay/openwebrx/sdrhu.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/openwebrx/sdrhu.pyc -------------------------------------------------------------------------------- /plutoweb/overlay/pluto_power/plot.gnu: -------------------------------------------------------------------------------- 1 | # 2 | # Quick plot level/vs freq 3 | # LamaBleu 06/2018 4 | # 5 | # CSV input file format (space separator) : 6 | # freq(Hz) level 7 | # comments at the end of file only 8 | # 9 | set terminal png size 1200, 600 10 | set output '/www/signal.png' 11 | set title "Fstart : " . sprintf("%09.3f", f0/1000) . " kHz - Fstop " . sprintf("%09.3f", fmax/1000) . " kHz" 12 | set xlabel "freq. [MHz]" 13 | set ylabel "level [dB]" 14 | set format x "%1.3f" 15 | set timestamp 16 | plot '/www/signal.csv' using ($1)/1000000:($2) with lines lc rgb '#bf000a' title 'pow_pluto-0.29 calculation', \ 17 | '/www/signal.csv' using ($1)/1000000:($2) s b lc rgb '#2e4053' title 'average' 18 | -------------------------------------------------------------------------------- /plutoweb/overlay/pluto_power/plot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Will display a plot from example.csv file 4 | # and save the plot as example-1.png 5 | # CSVfile : freq(Hz) level(dB) 6 | 7 | fstart=$(tail -1 /www/signal.csv | awk '{print $1}') 8 | fend=$(head -1 /www/signal.csv | awk '{print $1}') 9 | echo "Starting graph build..." 10 | gnuplot -persist -e "fmax=$fstart;f0=$fend" /pluto_power/plot.gnu 11 | . /bin/readsettings.sh >/dev/null 12 | echo "CSV of scan results available at http://$hostname/signal.csv or http://$ip/signal.csv" 13 | echo "Graph available at http://$hostname/signal.png or http://$ip/signal.png" 14 | -------------------------------------------------------------------------------- /plutoweb/overlay/pluto_power/sna.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # LamaBleu 04/2019 4 | # Usage : mini_sna.sh Fstart Fend Step RXgain 5 | # : ./mini_sna.sh 405000 460000 500 30 6 | # (frequencies in kHz) 7 | # 8 | 9 | rm -f /www/signal.csv 2>/dev/null 10 | 11 | fstart=${1}*1000 12 | fend=${2}*1000 13 | step=${3}*1000 14 | rxgain=$4 15 | 16 | # TX : Pluto 17 | echo "Applying hw settings..." 18 | /usr/bin/iio_attr -a -q -c -o ad9361-phy voltage0 hardwaregain -20 1>/dev/null 19 | /usr/bin/iio_attr -a -q -c -o ad9361-phy voltage0 sampling_frequency 1600000 1>/dev/null 20 | /usr/bin/iio_attr -a -q -D ad9361-phy bist_prbs 0 1>/dev/null 21 | /usr/bin/iio_attr -a -q -D ad9361-phy bist_tone "1 1 0 0" 1>/dev/null 22 | 23 | echo "Starting scan..." 24 | for freq in $(seq $((fstart)) $((step)) $((fend))) 25 | do 26 | 27 | # TX : Pluto BIST MODE 28 | fbist=$(($freq-100000)) 29 | /usr/bin/iio_attr -q -c ad9361-phy TX_LO frequency ${fbist} 1>/dev/null 30 | 31 | # RX: get signal level 32 | # -f 4 = sample rate. Increase up to 50 for a quicker sweep but less accurate. 33 | pow_pluto -l $freq -g $rxgain -f 4 >> /www/signal.csv 34 | #sleep 0.1 35 | #tail -n 1 /www/signal.csv 36 | done 37 | 38 | # Pluto : stop bist mode 39 | /usr/bin/iio_attr -D 9361-phy bist_tone "0 0 0 0" 2>/dev/null 40 | 41 | echo "Scan complete. Starting gnuplot..." 42 | 43 | # Create plot 44 | /bin/sh /pluto_power/plot.sh 45 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/CW-pluto.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # 3 | ## Python CW beacon for ADALM-Pluto 4 | # 5 | # Original morse processing made by Bertrand FG8OJ (https://github.com/fg8oj/cwkeyer) 6 | # Adapted to Pluto : LamaBleu - 01/2019 7 | # Using a smooth mix of iio-python, bash-iio, and iio_attr... 8 | 9 | import os 10 | import iio 11 | import time 12 | import sys, getopt 13 | import signal 14 | def main(argv): 15 | wpm=10 16 | frequency=433750000 17 | text='' 18 | try: 19 | text=argv[len(argv)-1] 20 | opts, args = getopt.getopt(sys.argv[1:],"f:w:",["frequency=","wpm="]) 21 | except getopt.GetoptError: 22 | print "test.py -f frequency -w wpm TEXTTOSEND" 23 | usage() 24 | sys.exit(2) 25 | for opt, arg in opts: 26 | if opt in ("-f", "--frequency"): 27 | frequency=int(arg)-250000 28 | elif opt in ("-w","--wpm"): 29 | wpm=int(arg) 30 | else: 31 | text=arg 32 | 33 | send(wpm,text,frequency) 34 | os.system("echo 0 440 0 0 > /sys/kernel/debug/iio/iio:\device1/bist_tone") 35 | sys.exit(2) 36 | 37 | 38 | class SIGINT_handler(): 39 | def __init__(self): 40 | self.SIGINT = False 41 | 42 | def signal_handler(self, signal, frame): 43 | print('\nYou pressed Ctrl+C!\n\n') 44 | self.SIGINT = True 45 | 46 | 47 | handler = SIGINT_handler() 48 | signal.signal(signal.SIGINT, handler.signal_handler) 49 | 50 | 51 | def send(wpm,text,frequency): 52 | ctx = iio.Context('local:') 53 | ctrl = ctx.find_device("ad9361-phy") 54 | txLO = ctrl.find_channel("altvoltage1", True) 55 | Fs = int(str(txLO.attrs["frequency"].value)) 56 | os.system("iio_attr -q -c ad9361-phy voltage0 sampling_frequency 2000000 >/dev/null 2>&1") 57 | os.system("iio_attr -q -c ad9361-phy altvoltage1 frequency " + str(frequency) + " >/dev/null 2>&1") 58 | print "\n\n\n\n !! Pluto TX freq is 250kHz below CW carrier !!" 59 | print "TX LO : actual freq: " , Fs , " - new freq: " , frequency 60 | print "\nCW frequency : " , frequency+250000 , " (= TX_LO + 250000) \n" 61 | 62 | coef=10 63 | CODE = {'A': '.-', 'B': '-...', 'C': '-.-.', 64 | 'D': '-..', 'E': '.', 'F': '..-.', 65 | 'G': '--.', 'H': '....', 'I': '..', 66 | 'J': '.---', 'K': '-.-', 'L': '.-..', 67 | 'M': '--', 'N': '-.', 'O': '---', 68 | 'P': '.--.', 'Q': '--.-', 'R': '.-.', 69 | 'S': '...', 'T': '-', 'U': '..-', 70 | 'V': '...-', 'W': '.--', 'X': '-..-', 71 | 'Y': '-.--', 'Z': '--..', 72 | 73 | '0': '-----', '1': '.----', '2': '..---', 74 | '3': '...--', '4': '....-', '5': '.....', 75 | '6': '-....', '7': '--...', '8': '---..', 76 | '9': '----.',' ':'*' 77 | } 78 | print "speed=",wpm 79 | print "text=",text, "\n\n\n" 80 | for letter in text: 81 | letter=letter.upper() 82 | for sign in CODE[letter]: 83 | if sign=="*": 84 | time.sleep(0.3/wpm*coef) 85 | else: 86 | os.system("echo 1 440 0 0 > /sys/kernel/debug/iio/iio\:device1/bist_tone") 87 | time.sleep(0.1/wpm*coef) 88 | if sign=="-": 89 | time.sleep(0.2/wpm*coef) 90 | os.system("echo 0 440 0 0 > /sys/kernel/debug/iio/iio\:device1/bist_tone") 91 | time.sleep(0.1/wpm*coef) 92 | time.sleep(0.3/wpm*coef) 93 | if handler.SIGINT: 94 | break 95 | return 96 | 97 | if __name__ == "__main__": 98 | main(sys.argv) 99 | 100 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/DATV/datv-rx-leandvb.sh: -------------------------------------------------------------------------------- 1 | echo "Receive DATV on 435MHz, SR 333kS/s, FEC 7/8" 2 | echo "Forward TS stream to 192.168.2.1 4444 using nmux" 3 | echo "From your computer use 'nc 192.168.2.1 4444 | cvlc -'" 4 | echo 5 | echo 6 | leaniiorx --bufsize 131072 --nbufs 32 -f 435e6 -s 2e6 --bw 333e3 -v | leansdrserv --info3-httpd 8003 leandvb --s16 -f 2e6 --tune 0 --sr 333e3 --sampler rrc --rrc-rej 20 --const QPSK --standard DVB-S --cr 7/8 -v --json --anf 0 --fd-info 3 --fd-const 3 --fd-spectrum 3 | nmux -a 192.168.2.1 -p 4444 -n 64 7 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/DATV/datv-test.sh: -------------------------------------------------------------------------------- 1 | if [ ! -f /gadget/config.txt ]; then 2 | losetup /dev/loop7 /opt/vfat.img -o 512 3 | mount /dev/loop7 /gadget 4 | fi 5 | leandvbtx --cr 1/2 --s16 < /gadget/rpidatv.ts | leaniiotx -f 435000000 --bufsize 32768 --nbufs 32 --bw 3e6 -s 1e6 -v 6 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/DATV/datv-tx-mpeg2.sh: -------------------------------------------------------------------------------- 1 | echo "Sending MPEG2-lalinea.ts : 970MHz 1000kS/s FEC:7/8" 2 | if [ ! -f /gadget/config.txt ]; then 3 | losetup /dev/loop7 /opt/vfat.img -o 512 4 | mount /dev/loop7 /gadget 5 | fi 6 | if [ ! -f /gadget/MPEG2-lalinea.ts ]; then 7 | wget https://github.com/LamaBleu/Pluto-DATV-test/raw/master/samples/MPEG2-lalinea.ts -O /gadget/MPEG2-lalinea.ts 8 | fi 9 | leandvbtx --cr 7/8 --s16 < /gadget/MPEG2-lalinea.ts | leaniiotx -f 970000000 --bufsize 32768 --nbufs 32 --bw 3e6 -s 1.6e6 -v 10 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/DATV/datv-tx-mpeg4.sh: -------------------------------------------------------------------------------- 1 | echo "Sending rpidatv.ts : 435MHz 500kS/s FEC:7/8" 2 | if [ ! -f /gadget/config.txt ]; then 3 | losetup /dev/loop7 /opt/vfat.img -o 512 4 | mount /dev/loop7 /gadget 5 | fi 6 | leandvbtx --cr 7/8 --s16 < /gadget/rpidatv.ts | leaniiotx -f 435000000 --bufsize 32768 --nbufs 32 --bw 3e6 -s 1e6 -v 7 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/DATV/datv-tx-test.sh: -------------------------------------------------------------------------------- 1 | echo "Sending rpidatv.ts : 435MHz 500kS/s FEC:7/8" 2 | if [ ! -f /gadget/config.txt ]; then 3 | losetup /dev/loop7 /opt/vfat.img -o 512 4 | mount /dev/loop7 /gadget 5 | fi 6 | leandvbtx --cr 7/8 --s16 < /gadget/rpidatv.ts | leaniiotx -f 435000000 --bufsize 32768 --nbufs 32 --bw 3e6 -s 1e6 -v 7 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/DATV/mpeg2-download.sh: -------------------------------------------------------------------------------- 1 | if [ ! -f /gadget/config.txt ]; then 2 | losetup /dev/loop7 /opt/vfat.img -o 512 3 | mount /dev/loop7 /gadget 4 | fi 5 | wget https://github.com/LamaBleu/Pluto-DATV-test/raw/master/samples/MPEG2-lalinea.ts -o /gadget/MPEG2-lalinea.ts 6 | 7 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/DATV/mpeg4-download.sh: -------------------------------------------------------------------------------- 1 | if [ ! -f /gadget/config.txt ]; then 2 | losetup /dev/loop7 /opt/vfat.img -o 512 3 | mount /dev/loop7 /gadget 4 | fi 5 | wget https://github.com/LamaBleu/Pluto-DATV-test/raw/master/samples/MPEG4-rpidatv.ts -o /gadget/rpidatv.ts 6 | 7 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/nbfm-rx.sh: -------------------------------------------------------------------------------- 1 | echo "Usage : nbfm-rx - example : nbfm-rx.sh 466208000 72 " 2 | echo "NBFM stream : http://192.168.2.1 (48000Hz)" 3 | echo "Listen audio stream : nc 192.168.2.1 4444 | mplayer -cache 1024 -quiet -rawaudio samplesize=2:channels=1:rate=48000 -demuxer rawaudio - " 4 | 5 | rx_sdr -F CF32 -s 2400000 -f $1 -g $2 - | csdr fir_decimate_cc 50 0.005 HAMMING | csdr fmdemod_quadri_cf | csdr limit_ff | csdr deemphasis_nfm_ff 48000 | csdr fastagc_ff | csdr convert_f_i16 | nmux -p 4444 -a 192.168.2.1 6 | 7 | 8 | -------------------------------------------------------------------------------- /plutoweb/overlay/plutoscripts/wbfm-rx.sh: -------------------------------------------------------------------------------- 1 | echo "Usage : wbfm-rx.sh - example : wbfm-rx.sh 105.1 72" 2 | echo "WBFM stream : http://192.168.2.1:4444 (48000Hz)" 3 | echo "Listen audio stream : nc 192.168.2.1 4444 | mplayer -cache 1024 -quiet -rawaudio samplesize=2:channels=1:rate=48000 -demuxer rawaudio -" 4 | echo "or : nc 192.168.2.1 4444 | aplay -r 96k -f dat -c 1" 5 | rx_sdr -F CF32 -s 3000000 -f ${1}M -g $2 - | csdr fir_decimate_cc 12 0.06 HAMMING | csdr fmdemod_quadri_cf | csdr fractional_decimator_ff 5 | csdr deemphasis_wfm_ff 48000 75e-6 | csdr convert_f_i16 | nmux -a 192.168.2.1 -p 4444 6 | 7 | -------------------------------------------------------------------------------- /plutoweb/overlay/usr/share/terminfo/l/linux: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/usr/share/terminfo/l/linux -------------------------------------------------------------------------------- /plutoweb/overlay/www/README/minidemod.README.txt: -------------------------------------------------------------------------------- 1 | minidemod 2 | ========= 3 | 4 | The purpose of `minidemod-wfm.c` is to have a few lines of code that can actually demodulate WFM from an I/Q input. 5 | 6 | The whole DSP chain is built by OS pipes, just like this: 7 | 8 | rtl_sdr -s 240000 -f 89500000 -g 20 - | tcc -lm -run minidemod-wfm.c \ 9 | | sox -t raw -r 240000 -e unsigned -b 8 -c 1 - -t raw - rate 48000 \ 10 | | mplayer -quiet -rawaudio samplesize=1:channels=1:rate=48000 -demuxer rawaudio - 11 | 12 | Read like this: 13 | 14 | rtl_sdr (acquires samples) | minidemod-wfm (demodulates) \ 15 | | sox (low pass filter + decimation) | mplayer (audio output) ` 16 | 17 | To run it, you will need a Linux box with `rtl_sdr tcc sox mplayer` installed. 18 | 19 | I've also added `minidemod-wfm-atan.c` with a detailed explanation of the demodulation process. It does sound better, but uses more CPU (still not more than 10% on my box). 20 | 21 | ## Follow-up 22 | 23 | At SDRA-2018 I gave a talk on writing a simple AM/FM/SSB receiver in C: 24 | 25 | https://www.youtube.com/watch?v=-QERqK1XAy0 26 | 27 | The code (which actually fits on 2 sheets of A4 paper) can be found here: 28 | 29 | https://github.com/ha7ilm/smallrx 30 | 31 | If you need a fully fledged command-line DSP tool for SDR, see my CSDR project here: 32 | 33 | https://github.com/simonyiszk/csdr 34 | 35 | ## How this tool can be used as a demo on SDR 36 | 37 | I used this tool to introduce some fellow students to SDR, after a short explanation on SDR and modulations in general. 38 | 39 | I showed them the code, but previously deleted the formula that does the actual calculation, turning this into a fun exercise: they had to figure out that one line themselves. 40 | 41 | If they entered the correct formula, the success was immediate: audio was playing through the speakers. 42 | 43 | Authors 44 | ------- 45 | 46 | András Retzler 47 | 48 | Also tnx [dnet](https://github.com/dnet) for the small fixes. 49 | -------------------------------------------------------------------------------- /plutoweb/overlay/www/README/pluto_power.README.txt: -------------------------------------------------------------------------------- 1 | MiniSNA for pluto, using pow tool and gnuplot 2 | ============================================= 3 | 4 | 5 | pow is a simple tool to get signal level from pluto at a specific frequency. 6 | It returns frequency (Hz), signal level (dB), RSSI gathered through IIO (dB) 7 | 8 | Large part of the code is coming from [power.c by ADI](https://github.com/analogdevicesinc/plutosdr_scripts/blob/master/power.c) 9 | 10 | 11 | Build pow tool : 12 | ================ 13 | 14 | gcc -std=gnu99 -g -o pow pow.c -liio -lm -Wall -Wextra 15 | 16 | Test : 17 | ./pow -l 430600000 -g 40 -f 3 18 | 19 | result : 430600000 2.49 95.75 20 | units : freq (Hz), signal (dB), RSSI (dB) 21 | 22 | 23 | Test a filter : 24 | =============== 25 | 26 | - pre-requisite: gnuplot gnuplot-qt packages 27 | - use mini_sna.sh 28 | - launch mini_sna.sh. --> parameters : fstart fend step RXgain (freq in kHz) 29 | example : ./mini_sna.sh 410000 470000 500 50 30 | - result file is test.csv 31 | - launch plot.sh to draw plot. 32 | 33 | 34 | You can also edit mini-sna.sh to change samplerate (-f) for pow tool. 35 | Bandwidth is set to 200kHz. 36 | 37 | 38 | ![image](https://user-images.githubusercontent.com/26578895/57102867-b1c15b00-6d24-11e9-85f3-18c58e0aae65.png) 39 | -------------------------------------------------------------------------------- /plutoweb/overlay/www/Transfer/DROP_FILES_HERE_250MB_LIMIT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/www/Transfer/DROP_FILES_HERE_250MB_LIMIT -------------------------------------------------------------------------------- /plutoweb/overlay/www/cgi-bin/leantrx: -------------------------------------------------------------------------------- 1 | ../../leantrx/cgi-bin/ -------------------------------------------------------------------------------- /plutoweb/overlay/www/cgi-bin/upload.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | 4 | import cgi, cgitb, os, sys 5 | 6 | UPLOAD_DIR = '/root/' 7 | 8 | def save_uploaded_file(): 9 | print 'Content-Type: text/html; charset=UTF-8' 10 | print 11 | print ''' 12 | 13 | 14 | Upload File 15 | 16 | 17 | ''' 18 | 19 | form = cgi.FieldStorage() 20 | if not form.has_key('file'): 21 | print '

Not found parameter: file

' 22 | return 23 | 24 | form_file = form['file'] 25 | if not form_file.file: 26 | print '

Not found parameter: file

' 27 | return 28 | 29 | if not form_file.filename: 30 | print '

Not found parameter: file

' 31 | return 32 | 33 | uploaded_file_path = os.path.join(UPLOAD_DIR, os.path.basename(form_file.filename)) 34 | with file(uploaded_file_path, 'wb') as fout: 35 | while True: 36 | chunk = form_file.file.read(100000) 37 | if not chunk: 38 | break 39 | fout.write (chunk) 40 | print '

Completed file upload

' 41 | 42 | print ''' 43 |
44 | Please give at least 10 seconds for update to be applied 45 | 46 | 47 | ''' 48 | 49 | 50 | cgitb.enable() 51 | save_uploaded_file() 52 | -------------------------------------------------------------------------------- /plutoweb/overlay/www/colorbox.css: -------------------------------------------------------------------------------- 1 | /* 2 | Colorbox Core Style: 3 | The following CSS is consistent between example themes and should not be altered. 4 | */ 5 | #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden; -webkit-transform: translate3d(0,0,0);} 6 | #cboxWrapper {max-width:none;} 7 | #cboxOverlay{position:fixed; width:100%; height:100%;} 8 | #cboxMiddleLeft, #cboxBottomLeft{clear:left;} 9 | #cboxContent{position:relative;} 10 | #cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} 11 | #cboxTitle{margin:0;} 12 | #cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} 13 | #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} 14 | .cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} 15 | .cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} 16 | #colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} 17 | 18 | /* 19 | User Style: 20 | Change the following styles to modify the appearance of Colorbox. They are 21 | ordered & tabbed in a way that represents the nesting of the generated HTML. 22 | */ 23 | #cboxOverlay{background:#000; opacity: 0.9; filter: alpha(opacity = 90);} 24 | #colorbox{outline:0;} 25 | #cboxContent{margin-top:20px;background:#000;} 26 | .cboxIframe{background:#fff;} 27 | #cboxError{padding:50px; border:1px solid #ccc;} 28 | #cboxLoadedContent{border:5px solid #000; background:#fff;} 29 | #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;} 30 | #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;} 31 | #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;} 32 | 33 | /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ 34 | #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } 35 | 36 | /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ 37 | #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} 38 | 39 | #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;} 40 | #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;} 41 | #cboxPrevious:hover{background-position:bottom left;} 42 | #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;} 43 | #cboxNext:hover{background-position:bottom right;} 44 | #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;} 45 | #cboxClose:hover{background-position:bottom center;} 46 | -------------------------------------------------------------------------------- /plutoweb/overlay/www/formdata.js: -------------------------------------------------------------------------------- 1 | function trim(str) { 2 | return str.replace(/^\s+|\s+$/g, ''); 3 | } 4 | 5 | 6 | function isEmpty(str) { 7 | str = trim(str); 8 | return ((str == null) || (str.length == 0)) 9 | } 10 | 11 | 12 | function isDigit(c) { 13 | return ((c >= "0") && (c <= "9")) 14 | } 15 | 16 | 17 | function isInteger(str) { 18 | var i; 19 | for (i = 0; i < str.length; i++) { 20 | var c = str.charAt(i); 21 | if (!isDigit(c)) return false; 22 | } 23 | return true; 24 | } 25 | 26 | 27 | function initForm(oForm, element_name, init_txt) { 28 | frmElement = oForm.elements[element_name]; 29 | frmElement.value = init_txt; 30 | } 31 | 32 | 33 | 34 | function clearFieldFirstTime(element) { 35 | if (element.counter==undefined) { 36 | element.counter = 1; 37 | } 38 | 39 | else { 40 | element.counter++; 41 | } 42 | 43 | if (element.counter == 1) { 44 | element.value = ''; 45 | } 46 | } 47 | 48 | 49 | 50 | function showFormData(oForm) { 51 | var msg = "The data that you entered for the form : \n"; 52 | 53 | for (i = 0; i < oForm.length, oForm.elements[i].getAttribute("type") !== 'button'; i++) { 54 | msg += oForm.elements[i].tagName + " with 'name' attribute='" + oForm.elements[i].name + "' and data: "; 55 | if(oForm.elements[i].value == null || oForm.elements[i].value == '') { 56 | msg += "NOT SET \n"; 57 | } else { 58 | msg += oForm.elements[i].value + "\n"; 59 | } 60 | } 61 | 62 | alert(msg); 63 | } 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /plutoweb/overlay/www/getsettings.php: -------------------------------------------------------------------------------- 1 | query("SELECT * FROM settings"); 8 | while ($row = $result->fetchArray()) { 9 | echo "{$row['setting']} = {$row['value']} \n"; 10 | } 11 | ?> 12 | -------------------------------------------------------------------------------- /plutoweb/overlay/www/images/controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/www/images/controls.png -------------------------------------------------------------------------------- /plutoweb/overlay/www/images/dump1090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/www/images/dump1090.png -------------------------------------------------------------------------------- /plutoweb/overlay/www/images/img01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/www/images/img01.jpg -------------------------------------------------------------------------------- /plutoweb/overlay/www/images/img03.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/www/images/img03.gif -------------------------------------------------------------------------------- /plutoweb/overlay/www/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/www/images/loading.gif -------------------------------------------------------------------------------- /plutoweb/overlay/www/images/openwebrx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/www/images/openwebrx.png -------------------------------------------------------------------------------- /plutoweb/overlay/www/images/soapyremote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/overlay/www/images/soapyremote.png -------------------------------------------------------------------------------- /plutoweb/overlay/www/index.html: -------------------------------------------------------------------------------- 1 | index.htm -------------------------------------------------------------------------------- /plutoweb/overlay/www/leantrx: -------------------------------------------------------------------------------- 1 | ../leantrx/html/ -------------------------------------------------------------------------------- /plutoweb/update3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unixpunk/PlutoWeb/23f79e7d1e52c7ed183aa2c5af6be9cccfc10cbf/plutoweb/update3.tgz -------------------------------------------------------------------------------- /plutoweb/update3.tgz.md5sum: -------------------------------------------------------------------------------- 1 | e29474e779df6dfe7f9b675c79fbac22 *update3.tgz 2 | --------------------------------------------------------------------------------