Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.3.0 — 2026-02-25¶
Added¶
- Audio streaming (Phase 3):
AudioCodecenum: uLaw, PCM 8/16-bit, Opus 1ch/2chJitterBuffer: reorder out-of-order packets, gap detection, overflow protection- Full-duplex audio: simultaneous RX + TX
start_audio()/stop_audio()convenience API- Configurable
audio_codecandaudio_sample_rateonIcomRadio
- Synchronous API (
icom_lan.sync):- Blocking
IcomRadiowrapper with context manager - Full API parity with async version
- Blocking
- Radio model presets (
icom_lan.radios):- IC-7610 (0x98), IC-7300 (0x94), IC-705 (0xA4), IC-9700 (0xA2), IC-R8600 (0x96), IC-7851 (0x8E)
get_civ_addr()helper function
- Token renewal: background task every 60s (matches wfview protocol)
- Auto-reconnect: watchdog + exponential backoff reconnect (opt-in)
auto_reconnect,reconnect_delay,reconnect_max_delay,watchdog_timeoutparams
Improved¶
- Test suite: 180 → 401 tests, coverage 63% → 88%
- Code quality: all ruff errors fixed, ack/nak checks added
- ACK/NAK verification for attenuator and preamp commands
Security¶
- Removed private IP addresses from all source and git history
- Internal development docs excluded from public repository
0.2.0 — 2026-02-25¶
Added¶
- CLI tool (
icom-lan) with commands:status,freq,mode,power,meter,ptt,cw,power-on,power-off,discover - VFO control:
select_vfo(),vfo_equalize(),vfo_exchange(),set_split_mode() - RF controls:
set_attenuator(),set_preamp() - CW keying:
send_cw_text(),stop_cw_text()— with auto-chunking - Power control:
power_control()for remote power on/off - Network discovery: broadcast-based autodiscovery of Icom radios
__main__.pyforpython -m icom_lanexecution- JSON output option (
--json) for CLI commands - Frequency parsing with k/m suffix (
14.074m,7074k)
Changed¶
- Bumped version to 0.2.0
0.1.0 — 2026-02-24¶
Added¶
- Transport layer: async UDP connection with discovery handshake
- Dual-port architecture: control port (50001) + CI-V port (50002)
- Full authentication: login → token ack → conninfo exchange → status
- CI-V commands:
get/set_frequency(),get/set_mode(),get/set_power() - Meters:
get_s_meter(),get_swr(),get_alc() - PTT:
set_ptt(on/off) - Keep-alive: automatic ping loop (500ms) and retransmit handling
- Sequence tracking: gap detection and retransmit requests
- Context manager:
async with IcomRadio(...) as radio: - Custom exceptions:
ConnectionError,AuthenticationError,CommandError,TimeoutError - Type annotations: full
py.typedmarker - 151 unit tests with mocked transport (no hardware required)
- Integration tests for IC-7610
Technical¶
- Clean-room implementation of the Icom LAN UDP protocol
- Protocol knowledge from wfview reverse engineering (GPLv3 reference only)
- BCD frequency encoding/decoding
- Icom credential substitution-table obfuscation
- Waterfall/echo filtering in CI-V response handling
- GUID echo in conninfo exchange (required for CI-V port discovery)