Skip to content

Add Icom ID-5100 support (#49) - #132

Merged
ww8l merged 2 commits into
mainfrom
issue-49-icom-id5100
Oct 3, 2026
Merged

ww8l merged 2 commits into
mainfrom
issue-49-icom-id5100

Conversation

@ww8l

@ww8l ww8l commented Oct 3, 2026

Copy link
Copy Markdown
Owner

Closes #49.

Adds the Icom ID-5100 (D-STAR + analog mobile), programmed over its data cable by Icom's clone protocol.

What it does

  • Cable clone (MapRev 3, current firmware): read → patch codeplug + profile settings into that image → write → read back to verify. Older-firmware layouts are refused by name at identify.
  • Memories and 26 named banks (A–Z) from the codeplug's channel lists.
  • 292 menu settings, including My Call Sign, TX messages and the full D-PRS (APRS) position / object / item / weather setup. Read from the radio in the profile editor; written in the same upload as the memories.

How it was measured

  • Memory map from CHIRP's id5100.py, checked against the radio's own reads: every record of every read re-encodes byte-identically.
  • Settings measured by driving Icom's CS-5100 in a VM, one control and one diff at a time. Every option of every dropdown was cycled and its label read off the grid. CS-5100's defaults match the radio's factory reset byte for byte. Auto Repeater (absent from CS-5100) was measured on the radio.
  • Applying the settings decoded from an image back onto it changes 0 bytes, across all 292 fields, on 30 radio reads and 1,694 CS-5100 files.

Hardware-proven on the radio

Download, identity write, one-name write, full codeplug (both banks checked on screen), restore, settings write (5 values read back off the screen), and the dev app's Download → Program → Restore flow.

Safety

A clone the radio refuses makes it factory-reset (it happened once, during a band probe, and was restored). Out-of-coverage memories and the NMEA (≤4) / logger (≥1) sentence limits are refused before anything is sent, and restore checks the file the same way.

Shared changes

  • ImageProgramRequest.banks and CodeplugProgramReport.banks_written (now shown in the Program dialog).
  • ImageProgrammer::after_write_instruction: the radio waits for POWER after a write; the Program dialog says so.
  • ImageProgrammer::profile_starts_blank: a new profile for a radio whose program patches its own image starts blank, instead of seeding defaults that would then be written.
  • The ID-52 settings encoder is now table-generic, with an FF-padded text kind.

Deliberately not written

Lists (scan edges/links, DTMF memories, repeater list, GPS memory), GPS Alarm Select/Group/Memory, the Home CH pickers, and Display Language. Each has its reason recorded in the coverage table.

🤖 Generated with Claude Code

ww8l and others added 2 commits October 3, 2026 11:14
)

The ID-5100 is programmed over its data cable by Icom's clone protocol
(MapRev 3 / 0x2A380, current firmware): the whole image is read, the codeplug
and the profile's settings are patched into it, and it is written back.

- Driver (radios/icom_id5100/): clone protocol from CHIRP's icf.py, memory
  encoder on CHIRP's id5100 map checked against the radio's own reads (every
  record of every read re-encodes byte-identically), 26 named banks from the
  codeplug's channel lists.
- 292 settings, measured by driving Icom's CS-5100 in a VM (one control, one
  diff; every option of every dropdown cycled and its label read off the grid),
  plus Auto Repeater measured on the radio. CS-5100's defaults match the
  radio's factory reset byte for byte. Table and form schema are generated
  together and held together by tests.
- Safety: a clone the radio refuses makes it factory-reset (observed once), so
  out-of-coverage memories and the NMEA (<=4) / logger (>=1) sentence limits are
  refused before anything is sent; restore checks the file the same way.
- Hardware-proven on the radio: download, write, restore, full codeplug in both
  banks, settings write read back off the screen, and the dev app's Download ->
  Program -> Restore flow.

Shared changes: ImageProgramRequest.banks, CodeplugProgramReport.banks_written,
ImageProgrammer::after_write_instruction (the radio waits for POWER after a
write; shown in the Program dialog), ImageProgrammer::profile_starts_blank (a
new profile for a radio whose program patches its own image starts blank
instead of seeding defaults that would be written), and the ID-52 settings
encoder made table-generic with an FF-padded text kind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ww8l
ww8l merged commit 23d792f into main Oct 3, 2026
3 checks passed
@ww8l
ww8l deleted the issue-49-icom-id5100 branch October 3, 2026 17:47
ww8l added a commit that referenced this pull request Oct 3, 2026
Bumps the four version files that must stay in sync. What this release adds:

**Icom ID-5100** (#49, PR #132) — the tenth radio, and the first Icom programmed
over a cable rather than a card:

- Icom's clone protocol over the data cable: read, full write, restore, each
  backed up first and verified by read-back. Every rung of the hardware ladder
  passed on the real radio (CPU firmware 1.21, MapRev 3).
- 1000 memories in 26 named banks (A-Z, 100 each), with D-STAR call signs,
  airband 8.33 kHz steps and the radio's own bank names.
- 292 menu settings measured against Icom's CS-5100, including My Call Sign, TX
  messages and the D-PRS position, object, item and weather setup, written in
  the same upload as the memories. Applying a decoded profile changes zero bytes
  on 30 radio reads and 1,694 CS-5100 files.
- A fresh profile starts blank, and blank means "leave the radio's value alone".

⚠ The radio refuses a clone it cannot accept WHOLE and comes back factory reset
-- measured, once, with memories just past its receive edges. The build and the
restore both refuse anything outside 118-174 / 375-550 MHz before a byte is
sent. After a write the radio waits for its POWER button; the app says so.

Also in this release: Tauri 2.12 (Rust and JS), React 19.3, Vite 8.3 and the
rest of the Dependabot batch (#129, #130).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add support for Icom ID-5100

1 participant