From 5869d83de56a4f149907d4cdd611c1ac22f6c5a2 Mon Sep 17 00:00:00 2001 From: eleccoder <9162301+eleccoder@users.noreply.github.com> Date: Wed, 21 Dec 2022 22:35:41 +0100 Subject: [PATCH] Testing section added --- README.md | 34 ++++++++++++++++++++++++++++++---- doc/img/direwolf_decoding.png | Bin 0 -> 21235 bytes 2 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 doc/img/direwolf_decoding.png diff --git a/README.md b/README.md index 9521fdd..4b6ce79 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ cmake -S . -B build cmake --build build ``` -`build/lib/libaprs_pico.a` and `build/aprs_pico_example.uf2|.elf|.xxx` will be generated. +`build/lib/libaprs_pico.a` and `build/aprs_pico_example[.uf2|.elf|.bin]` will be generated. ## Run the example application @@ -59,12 +59,38 @@ Flash 'aprs_pico_example[.uf2|.elf|.bin]' to the Pico board as usual The analog AFSK audio signal will be available at the filter's line-out. You can probe it by a scope, listen to it by using an audio amp, or connect it to any RF transceiver to send it on the air (ham radio license required). -## TODO (Sept. 2021) +## Test the example application using *Dire Wolf* (on LINUX) + +We can use the famous [Dire Wolf](https://github.com/wb2osz/direwolf) CLI software to decode the APRS data after sampling our APRS audio signal by means of a soundcard. + +1. Connect the line-out of our circuit above to the microphone input of your soundcard of your (ALSA-supported) LINUX system. +2. Check if you can hear the typical APRS 'modem-sound' on your audio output device by monitoring the input signal: + +``` +arecord -f cd -c 1 -t raw - | aplay -f cd -c 1 -t raw +``` + +3. Install [Dire Wolf](https://github.com/wb2osz/direwolf) on your system. Probably, you just have to run: + +``` +sudo apt install direwolf +``` + +4. Let's sample the APRS audio signal fed to the soundcard and forward the audio stream to *Dire Wolf*: + +``` +arecord -f cd -c 1 -t raw - | direwolf +``` + +5. Enjoy the decoded APRS message: + +![Decoded APRS message by Dire Wolf](https://github.com/eleccoder/raspi-pico-aprs-tnc/blob/main/doc/img/direwolf_decoding.png) + +## TODO (Dec. 2022) -- [x] Thorough evaluation, in general - [x] Send the APRS message on the console (USB or UART) rather than hard-coding -- [x] Show how to physically connect to a Baofeng HT - [x] PTT control for RF transceivers +- [x] Show how to physically connect to a Baofeng HT ## Ingredients / Acknowledgements diff --git a/doc/img/direwolf_decoding.png b/doc/img/direwolf_decoding.png new file mode 100644 index 0000000000000000000000000000000000000000..64d817e00406426601610995ed8b242696cd52af GIT binary patch literal 21235 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 oD*Vp|{;lwDga6t}CMNO<2r-0QM1WZvX%Q literal 0 HcmV?d00001