Repository navigation
Releases: fritzsche/A1Keyer
Release list
A1Keyer v0.5.0
A1Keyer v0.5.0 — see CHANGELOG.md for the full list. Headline changes:
- Access-point (AP) mode — press
Ato turn the Cardputer into a Wi-Fi access point (A1Keyer,192.168.73.1/24). The passphrase is persisted in NVS so reboots do not require retyping. PressNfor the connected-station count. Mode is persisted: a reboot comes back in the mode the user last chose. - Forget-confirmation overlay — in STA mode,
Xon the network-info screen now opens a Y/N modal before erasing credentials. In AP mode,Xdrops the AP without erasing the passphrase (or touching STA credentials). - Paddle polarity setting (
S) — swap dit/dah on the paddle levers without rewiring. Normal / Reversed, persisted to NVS, applied immediately. Iambic keyer only. - On-device web interface with live decode, settings, and CW memory editing/playback.
- WinKey WK2 emulation for logger-driven CW (RUMlogNG, N1MM, fldigi, WriteLog).
Shipped as two binaries: a1keyer-cardputer-v0.5.0.bin (app update, offset 0x10000) and a1keyer-cardputer-v0.5.0-merged.bin (full flash with bootloader+partitions+otadata, offset 0x0).
v0.3.0
Bugfix release.
What's in v0.3.0
Restores Wi-Fi connectivity after a failed first association attempt.
NVS is now written when the user commits the password (not after
GOT_IP), so the typed credentials survive any number of failed
attempts and any number of reboots. The X (forget) key on the
network-info screen remains the single, explicit way to remove them.
Flash modes
The web flasher picks the right binary for you:
- App update only — preserves your saved settings and Wi-Fi
credentials. Use this to upgrade an already-configured device. - Full flash — wipes everything (keyer settings + Wi-Fi
credentials). Use this on a new device or to recover from a
misconfiguration.
For manual flashing with esptool.py, the canonical filenames are
listed below.
v0.2.0
A1Keyer v0.2.0 — see CHANGELOG.md for the full list. Headline changes:
- On-device Wi-Fi configuration via the Cardputer keyboard (
Cfor scan,Nfor status,Xto forget). The compiled-insrc/secrets.hpath is gone. - Dev HTTP console (
GET /,/state,/log?n=N) compiled in via thesrc/wifi_debug.enablemarker file. - Wi-Fi passphrase masking with
Shift+Spacereveal. - Wi-Fi IP display byte-order fix; reconnect no longer loops through
CONNECT_FAILED. - WinKey prime gate (RUMlogNG init no longer keys
Dat boot), soft-reset no longer closes the host, text playback no longer clicks per byte, inter-chunk boundary silence preserved. CORE_DEBUG_LEVELdropped from 4 to 2 in the production Cardputer build.- CI workflow removed; unit tests run locally via
run_tests.sh.
Shipped as two binaries: a1keyer-cardputer-v0.2.0.bin (app update, offset 0x10000) and a1keyer-cardputer-v0.2.0-merged.bin (full flash with bootloader+partitions+otadata, offset 0x0).
A1Keyer 0.1.0 (Cardputer ADV)
A1Keyer 0.1.0 — first public release (Cardputer ADV)
Low-latency Morse code trainer firmware for the M5Stack Cardputer ADV.
Target: M5Stack Cardputer ADV (ESP32-S3 @ 240 MHz, NS4168 I2S amp,
1.14" 240×135 ST7789V2, 56-key matrix + Button A + GPIO paddle).
Note: This is a 0.x release while the feature set stabilises on real
hardware. v1.0.0 will follow once it has had more time.The Tab5 (ESP32-P4) target compiles but is not yet considered
release-ready and will follow in a later release.
Features
- Iambic B keyer — dual-paddle squeeze keying with proper SWAP /
AUTOREPEAT / END-OF-CHAR logic and 7-dit word-space detection. - Straight key — single-contact keying with bounce-guard verification
and adaptive DIT/DAH classification based on a rolling median. - CW decoder — turns paddle activity into text via a lock-free ring
buffer and a 200-character circular display buffer. - Text playback (encoder) —
playText("…")renders typed text as CW
through the same audio path. - Sub-3 ms audio latency end-to-end.
Flashing
Flash a1keyer-cardputer-v0.1.0.bin to the Cardputer ADV with esptool.py
or the M5Stack burner:
esptool.py --chip esp32s3 -p /dev/tty.usbserial-* \
--baud 1500000 write_flash 0x0 a1keyer-cardputer-v0.1.0.binVerification
SHA256: 672fc9255cd58ddde670481037e0e8dda7587e27cc03a2fc7f02d0c2fd3711bf
Size: 601,392 bytes (587 KB)
Webflasher
The webflasher should hit GitHub's built-in "latest release" endpoint,
which always resolves to the most recent published release:
GET https://api.github.com/repos/fritzsche/A1Keyer/releases/latest
The response's assets[].browser_download_url is the direct download URL
of the current Cardputer binary. When v0.2.0 ships, the same API call
returns the new binary — no webflasher changes needed.
(The repository also carries a floating latest git tag pointing at the
most recent release commit. That tag is auto-moved on every push of a
vX.Y.Z tag by the
Update latest tag
workflow — so you can also clone or check it out with
git clone --branch latest. Pre-release tags like v0.2.0-rc1 are
intentionally excluded.)
License
MIT — see LICENSE
in the source tree.
Changelog
See CHANGELOG.md
for the full list of changes.