Plain CI-V: The Documented Path

Status: research draft, 2026-08-18.

CI-V is Icom's long-standing serial control protocol. Unlike the network protocol in protocol-notes.md, CI-V is documented by Icom, published as a "CI-V Reference Guide" PDF per radio, and has been stable in shape since the 1980s. There is no reverse engineering required and no licensing ambiguity around the command set itself.

The IC-7300 MK2 exposes CI-V three ways:

  1. Over the rear USB port as a virtual serial port
  2. Over the 3.5 mm CI-V remote jack
  3. Tunnelled inside the network protocol's CI-V stream

Point 3 is the important one. The network protocol does not define its own command language; it carries CI-V frames verbatim. So the entire command layer of a well built client is transport independent, and can be built and tested over USB before any UDP work begins.

Framing

FE FE <to> <from> <cmd> [<subcmd>] [<data> ...] FD

Addresses relevant here:

RadioAddress
IC-73000x94
IC-7300 MK20xB6 (confirmed on hardware)
IC-76100x98
IC-7050xA4
IC-97000xA2
Controller (PC)0xE0

The address is user-changeable in the radio's menu, so read it from settings rather than hardcoding, but 0xB6 is the MK2 factory default.

BCD encoding

Numeric fields are packed BCD, and frequency is little-endian BCD, which catches everyone once. 14.074000 MHz is sent as five bytes:

00 40 07 14 00
 |  |  |  |  +-- 100 MHz / 1 GHz digits
 |  |  |  +----- 1 MHz / 10 MHz
 |  |  +-------- 10 kHz / 100 kHz
 |  +----------- 100 Hz / 1 kHz
 +-------------- 1 Hz / 10 Hz

Levels and most other scalars are two byte BCD in the range 0000 to 0255.

Command surface

The commands that matter for a general purpose control head, all documented by Icom:

CmdSubFunction
0x00Set frequency (transceive broadcast)
0x01Set mode (transceive broadcast)
0x03Read operating frequency
0x04Read operating mode and filter
0x05Set operating frequency
0x06Set operating mode and filter
0x07VFO select, A/B, split, swap
0x08Memory channel select
0x0FSplit and duplex on/off
0x11Attenuator
0x140x01AF level
0x140x02RF gain
0x140x03Squelch
0x140x0ARF power
0x140x0BMic gain
0x140x0CCW keying speed
0x140x0ECompressor level
0x140x0FBreak-in delay
0x150x01Squelch status
0x150x02S-meter
0x150x11RF power meter
0x150x12SWR meter
0x150x13ALC meter
0x150x14Compression meter
0x150x15Vd meter
0x150x16Id meter
0x160x02Preamp
0x160x22Noise blanker on/off
0x160x40Noise reduction on/off
0x160x41Auto notch
0x160x44Speech compressor
0x160x46VOX
0x160x47Break-in
0x160x4FManual notch
0x160x50AGC time constant
0x1A0x05Menu items (the large indexed settings space)
0x1A0x06DATA mode with filter
0x1C0x00PTT on/off
0x1C0x01Tuner control
0x210x00RIT offset
0x210x01RIT on/off
0x210x02dTX (XIT) on/off
0x25Read or set unselected VFO frequency
0x26Read or set unselected VFO mode
0x270x00Scope waveform data output
0x270x10Scope on/off
0x270x11Scope waveform data output on/off
0x270x14Scope centre/fixed mode
0x270x15Scope span (centre mode)
0x270x16Scope fixed edge selection
0x270x17Scope hold
0x270x19Scope reference level
0x270x1AScope sweep speed

The MK2's command set is essentially unchanged from the MK1; wfview's rig definitions list the same 183 commands for both. Get the official CI-V Reference Guide PDF for the MK2 and treat it as the source of truth over any third-party table, including this one.

Transceive mode

If "CI-V Transceive" is enabled in the radio menu, the radio spontaneously broadcasts frequency (0x00) and mode (0x01) changes whenever the operator turns the dial. This is how you get responsive UI without aggressive polling. Enable it, and poll only for things that do not broadcast (meters, mostly).

What CI-V alone can and cannot do

This is the central scoping question for the roadmap, so be precise about it.

Achievable over plain CI-V, no network protocol needed

In other words: everything in Milestone 0 and Milestone 1 is achievable over plain, documented CI-V.

Requires the undocumented network protocol

The audio caveat that changes the calculus

Even audio has a documented workaround on this radio. The IC-7300 MK2's USB port presents a USB audio class device alongside the serial port, exactly as the MK1 does. A daemon on a machine cabled to the radio can capture RX audio and play TX audio through a standard sound card interface, with no Icom network protocol involved at all.

So the honest statement is:

The undocumented network protocol buys you exactly one thing: removing the requirement for a computer physically attached to the radio.

That is a real product benefit and it is why the MK2 has an Ethernet port. But it is a deployment benefit, not a capability benefit. Every feature through Milestone 2 can be delivered over USB CI-V plus USB audio, using only documented interfaces, with zero legal ambiguity.

Transport comparison

USB CI-VNetwork protocol
Documented by IcomYesNo
Legal ambiguityNoneReverse engineered
Implementation effortDaysWeeks
Needs PC at the radioYesNo
Scope sweep rate4/sec measured, even on FAST30/sec measured, single-packet sweeps
AudioVia USB sound cardVia UDP audio stream
Remote power onNoYes
Concurrent with WSJT-XContended, needs arbitrationContended, needs arbitration

Baud rate note

Set the MK2's CI-V baud to 115200. At 19200 the scope stream alone will saturate the link. Even at 115200, a full 475 bin sweep split across 11 CI-V messages with framing overhead is roughly 600 bytes, so the theoretical ceiling is about 19 sweeps per second and the practical figure once normal polling shares the link is closer to 10 to 15. That is acceptable for a waterfall and noticeably worse than what the LAN transport will deliver.

Recommendation

Build the CI-V command layer first, behind a transport interface with two implementations. Ship Milestone 0 on USB. This removes the entire undocumented protocol from the critical path of proving the product, while producing code that is 100% reused when the LAN transport lands.