The radio accepts one client
IC‑9700 over the network supports one session at a time. So the service connects to the radio only when someone has the panel open, and 20 s after the last tab is closed it disconnects itself. There’s also a Release radio button for when I want to return to wfview or WSJT‑X on the Mac.
Protocol deduced from wfview
Icom’s network protocol isn’t in the radio’s manual. It was worked out by the authors of the open‑source wfview and is in their source code. Based on that, Claude Code wrote his own Python implementation: login, packets with CI‑V commands, the audio stream and keep‑alives. The audio both ways is 16‑bit mono samples, 16,000 per second.
CI‑V commands
It’s the same language as over the USB cable, just wrapped in UDP packets. Each read is a short question and answer. The service asks one question at a time and waits up to 0.25 s for the reply. The radio reports some changes by itself, e.g. when I turn the tuning knob.