Skip to content

Add Icom ID-51 Plus support via microSD (#50) - #155

Merged
ww8l merged 1 commit into
mainfrom
issue-50-icom-id51
Nov 8, 2026
Merged

ww8l merged 1 commit into
mainfrom
issue-50-icom-id51

Conversation

@ww8l

@ww8l ww8l commented Nov 8, 2026

Copy link
Copy Markdown
Owner

Closes #50.

What

Icom ID-51 Plus (and the 50th Anniversary edition) programmed from its own microSD card, the ID-52's arrangement. The radio saves and loads one .icf (MENU › SD Card › Save / Load Setting › ALL). The export builds a new SetYYYYMMDD_NN.icf from the newest file the radio saved, so the operator's own file is never modified.

  • Memories: 500, with channel lists as banks A–Z (100 each). CHIRP's id51plus map, checked against the radio's own file and Icom's CS-51PLUS for every memory. Uses the ID-5100's 49-byte record, with this radio's multiplier rule (5 kHz first) and step table.
  • Settings: 241 menu settings plus the manual position, including all eight D-PRS items. Each was measured in CS-51PLUS by changing one control and diffing the save. The table and schema come from one generator. Not offered: Home CH (display-only in CS) and the clock (not in the file).
  • The original ID-51 (33900001) and the Plus2 (33900003) are refused by name.

Shared changes

  • radios/icom_card.rs: the .icf card-folder rules now shared by the ID-52 and ID-51. Behaviour is unchanged, but "newest file" now checks files newest-first.
  • SK::EnumBits: an option list inside part of a byte, for ATT(AM).
  • The ID-5100's settings helpers take per-radio ApplyRules.
  • export_noting / export_settings_noting: a setting the encoder declines now reaches the write report as a note.
  • RadioDriver::unstorable_frequency: channel_fit excludes a channel the radio's memory cannot hold. The ID-51 uses it for 8.33 kHz airband channels.

Verified

  • On a real ID-51 Plus 50th Anniversary, every ladder rung passed:
    1. identity copy
    2. one-field rename (proves the #CD checksum)
    3. full 50-memory codeplug in banks HOME/GMRS, through the real exporter
    4. band probe (108.000 AM / 173.995 / 380.000 / 478.995 / 146.520 / 446.000), all six landed
    5. settings spot check (Backlight, Beep Level)
  • Desk gates against the radio's own file (the #[ignore]d tests in icom_id51/real_file.rs): the file round-trips byte for byte, and all 500 records re-encode identically. The 87 memories re-encode from the channels they describe, and the radio's own settings re-apply with zero bytes moved.
  • npm run ci is green locally (906 tests, clippy).

Not verified

  • Two conservative rules apply without measurement on the ID-51: the NMEA/logger sentence limits (at most 4 / at least 1, taken from the ID-5100), and MY call signs stored as typed. A profile outside the limits leaves that group alone and the report says so.
  • The app's UI for this radio (reading settings from the card in the profile editor, the Write to microSD dialog) was not clicked through.
  • The ID-52's write path now runs through the shared helper; its tests pass, but no ID-52 card has been written since.

🤖 Generated with Claude Code

The radio saves and loads one .icf on its card (MENU > SD Card > Save /
Load Setting > ALL), so the export builds a new SetYYYYMMDD_NN.icf from the
newest file the radio saved: 500 memories, lists as banks A-Z, and 241 menu
settings including all eight D-PRS items. The radio's own file is never
modified.

- radios/icom_id51/: layout (CHIRP's id51plus map, checked against the
  radio's file and CS-51PLUS), memory (the ID-5100's 49-byte record, this
  radio's 5 kHz-first multiplier and step table), settings (table and schema
  generated from CS-51PLUS measurements).
- radios/icom_card.rs: the .icf card-folder rules shared by the ID-52 and
  ID-51.
- SK::EnumBits for a multi-bit field inside a byte (ATT(AM)); ID-5100
  settings helpers take per-radio ApplyRules.
- Exporters can return notes (export_noting / export_settings_noting), so a
  setting the encoder declines reaches the report. A driver can mark a
  frequency unstorable, so channel_fit excludes 8.33 kHz airband channels on
  the ID-51 with a reason.

Hardware ladder passed on an ID-51 Plus 50th Anniversary: identity copy,
one-field rename (#CD), full 50-memory codeplug in two banks, band probe
(108 AM / 173.995 / 380 / 478.995 / 2 m / 70 cm), settings spot check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ww8l
ww8l merged commit 600d79d into main Nov 8, 2026
3 checks passed
@ww8l
ww8l deleted the issue-50-icom-id51 branch November 8, 2026 03:12
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 the ICOM ID-51

1 participant