Skip to content

Add Yaesu FT-857D / FT-897 support (#145) - #153

Merged
ww8l merged 2 commits into
mainfrom
issue-145-yaesu-ft857d
Nov 4, 2026
Merged

ww8l merged 2 commits into
mainfrom
issue-145-yaesu-ft857d

Conversation

@ww8l

@ww8l ww8l commented Nov 4, 2026

Copy link
Copy Markdown
Owner

Closes #145.

What

One driver (yaesu_ft857d) for the FT-857D and FT-897. The two radios share one clone protocol and one memory map; CHIRP drives both from a single class. Both models are seeded.

  • Clone over the CAT/LINEAR jack, started from the radio's front panel. The operator presses [C] SEND for a read and [A] RCV before a write. The reader resyncs past a stray byte the radio can put on the line before block 0. Whether the image is US (with the extra 60 m block) or export is decided by the radio, not by a model pick.
  • New shared operator steps. radios/operator.rs and OperatorStepBox let a radio session tell the operator what to press. A write waits for Continue, because a radio sitting in RCV is silent. They're used in the Program dialog and in both profile-editor radio bars. Any future front-panel-clone radio can reuse them.
  • 200 memories with FM, NFM, AM, USB, LSB and CW, plus shifts, split, Tone/TSQL/DCS and 8-character tags. The encoder patches the record already in the slot, so a radio's own memories re-encode byte-identically.
  • 46 menu settings across 40 menus. They're generated together with their schema from one measurement sheet, and a test asserts the two agree. Where the radio disagreed with CHIRP's map, CHIRP was corrected: the EXT MENU bit is byte 43.7, not 24.7; the CW QSK list starts at 10 ms, not 5 ms; DISP CONTRAST is raw − 2, not + 2.
  • Cross-driver mode fix. channel_fit now asks each driver which analog modes its encoder writes (RadioDriver::analog_modes). USB/LSB/CW channels, and AM on radios whose encoder can't write it, are excluded with a reason instead of being programmed as dead FM memories. NFM is excluded on the FT5D, whose encoder has no narrow bit. A channel with no mode loads as FM, so the TD-H3 no longer writes it narrow. The CHIRP CSV writer now passes USB/LSB/CW through.

Hardware

All five ladder steps passed on an FT-897 (US) through a Digirig:

  1. Identity write: read, then write the same image back, then read back. Only the radio's working-state bytes moved.
  2. One-name write: memory 1 shows LADDER2 on the screen. That proves there's no checksum beyond the per-block sums.
  3. Full codeplug: 8 memories, with frequency, mode, shift, tone type and tone value all confirmed on the radio's screen.
  4. Band probe: 12 memories from 0.1 to 470 MHz, every one kept, edges checked on the screen.
  5. Settings write through the real app (dev): Beep Volume written and confirmed on the radio.

The FT-857D on hand has a dead CAT TXD line and couldn't be read. It programs identically to the FT-897.

Review notes

  • The settings form shows the 46 fields the evidence settles. The withheld rows and the reason for each are recorded with the measurements.
  • hw_ladder.rs is the #[ignore]d hardware harness, kept like the BT-9000's.

🤖 Generated with Claude Code

ww8l and others added 2 commits November 3, 2026 19:14
One driver for both radios: they share one clone protocol and one memory
map (CHIRP drives them from a single class). Measured on an FT-897 (US);
the FT-857D on hand has a dead CAT TXD line.

- Whole-image clone over the CAT/LINEAR jack, started from the radio's
  front panel. Reads resync past line junk before block 0; US vs export
  is decided by the radio sending the 60 m block or not.
- New shared operator steps (radios/operator.rs, OperatorStepBox): a
  session can tell the operator to press SEND, and wait for Continue
  before a write, since a radio waiting in RCV is silent.
- 200 memories with FM/NFM/AM/USB/LSB/CW, shifts, tones and DCS. The
  encoder patches the slot's existing record, so a radio's own memories
  re-encode byte-identically.
- 46 menu settings across 40 menus, generated with their schema from one
  measurement sheet. CHIRP's map was corrected where the radio disagreed
  (EXT MENU bit, CW QSK list, DISP CONTRAST offset).
- channel_fit now asks each driver which analog modes its encoder writes,
  so USB/LSB/CW/AM channels are excluded with a reason instead of being
  programmed as dead FM memories; missing modes load as FM.

Hardware ladder 1-5 passed on the FT-897 (identity, one-name, full
codeplug, band probe 0.1-470 MHz, settings write through the app).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Windows test binary died at load with STATUS_ENTRYPOINT_NOT_FOUND.
restore_image_from took an Option<AppHandle> so tests could call it with
None, but naming AppHandle from a test links Tauri's window runtime into
the test binary, and on Windows that runtime imports functions that
resolve only under the app's manifest, which a test executable lacks.

The body now takes a sink factory; the command passes one that builds the
operator sink from its AppHandle, and tests pass a typed None that never
names Tauri.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ww8l
ww8l merged commit ca590eb into main Nov 4, 2026
3 checks passed
@ww8l
ww8l deleted the issue-145-yaesu-ft857d branch November 4, 2026 02:33
@ww8l ww8l mentioned this pull request Nov 5, 2026
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 yaesu ft-857d

1 participant