This repository contains the K3NG Arduino CW Keyer, a highly configurable firmware for generating Morse code (CW) in amateur radio operations. The system runs on a wide range of Arduino-compatible microcontrollers (AVR, SAM, STM32, ESP32, Raspberry Pi Pico) and supports multiple input methods including paddles, straight keys, PS2 keyboards, USB keyboards (via MAX3421E USB host shield), and game controllers. It emulates the Winkey protocol for integration with logging software like N1MM+ and provides advanced features such as a CW decoder (using Goertzel algorithm), a built-in web server for remote control, beacon mode, practice/training modes, and SO2R (single operator two radio) support. The architecture is a monolithic Arduino sketch with extensive conditional compilation: over 20 hardware-specific configuration files (keyer_features_and_options_*.h, keyer_pin_settings_*.h, keyer_settings_*.h) allow tailoring the firmware to specific boards and feature sets. The main entry points are the standard Arduino setup() and loop() functions, with the web server module (k3ng_keyer_webserver.ino) providing HTTP-based control. External dependencies include the USB Host Shield library (for USB keyboard/controller input), Adafruit LiquidCrystal and TwiLiquidCrystal libraries (for LCD displays), and a PS2 keyboard library. The codebase is well-structured for its domain but carries significant complexity due to the sheer number of configuration combinations and bundled third-party libraries.
Dire Wolf is a software Terminal Node Controller (TNC) for amateur radio packet radio, specifically AX.25 and APRS. It replaces hardware TNCs by demodulating audio from sound cards or SDR receivers, decoding AX.25 frames, and providing network interfaces (KISS, AGW) for client applications like Xastir, APRSIS32, and UI-View. The codebase is a monolithic C application with threaded audio capture, multiple modem demodulators (AFSK, PSK, G3RUH, 9600bps), forward error correction (FX.25, IL2P), digipeating, IGate (internet gateway), GPS integration, DTMF/APRStt gateway, and telemetry decoding. It runs on Linux, Windows, and macOS. The architecture is single-process with multiple threads, using a global event queue for inter-module communication. Key entry points include the main `direwolf` daemon and several standalone utilities (`decode_aprs`, `kissutil`, `gen_packets`, `atest`, etc.). The implementation is production-grade, with extensive protocol handling and real-world tuning, but exhibits some monolithic design patterns and legacy code (vendored regex, geotranz).
This repository contains the formal specification of the M17 digital radio protocol, an open-source amateur radio standard. It is a single LaTeX document (M17_spec.tex) that defines the physical layer (4FSK modulation, synchronization, randomizer), data link layer (frame types, forward error correction, stream/packet/BERT modes), and application layer (voice, data, encryption, digital signatures). The specification is exhaustive, including mathematical definitions, encoding algorithms, and reference C code snippets. The repository also includes a CI workflow that automatically generates a PDF from the LaTeX source and deploys it to GitHub Pages. While not a software application itself, this spec serves as the authoritative reference for implementing M17-compatible radios and software. The document is actively maintained with frequent revisions and contributions from multiple authors.