Skip to content

Releases: fritzsche/A1Keyer

A1Keyer v0.5.0

Choose a tag to compare

@fritzsche fritzsche released this 24 Aug 13:16

A1Keyer v0.5.0 — see CHANGELOG.md for the full list. Headline changes:

  • Access-point (AP) mode — press A to 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. Press N for the connected-station count. Mode is persisted: a reboot comes back in the mode the user last chose.
  • Forget-confirmation overlay — in STA mode, X on the network-info screen now opens a Y/N modal before erasing credentials. In AP mode, X drops 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

Choose a tag to compare

@fritzsche fritzsche released this 13 Aug 12:34

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

Choose a tag to compare

@fritzsche fritzsche released this 13 Aug 04:08

A1Keyer v0.2.0 — see CHANGELOG.md for the full list. Headline changes:

  • On-device Wi-Fi configuration via the Cardputer keyboard (C for scan, N for status, X to forget). The compiled-in src/secrets.h path is gone.
  • Dev HTTP console (GET /, /state, /log?n=N) compiled in via the src/wifi_debug.enable marker file.
  • Wi-Fi passphrase masking with Shift+Space reveal.
  • Wi-Fi IP display byte-order fix; reconnect no longer loops through CONNECT_FAILED.
  • WinKey prime gate (RUMlogNG init no longer keys D at boot), soft-reset no longer closes the host, text playback no longer clicks per byte, inter-chunk boundary silence preserved.
  • CORE_DEBUG_LEVEL dropped 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)

Choose a tag to compare

@fritzsche fritzsche released this 14 Jun 01:15

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.bin

Verification

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.