aethersdr / aethersdr/AetherSDR
Support HaliKey Serial as a PTT/CW input device
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 221
- Forks
- 117
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 299
Description
Request preparation
- I used an AI assistant to help structure this request
- I checked for existing issues covering the same feature
What would you like?
What
Add first-class support for the HaliKey Serial device (Halibut Electronics)
as a physical PTT/CW-paddle input for AetherSDR, so a user can plug in a
HaliKey Serial dongle, select it in AetherSDR's external-device settings, and
have a physical PTT switch or paddle key the radio.
Why
HaliKey Serial is a small FTDI-based USB-to-serial adapter designed to let
remote operators use a physical PTT switch or CW paddle with SDR client
software that reads serial port flow-control lines (CTS/DSR) as input
signals. It's popular in the FlexRadio remote-operating community as a
low-cost, driver-simple way to get "physical PTT while operating remote."
AetherSDR already advertises generic USB-serial PTT/CW keying, but there's
no confirmed support, device-selection entry, or documented pin mapping for
HaliKey Serial specifically — users have no way to know whether it works
out of the box or how it's expected to be wired in Settings.
How Other Clients Do It
- SmartSDR for Windows — the primary reference target for HaliKey
Serial. It reads the CTS line off a serial port to trigger PTT. - SmartSDR for macOS (Marcus DL8MRE build) — also reads serial
flow-control signals (CTS and DCD, per the vendor's own troubleshooting
notes) for PTT and CW paddle input, and includes a built-in CW keyer. - HaliKey MIDI variant / NetKeyer — a separate, MIDI-based sibling
device exists for platforms without serial-flow-control APIs (iOS, web).
Not relevant to AetherSDR since Linux has full serial access, but useful
context: MIDI-mapping infrastructure already in AetherSDR (FlexControl,
MIDI learn) could eventually cover HaliKey MIDI as a separate issue. - GQRX / SDR++ — RX-focused, no comparable external PTT-hardware
integration to model against.
Suggested Behavior
- In external-device settings (wherever the existing generic serial
PTT/CW-keyer config lives — likely alongsideAppletPanel→ external
devices, or a dedicatedSerialDeviceDialog), add a device preset/entry
for "HaliKey Serial" that:- Auto-detects the FTDI VID/PID HaliKey Serial uses, defaulting the port
selection to it if plugged in (falls back to manual/dev/ttyUSB*
picker otherwise, consistent with existing generic serial support). - Maps CTS → PTT input and DSR → CW key input by default (matching
HaliKey's documented behavior), with the existing generic serial config
UI still available for advanced/manual pin remapping.
- Auto-detects the FTDI VID/PID HaliKey Serial uses, defaulting the port
- On triggering PTT via the mapped line, AetherSDR should key the radio the
same way the existing generic serial-PTT path does (whatever internal
command/model call that already uses). - Settings persist via
AppSettingsper project convention — noQSettings.
Protocol Hints
This is entirely client-side external-hardware handling — it does not touch
the FlexLib/SmartSDR TCP/UDP protocol. The relevant hardware detail:
- HaliKey Serial is a plain FTDI-chip serial device; on Linux it enumerates
as/dev/ttyUSB*(FTDI driver), not/dev/ttyACM*. - It exposes standard RS-232 flow-control lines (CTS/RTS, DTR/DSR) as the
PTT/CW signaling mechanism — no custom protocol or vendor SDK needed,
just reading serial flow-control pin state via Qt SerialPort
(qt6-serialport, already a build dependency). - Whatever internal call the existing generic "Serial PTT/CW keying"
feature uses to trigger radio TX (transmit set .../ netcw path per
CLAUDE.md notes on CW keying) should be reusable here — needs
confirmation from whoever implemented the existing generic serial
support.
Acceptance Criteria
- A HaliKey Serial device connected via USB is detectable/selectable in
AetherSDR's external-device settings without manual port-guessing. - Toggling the PTT switch wired to a HaliKey Serial device correctly
keys/unkeys AetherSDR's TX, verified against a real FLEX radio. - CW paddle input via HaliKey Serial correctly drives AetherSDR's CW
keyer path (iambic or straight key, matching existing CW paddle
support). - Settings for the selected device/port persist across restarts via
AppSettings. - Behavior is documented in README/user docs alongside the existing
"Serial PTT/CW keying" bullet.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the existing generic Serial PTT/CW support, the external-device settings around AppletPanel or SerialDeviceDialog, and AppSettings usage; review the relevant CLAUDE.md CW-keying notes. Check the qt6-serialport flow-control APIs and existing radio TX or netcw path. Done means selectable HaliKey behavior, persisted settings, verified PTT and CW operation, and README/user documentation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, linux
- Domain
- desktop, embedded-iot
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100