From 8df4de77e66da8f69c1bf3ef8078e508a54e13cd Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Sun, 14 Jun 2026 22:58:01 -0700 Subject: [PATCH 01/10] First pass at FT65 and FT4 (basicly the same radio) support --- src/components/settings/SettingsTab.tsx | 8 +- src/components/ui/StartupModal.tsx | 50 ++-- src/models/RadioSettings.ts | 3 + src/radios/dm32uv/capabilities.ts | 1 + src/radios/dm32uv/descriptor.ts | 1 + src/radios/ft65/capabilities.ts | 31 +++ src/radios/ft65/connection.ts | 217 +++++++++++++++++ src/radios/ft65/constants.ts | 98 ++++++++ src/radios/ft65/descriptor.ts | 53 +++++ src/radios/ft65/protocol.ts | 160 +++++++++++++ src/radios/ft65/settingsFormat.ts | 112 +++++++++ src/radios/ft65/settingsProfile.ts | 132 +++++++++++ src/radios/ft65/structures.ts | 295 ++++++++++++++++++++++++ src/radios/index.ts | 6 + src/radios/types.ts | 2 + src/radios/uv5rmini/descriptor.ts | 1 + src/types/ft65Settings.ts | 34 +++ src/types/radioCapabilities.ts | 2 + 18 files changed, 1188 insertions(+), 18 deletions(-) create mode 100644 src/radios/ft65/capabilities.ts create mode 100644 src/radios/ft65/connection.ts create mode 100644 src/radios/ft65/constants.ts create mode 100644 src/radios/ft65/descriptor.ts create mode 100644 src/radios/ft65/protocol.ts create mode 100644 src/radios/ft65/settingsFormat.ts create mode 100644 src/radios/ft65/settingsProfile.ts create mode 100644 src/radios/ft65/structures.ts create mode 100644 src/types/ft65Settings.ts diff --git a/src/components/settings/SettingsTab.tsx b/src/components/settings/SettingsTab.tsx index 3073a17..cc814a1 100644 --- a/src/components/settings/SettingsTab.tsx +++ b/src/components/settings/SettingsTab.tsx @@ -665,8 +665,8 @@ export const SettingsTab: React.FC = () => { ); })()} - {/* One Key Operation (DM-32 only; UV5R-Mini uses uv5rMiniSettings) */} - {radioSettings && (!radioSettings.uv5rMiniSettings || radioSettings.analogCall) && ( + {/* One Key Operation (DM-32 only; UV5R-Mini uses uv5rMiniSettings, FT-65 uses ft65Settings) */} + {radioSettings && !radioSettings.uv5rMiniSettings && !radioSettings.ft65Settings && ( One Key Operation @@ -939,7 +939,7 @@ export const SettingsTab: React.FC = () => { )} {/* GPS & APRS Settings */} - {radioSettings && !radioSettings.uv5rMiniSettings && ( + {radioSettings && !radioSettings.uv5rMiniSettings && !radioSettings.ft65Settings && ( GPS & APRS @@ -1204,7 +1204,7 @@ export const SettingsTab: React.FC = () => { )} )} - + {caps?.supportsAnalogEmergency && } = ({ }, [isOpen]); const options = useMemo(() => getRadioPickerOptions(), []); + // Group options by manufacturer; ungrouped radios go under a blank key + const groupedOptions = useMemo(() => { + const groups = new Map(); + for (const opt of options) { + const key = opt.group ?? ''; + if (!groups.has(key)) groups.set(key, []); + groups.get(key)!.push(opt); + } + return groups; + }, [options]); + // Default to first radio if none selected const effectiveSelected = selectedRadioModel ?? options[0]?.modelId ?? null; const selectedOption = options.find(o => o.modelId === effectiveSelected); @@ -108,20 +119,31 @@ export const StartupModal: React.FC = ({

Pick a radio

-
- {options.map((opt) => ( - +
+ {Array.from(groupedOptions.entries()).map(([group, opts]) => ( +
+ {group && ( +

+ {group} +

+ )} +
+ {opts.map((opt) => ( + + ))} +
+
))}
diff --git a/src/models/RadioSettings.ts b/src/models/RadioSettings.ts index b92668e..aa1738e 100644 --- a/src/models/RadioSettings.ts +++ b/src/models/RadioSettings.ts @@ -189,4 +189,7 @@ export interface RadioSettings { /** UV5R-Mini specific settings (when radio is UV5R-Mini). Select fields use 0-based index. */ uv5rMiniSettings?: import('../types/uv5rMiniSettings').Uv5rMiniSettings; + + /** FT-65 / FT-4 / FT-25R specific settings. Select fields use 0-based index. */ + ft65Settings?: import('../types/ft65Settings').Ft65Settings; } diff --git a/src/radios/dm32uv/capabilities.ts b/src/radios/dm32uv/capabilities.ts index b0dcef4..b6b197a 100644 --- a/src/radios/dm32uv/capabilities.ts +++ b/src/radios/dm32uv/capabilities.ts @@ -42,4 +42,5 @@ export const DM32UV_CAPABILITIES: RadioCapabilities = { maxScanLists: LIMITS.SCAN_LISTS_MAX, supportsBootImage: true, supportsQuickMessages: true, + supportsAnalogEmergency: true, }; diff --git a/src/radios/dm32uv/descriptor.ts b/src/radios/dm32uv/descriptor.ts index e56ffd9..969159d 100644 --- a/src/radios/dm32uv/descriptor.ts +++ b/src/radios/dm32uv/descriptor.ts @@ -12,6 +12,7 @@ export const DM32UV_DESCRIPTOR: RadioDescriptor = { modelIds: DM32_MODEL_IDS, label: 'DM-32UV', icon: 'πŸ“»', + group: 'Baofeng', supportsBle: false, protocolFactory: () => new DM32UVProtocol(), capabilities: DM32UV_CAPABILITIES, diff --git a/src/radios/ft65/capabilities.ts b/src/radios/ft65/capabilities.ts new file mode 100644 index 0000000..c8eb834 --- /dev/null +++ b/src/radios/ft65/capabilities.ts @@ -0,0 +1,31 @@ +import type { RadioCapabilities } from '../../types/radioCapabilities'; + +const FT65_CAPS_BASE: RadioCapabilities = { + bandLimits: { + vhfMin: 136, + vhfMax: 174, + uhfMin: 400, + uhfMax: 480, + }, + writeValidations: { channelsMustBeInZones: false }, + maxChannels: 200, + supportsZones: false, + supportsScanLists: false, + supportsContacts: false, + analogOnly: true, + supportsBle: false, + preferredTransport: 'serial', + supportsBulkRead: false, +}; + +/** FT-65R / FT-65E: dual-band VHF+UHF. */ +export const FT65_CAPS_DUAL: RadioCapabilities = { ...FT65_CAPS_BASE }; + +/** FT-4XR / FT-4XE: dual-band VHF+UHF. */ +export const FT4X_CAPS_DUAL: RadioCapabilities = { ...FT65_CAPS_BASE }; + +/** FT-25R / FT-4VR: VHF-only. */ +export const FT_CAPS_VHF: RadioCapabilities = { + ...FT65_CAPS_BASE, + bandLimits: { vhfMin: 136, vhfMax: 174, uhfMin: 400, uhfMax: 480 }, +}; diff --git a/src/radios/ft65/connection.ts b/src/radios/ft65/connection.ts new file mode 100644 index 0000000..7b3ba1a --- /dev/null +++ b/src/radios/ft65/connection.ts @@ -0,0 +1,217 @@ +/** + * Web Serial connection for the Yaesu SCU-35 cable (FT-65/FT-4/FT-25). + * + * Protocol: "two-wire" β€” TX and RX are OR'd on the cable, so every byte + * sent is echoed back before the radio's own response arrives. Every + * command exchange follows: send β†’ read echo β†’ read response β†’ read ACK (0x06). + * + * Clone mode lifecycle (mirrors CHIRP do_download / do_upload): + * open() β€” open port, set up reader/writer + * enterCloneMode() β€” PROGRAM β†’ QX, read ID (call before each read/write) + * readBlock() / writeBlock() ... + * sendEnd() β€” END β†’ ACK (call after each read/write) + * close() β€” release port + */ + +import { FT65_BAUD_RATE, FT65_BLOCK_SIZE } from './constants'; + +const PROGRAM_CMD = new TextEncoder().encode('PROGRAM'); +const END_CMD = new TextEncoder().encode('END'); +const ACK = 0x06; +const TIMEOUT_MS = 8000; +const BLOCK_TIMEOUT_MS = 5000; + +export interface FT65SerialPort { + readonly readable: ReadableStream | null; + readonly writable: WritableStream | null; + open(options: { baudRate: number }): Promise; + close(): Promise; +} + +/** Request / reuse a Web Serial port and open it at 9600 baud. */ +export async function openFT65Port(forceSelection = false): Promise { + if (!('serial' in navigator)) throw new Error('Web Serial API not supported. Use Chrome/Edge.'); + const nav = (navigator as any).serial; + let port: FT65SerialPort; + if (forceSelection) { + port = await nav.requestPort(); + } else { + const ports: FT65SerialPort[] = await nav.getPorts(); + port = ports.length > 0 ? ports[0] : await nav.requestPort(); + } + await port.open({ baudRate: FT65_BAUD_RATE }); + return port; +} + +export class FT65Connection { + private reader: ReadableStreamDefaultReader | null = null; + private writer: WritableStreamDefaultWriter | null = null; + private buf = new Uint8Array(0); + private port: FT65SerialPort | null = null; + + /** Valid radio ID prefixes β€” any match accepted. */ + validIdPrefixes: string[] = []; + + /** Open the port and set up reader/writer. Does NOT enter clone mode. */ + async open(port: FT65SerialPort): Promise { + this.port = port; + this.buf = new Uint8Array(0); + if (!port.readable || !port.writable) throw new Error('Port streams unavailable'); + if (port.readable.locked || port.writable.locked) throw new Error('Port already in use'); + this.reader = port.readable.getReader(); + this.writer = port.writable.getWriter(); + await this.delay(300); + this.buf = new Uint8Array(0); + } + + /** + * Enter clone mode and read + validate the radio's ID string. + * Must be called before each readBlock / writeBlock session. + * Returns the raw ID string reported by the radio. + */ + async enterCloneMode(): Promise { + // Send PROGRAM, expect "QX" response. Retry with END recovery if needed. + let entered = false; + for (let endTry = 0; endTry < 3 && !entered; endTry++) { + for (let i = 0; i < 3 && !entered; i++) { + try { + const resp = await this.sendcmd(PROGRAM_CMD, 2); + if (resp[0] === 0x51 && resp[1] === 0x58) { // 'Q','X' + entered = true; + } + } catch { /* retry */ } + } + if (!entered) { + try { await this.sendcmd(END_CMD, 0); } catch { /* ignore */ } + } + } + if (!entered) throw new Error('Could not enter clone mode. Check cable and radio power.'); + + // Read radio ID (variable length, terminated by ACK) + const idBytes = await this.sendcmd(new Uint8Array([0x02]), null); + const idStr = String.fromCharCode(...idBytes).replace(/\x00.*/, '').trim(); + + if ( + this.validIdPrefixes.length > 0 && + !this.validIdPrefixes.some((p) => idStr.startsWith(p)) + ) { + throw new Error( + `Radio ID mismatch. Expected one of [${this.validIdPrefixes.join(', ')}], got "${idStr}". Wrong model selected?` + ); + } + return idStr; + } + + /** Send END to release the radio from clone mode. Call after every read/write session. */ + async sendEnd(): Promise { + await this.sendcmd(END_CMD, 0); + } + + /** Close reader/writer and port. Does NOT send END β€” call sendEnd() first. */ + async close(): Promise { + try { await this.reader?.cancel(); } catch { /* ignore */ } + try { await this.writer?.close(); } catch { /* ignore */ } + if (this.port) { + try { await this.port.close(); } catch { /* ignore */ } + } + this.reader = null; + this.writer = null; + this.port = null; + } + + /** Read one 16-byte block at byte address `addr`. */ + async readBlock(addr: number): Promise { + const cmd = new Uint8Array(4); + cmd[0] = 0x52; // 'R' + cmd[1] = (addr >> 8) & 0xff; + cmd[2] = addr & 0xff; + cmd[3] = FT65_BLOCK_SIZE; + + const response = await this.sendcmd(cmd, 21, BLOCK_TIMEOUT_MS); + if (response[0] !== 0x57) throw new Error(`Bad block response header at addr 0x${addr.toString(16)}`); + const checksum = (response.slice(1, 20).reduce((a, b) => a + b, 0)) & 0xff; + if (checksum !== response[20]) throw new Error(`Block checksum mismatch at 0x${addr.toString(16)}`); + return response.slice(4, 20); + } + + /** Write one 16-byte block at byte address `addr`. */ + async writeBlock(addr: number, data: Uint8Array): Promise { + if (data.length !== FT65_BLOCK_SIZE) throw new Error('Block must be 16 bytes'); + const chkstr = new Uint8Array(19); + chkstr[0] = (addr >> 8) & 0xff; + chkstr[1] = addr & 0xff; + chkstr[2] = FT65_BLOCK_SIZE; + chkstr.set(data, 3); + const checksum = chkstr.reduce((a, b) => a + b, 0) & 0xff; + const msg = new Uint8Array(22); + msg[0] = 0x57; // 'W' + msg.set(chkstr, 1); + msg[20] = checksum; + msg[21] = ACK; + await this.sendcmd(msg, 0, BLOCK_TIMEOUT_MS); + } + + // ------------------------------------------------------------------------- + + private async sendcmd( + cmd: Uint8Array, + responseLen: number | null, + timeoutMs = TIMEOUT_MS + ): Promise> { + this.buf = new Uint8Array(0); + await this.write(cmd); + + // Strip echo + await this.readExact(cmd.length, timeoutMs); + + if (responseLen === null) { + // Variable: read until ACK + const parts: number[] = []; + const deadline = Date.now() + timeoutMs; + while (Date.now() < deadline) { + const b = await this.readExact(1, timeoutMs); + if (b[0] === ACK) return new Uint8Array(parts); + parts.push(b[0]); + } + throw new Error('Timeout reading variable response'); + } + + let response: Uint8Array = new Uint8Array(0); + if (responseLen > 0) { + response = await this.readExact(responseLen, timeoutMs); + } + const ack = await this.readExact(1, timeoutMs); + if (ack[0] !== ACK) throw new Error(`Expected ACK 0x06, got 0x${ack[0].toString(16)}`); + return response; + } + + private async write(data: Uint8Array): Promise { + if (!this.writer) throw new Error('Not connected'); + await this.writer.write(data); + } + + private async readExact(n: number, timeoutMs: number): Promise> { + const deadline = Date.now() + timeoutMs; + while (this.buf.length < n) { + if (Date.now() > deadline) { + throw new Error(`Timeout: needed ${n} bytes, have ${this.buf.length}`); + } + const { value, done } = await this.reader!.read(); + if (done) throw new Error('Serial port closed unexpectedly'); + if (value && value.length > 0) { + const next = new Uint8Array(this.buf.length + value.length); + next.set(this.buf); + next.set(value, this.buf.length); + this.buf = next; + } + if (this.buf.length < n) await this.delay(10); + } + const result = new Uint8Array(this.buf.slice(0, n)); + this.buf = this.buf.length > n ? this.buf.slice(n) : new Uint8Array(0); + return result; + } + + private delay(ms: number): Promise { + return new Promise((r) => setTimeout(r, ms)); + } +} diff --git a/src/radios/ft65/constants.ts b/src/radios/ft65/constants.ts new file mode 100644 index 0000000..85d1450 --- /dev/null +++ b/src/radios/ft65/constants.ts @@ -0,0 +1,98 @@ +/** + * Constants for the Yaesu FT-65 / FT-4 / FT-25 family (SCU-35 cable). + * Protocol derived from CHIRP chirp/drivers/ft4.py. + */ + +export const FT65_BAUD_RATE = 9600; + +/** Total number of 16-byte blocks in memory image. */ +export const FT65_NUM_BLOCKS = 0x215; +export const FT65_BLOCK_SIZE = 16; +export const FT65_MEM_SIZE = FT65_NUM_BLOCKS * FT65_BLOCK_SIZE; // 8528 bytes + +export const FT65_MAX_CHANNELS = 200; +export const FT65_CHANNEL_SIZE = 16; // bytes per channel slot + +/** Memory region offsets. */ +export const FT65_ADDR_CHANNELS = 0x0010; // channel slot memory[200] +export const FT65_ADDR_ENABLE = 0x0E50; // enable bitmap (32 bytes, 1 bit/channel) +export const FT65_ADDR_SCAN = 0x0E70; // scan bitmap (32 bytes, 1 bit/channel) +export const FT65_ADDR_NAMES = 0x1000; // name array (8 bytes/entry, 220 entries) +export const FT65_ADDR_TXFREQS = 0x1700; // TX freq array (4 bytes/entry, 220 entries) +export const FT65_ADDR_SETTINGS = 0x2000; // misc settings (64 bytes) + +/** Channel slot field offsets (within the 16-byte slot). */ +export const SLOT = { + TX_PWR: 0, // u8: 0=lo, 1=med, 2=hi + FREQ: 1, // bbcd[4]: Hz/10, big-endian BCD + TX_CTCSS: 5, // u8: 0=off, 1-50 = CTCSS_TONES index + RX_CTCSS: 6, + TX_DCS: 7, // u8: 0=off, 1-104 = DCS_CODES index + RX_DCS: 8, + DUPLEX: 9, // u8 low 3 bits: 0=+, 2=-, 4=off/simplex, 5=auto, 6=split + OFFSET: 10, // ul16 little-endian: multiply by freq_offset_factor + TX_WIDTH: 12, // u8 bit 0: 0=wide(FM), 1=narrow(NFM) + STEP: 13, + SQL_TYPE: 14, // 0=off,1=r-tone,2=t-tone,3=tsql,4=rev tn,5=dcs,6=pager +} as const; + +/** sql_type values. */ +export const SQL = { OFF: 0, R_TONE: 1, T_TONE: 2, TSQL: 3, REV_TN: 4, DCS: 5, PAGER: 6 } as const; + +/** duplex field values. */ +export const DUPLEX = { PLUS: 0, MINUS: 2, OFF: 4, AUTO: 5, SPLIT: 6 } as const; + +/** + * CTCSS tone table: index β†’ Hz (0 = off). + * Matches CHIRP TONE_MAP; radio encodes as index+0 (0=off, 1=67.0, …). + */ +export const CTCSS_TONES: readonly (number | null)[] = [ + null, 67.0, 69.3, 71.9, 74.4, 77.0, 79.7, 82.5, + 85.4, 88.5, 91.5, 94.8, 97.4, 100.0, 103.5, + 107.2, 110.9, 114.8, 118.8, 123.0, 127.3, + 131.8, 136.5, 141.3, 146.2, 151.4, 156.7, + 159.8, 162.2, 165.5, 167.9, 171.3, 173.8, + 177.3, 179.9, 183.5, 186.2, 189.9, 192.8, + 196.6, 199.5, 203.5, 206.5, 210.7, 218.1, + 225.7, 229.1, 233.6, 241.8, 250.3, 254.1, +]; + +/** + * DCS code table: index β†’ code number (0 = off). + * Matches CHIRP DTCS_MAP. + */ +export const DCS_CODES: readonly (number | null)[] = [ + null, 23, 25, 26, 31, 32, 36, 43, 47, 51, 53, 54, + 65, 71, 72, 73, 74, 114, 115, 116, 122, 125, 131, + 132, 134, 143, 145, 152, 155, 156, 162, 165, 172, 174, + 205, 212, 223, 225, 226, 243, 244, 245, 246, 251, 252, + 255, 261, 263, 265, 266, 271, 274, 306, 311, 315, 325, + 331, 332, 343, 346, 351, 356, 364, 365, 371, 411, 412, + 413, 423, 431, 432, 445, 446, 452, 454, 455, 462, 464, + 465, 466, 503, 506, 516, 523, 526, 532, 546, 565, 606, + 612, 624, 627, 631, 632, 654, 662, 664, 703, 712, 723, + 731, 732, 734, 743, 754, +]; + +/** + * Frequency offset scale factor per radio family. + * FT-65 uses 50 kHz steps; FT-4 uses 25 kHz steps. + */ +export const OFFSET_FACTOR_FT65 = 50_000; // Hz per offset unit +export const OFFSET_FACTOR_FT4 = 25_000; + +/** + * Max displayable name characters per family. + * Physical slot is always 8 bytes; FT-4 front panel only shows 6. + */ +export const MAX_NAME_LEN_FT65 = 8; +export const MAX_NAME_LEN_FT4 = 6; + +/** + * Radio id_str values (matched after stripping trailing null/variant byte). + * Used to validate the radio identity during connect. + */ +export const ID_PREFIX_FT65 = 'IH-420'; +export const ID_PREFIX_FT4X = 'IFT-35R'; +export const ID_PREFIX_FT4V = 'IFT-15R'; +export const ID_PREFIX_FT25 = 'IFT-25R'; diff --git a/src/radios/ft65/descriptor.ts b/src/radios/ft65/descriptor.ts new file mode 100644 index 0000000..702cdb8 --- /dev/null +++ b/src/radios/ft65/descriptor.ts @@ -0,0 +1,53 @@ +/** + * RadioDescriptor entries for the Yaesu FT-65/FT-4/FT-25 family (SCU-35 cable). + * + * Three picker entries cover six hardware variants: + * FT-65 β†’ FT-65R (US/Asia) + FT-65E (EU) β€” same PCB, same ID prefix + * FT-4 β†’ FT-4XR, FT-4XE (dual-band) + FT-4VR (VHF-only) + * FT-25R β†’ FT-25R (VHF-only, US/Asia) + */ +import type { RadioDescriptor } from '../types'; +import { FT65Protocol } from './protocol'; +import { FT65_CAPS_DUAL, FT_CAPS_VHF } from './capabilities'; +import { + ID_PREFIX_FT65, ID_PREFIX_FT4X, ID_PREFIX_FT4V, ID_PREFIX_FT25, + OFFSET_FACTOR_FT65, OFFSET_FACTOR_FT4, + MAX_NAME_LEN_FT65, MAX_NAME_LEN_FT4, +} from './constants'; +import { FT65_SETTINGS_PROFILE, FT4_SETTINGS_PROFILE, FT25R_SETTINGS_PROFILE } from './settingsProfile'; + +/** FT-65 β€” covers FT-65R and FT-65E (identical hardware). */ +export const FT65_DESCRIPTOR: RadioDescriptor = { + modelIds: ['FT-65', 'FT-65R', 'FT-65E'], + label: 'FT-65', + icon: 'πŸ“»', + group: 'Yaesu', + supportsBle: false, + protocolFactory: () => new FT65Protocol('FT-65', [ID_PREFIX_FT65], OFFSET_FACTOR_FT65, MAX_NAME_LEN_FT65), + capabilities: FT65_CAPS_DUAL, + settingsProfile: FT65_SETTINGS_PROFILE, +}; + +/** FT-4 β€” covers FT-4XR, FT-4XE (dual-band) and FT-4VR (VHF-only). */ +export const FT4_DESCRIPTOR: RadioDescriptor = { + modelIds: ['FT-4', 'FT-4XR', 'FT-4XE', 'FT-4VR'], + label: 'FT-4', + icon: 'πŸ“»', + group: 'Yaesu', + supportsBle: false, + protocolFactory: () => new FT65Protocol('FT-4', [ID_PREFIX_FT4X, ID_PREFIX_FT4V], OFFSET_FACTOR_FT4, MAX_NAME_LEN_FT4), + capabilities: FT65_CAPS_DUAL, + settingsProfile: FT4_SETTINGS_PROFILE, +}; + +/** FT-25R β€” VHF-only, US/Asia. */ +export const FT25R_DESCRIPTOR: RadioDescriptor = { + modelIds: ['FT-25R'], + label: 'FT-25R', + icon: 'πŸ“»', + group: 'Yaesu', + supportsBle: false, + protocolFactory: () => new FT65Protocol('FT-25R', [ID_PREFIX_FT25], OFFSET_FACTOR_FT65, MAX_NAME_LEN_FT65), + capabilities: FT_CAPS_VHF, + settingsProfile: FT25R_SETTINGS_PROFILE, +}; diff --git a/src/radios/ft65/protocol.ts b/src/radios/ft65/protocol.ts new file mode 100644 index 0000000..135a2cd --- /dev/null +++ b/src/radios/ft65/protocol.ts @@ -0,0 +1,160 @@ +/** + * FT65Protocol: RadioProtocol for the Yaesu FT-65/FT-4/FT-25 family. + * Analog-only, 200 channels, serial via SCU-35 cable. + * + * Clone mode is self-contained per operation (mirrors CHIRP do_download/do_upload): + * enterCloneMode() β†’ blocks β†’ sendEnd() + * The port stays open between operations; each read/write enters/exits independently. + */ + +import type { RadioProtocol, RadioInfo } from '../../types/radio'; +import type { Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID } from '../../models'; +import { FT65Connection, openFT65Port, type FT65SerialPort } from './connection'; +import { FT65_NUM_BLOCKS, FT65_BLOCK_SIZE, FT65_MEM_SIZE, FT65_ADDR_SETTINGS } from './constants'; +import { parseAllChannels, encodeChannel, clearChannelRegions } from './structures'; +import { parseFt65Settings, writeFt65Settings } from './settingsFormat'; + +export class FT65Protocol implements RadioProtocol { + public onProgress?: (progress: number, message: string) => void; + + private conn: FT65Connection | null = null; + private port: FT65SerialPort | null = null; + private cachedImage: Uint8Array | null = null; + + constructor( + private readonly modelId: string, + private readonly idPrefixes: string[], + private readonly offsetFactor: number, + private readonly maxNameLen: number = 8, + ) {} + + async connect( + portOrOptions?: string | { forcePortSelection?: boolean; transport?: string } + ): Promise { + const opts = typeof portOrOptions === 'object' ? portOrOptions : {}; + const forceSelection = opts.forcePortSelection ?? false; + + this.port = await openFT65Port(forceSelection); + const conn = new FT65Connection(); + conn.validIdPrefixes = this.idPrefixes; + await conn.open(this.port); + this.conn = conn; + } + + async disconnect(): Promise { + this.cachedImage = null; + if (this.conn) { + await this.conn.close(); + this.conn = null; + } + this.port = null; + } + + isConnected(): boolean { + return this.conn !== null; + } + + async getRadioInfo(): Promise { + return { + model: this.modelId, + firmware: '', + buildDate: '', + memoryLayout: { configStart: 0x0000, configEnd: FT65_MEM_SIZE - 1 }, + }; + } + + async readChannels(): Promise { + if (!this.conn) throw new Error('Not connected'); + + await this.conn.enterCloneMode(); + + const image = new Uint8Array(FT65_MEM_SIZE); + for (let block = 0; block < FT65_NUM_BLOCKS; block++) { + const addr = block * FT65_BLOCK_SIZE; + const data = await this.conn.readBlock(addr); + image.set(data, addr); + + if (this.onProgress && block % 16 === 0) { + this.onProgress( + Math.round((block / FT65_NUM_BLOCKS) * 100), + `Reading block ${block + 1} of ${FT65_NUM_BLOCKS}` + ); + } + } + + await this.conn.sendEnd(); + + this.cachedImage = image; + return parseAllChannels(image, this.offsetFactor); + } + + async writeChannels(channels: Channel[]): Promise { + if (!this.conn) throw new Error('Not connected'); + + const image = new Uint8Array(FT65_MEM_SIZE); + // Start from the cached read image so settings/DTMF/P-keys are preserved + if (this.cachedImage) { + image.set(this.cachedImage); + } + + // Clear channel data regions so deleted channels don't leave ghost entries + clearChannelRegions(image); + + for (const ch of channels) { + if (ch.number >= 1 && ch.number <= 200) { + encodeChannel(image, ch, this.offsetFactor, this.maxNameLen); + } + } + + await this.conn.enterCloneMode(); + + // Skip block 0 (radio type ID β€” read-only) + const totalWritable = FT65_NUM_BLOCKS - 1; + for (let block = 1; block < FT65_NUM_BLOCKS; block++) { + const addr = block * FT65_BLOCK_SIZE; + await this.conn.writeBlock(addr, image.subarray(addr, addr + FT65_BLOCK_SIZE)); + + if (this.onProgress && block % 16 === 0) { + this.onProgress( + Math.round(((block - 1) / totalWritable) * 100), + `Writing block ${block} of ${totalWritable}` + ); + } + } + + await this.conn.sendEnd(); + } + + async readZones(): Promise { return []; } + async writeZones(_zones: Zone[]): Promise {} + async readScanLists(): Promise { return []; } + async readDMRRadioIDs(): Promise { return []; } + async writeDMRRadioIDs(_ids: DMRRadioID[]): Promise {} + async readContacts(): Promise { return []; } + async writeContacts(_contacts: Contact[]): Promise {} + async readRadioSettings(): Promise { + if (!this.cachedImage) return null; + const ft65Settings = parseFt65Settings(this.cachedImage); + if (!ft65Settings) return null; + return { ft65Settings } as RadioSettings; + } + + async writeRadioSettings(settings: RadioSettings): Promise { + if (!this.conn) throw new Error('Not connected'); + if (!this.cachedImage) throw new Error('Read from radio before writing settings'); + + const ft65Settings = settings.ft65Settings; + if (!ft65Settings) return; + + // Apply changes to cached image so it stays consistent with what's on the radio + writeFt65Settings(this.cachedImage, ft65Settings); + + // Write only the 4 blocks covering the 64-byte settings region (0x2000–0x203F) + await this.conn.enterCloneMode(); + for (let i = 0; i < 4; i++) { + const addr = FT65_ADDR_SETTINGS + i * FT65_BLOCK_SIZE; + await this.conn.writeBlock(addr, this.cachedImage.subarray(addr, addr + FT65_BLOCK_SIZE)); + } + await this.conn.sendEnd(); + } +} diff --git a/src/radios/ft65/settingsFormat.ts b/src/radios/ft65/settingsFormat.ts new file mode 100644 index 0000000..014e412 --- /dev/null +++ b/src/radios/ft65/settingsFormat.ts @@ -0,0 +1,112 @@ +/** + * Parse/encode the 64-byte settings block at FT65_ADDR_SETTINGS (0x2000). + * Layout from CHIRP chirp/drivers/ft4.py `misc` struct. + */ +import type { Ft65Settings } from '../../types/ft65Settings'; +import { FT65_ADDR_SETTINGS } from './constants'; + +const SETTINGS_SIZE = 0x40; // 64 bytes + +export function parseFt65Settings(image: Uint8Array): Ft65Settings | null { + const off = FT65_ADDR_SETTINGS; + if (off + SETTINGS_SIZE > image.length) return null; + const s = image.subarray(off, off + SETTINGS_SIZE); + + // cw_id: 6 ASCII bytes at 0x07–0x0C, space-padded + let cwId = ''; + for (let i = 0; i < 6; i++) { + const b = s[0x07 + i]; + if (b === 0x00 || b === 0xff) break; + if (b !== 0x20) cwId += String.fromCharCode(b); + else if (cwId.length > 0) cwId += ' '; + } + cwId = cwId.trimEnd(); + + // passwd: 4 ASCII digit bytes at 0x31–0x34 + let passwd = ''; + for (let i = 0; i < 4; i++) { + const b = s[0x31 + i]; + passwd += (b >= 0x30 && b <= 0x39) ? String.fromCharCode(b) : '0'; + } + + return { + apo: Math.min(s[0x00], 24), + artsBeep: Math.min(s[0x01], 2), + artsIntv: Math.min(s[0x02], 1), + battSave: Math.min(s[0x03], 5), + bclo: s[0x04] !== 0, + beep: Math.min(s[0x05], 2), + bell: Math.min(s[0x06], 5), + cwId, + useCwid: s[0x1E] !== 0, + compander: s[0x1F] !== 0, + dtmfMode: Math.min(s[0x10], 1), + dtmfDelay: Math.min(s[0x11], 4), + dtmfSpeed: Math.min(s[0x12], 1), + edgBeep: s[0x13] !== 0, + keyLock: Math.min(s[0x14], 2), + lamp: Math.min(s[0x15], 4), + txLed: s[0x16] !== 0, + bsyLed: s[0x17] !== 0, + moniTcall: Math.min(s[0x18], 4), + priRvt: s[0x19] !== 0, + scanResume: Math.min(s[0x1A], 2), + rfSquelch: Math.min(s[0x1B], 8), + scanLamp: s[0x1C] !== 0, + txSave: s[0x21] !== 0, + vfoSpl: s[0x22] !== 0, + vox: s[0x23] !== 0, + wfmRcv: s[0x24] !== 0, + wxAlert: s[0x26] !== 0, + tot: Math.min(s[0x27], 30), + usePasswd: s[0x30] !== 0, + passwd, + }; +} + +/** Write settings back into image. Only modifies bytes corresponding to known fields; unknown bytes are untouched. */ +export function writeFt65Settings(image: Uint8Array, settings: Partial): void { + const off = FT65_ADDR_SETTINGS; + if (off + SETTINGS_SIZE > image.length) return; + const s = image.subarray(off, off + SETTINGS_SIZE); + + if (settings.apo != null) s[0x00] = Math.min(settings.apo, 24); + if (settings.artsBeep != null) s[0x01] = Math.min(settings.artsBeep, 2); + if (settings.artsIntv != null) s[0x02] = Math.min(settings.artsIntv, 1); + if (settings.battSave != null) s[0x03] = Math.min(settings.battSave, 5); + if (settings.bclo != null) s[0x04] = settings.bclo ? 1 : 0; + if (settings.beep != null) s[0x05] = Math.min(settings.beep, 2); + if (settings.bell != null) s[0x06] = Math.min(settings.bell, 5); + if (settings.cwId != null) { + // space-pad the 6-byte field; uppercase only + const clean = settings.cwId.slice(0, 6).toUpperCase(); + s.fill(0x20, 0x07, 0x0D); + for (let i = 0; i < clean.length; i++) s[0x07 + i] = clean.charCodeAt(i) & 0xff; + } + if (settings.dtmfMode != null) s[0x10] = Math.min(settings.dtmfMode, 1); + if (settings.dtmfDelay != null) s[0x11] = Math.min(settings.dtmfDelay, 4); + if (settings.dtmfSpeed != null) s[0x12] = Math.min(settings.dtmfSpeed, 1); + if (settings.edgBeep != null) s[0x13] = settings.edgBeep ? 1 : 0; + if (settings.keyLock != null) s[0x14] = Math.min(settings.keyLock, 2); + if (settings.lamp != null) s[0x15] = Math.min(settings.lamp, 4); + if (settings.txLed != null) s[0x16] = settings.txLed ? 1 : 0; + if (settings.bsyLed != null) s[0x17] = settings.bsyLed ? 1 : 0; + if (settings.moniTcall != null) s[0x18] = Math.min(settings.moniTcall, 4); + if (settings.priRvt != null) s[0x19] = settings.priRvt ? 1 : 0; + if (settings.scanResume != null) s[0x1A] = Math.min(settings.scanResume, 2); + if (settings.rfSquelch != null) s[0x1B] = Math.min(settings.rfSquelch, 8); + if (settings.scanLamp != null) s[0x1C] = settings.scanLamp ? 1 : 0; + if (settings.useCwid != null) s[0x1E] = settings.useCwid ? 1 : 0; + if (settings.compander != null) s[0x1F] = settings.compander ? 1 : 0; + if (settings.txSave != null) s[0x21] = settings.txSave ? 1 : 0; + if (settings.vfoSpl != null) s[0x22] = settings.vfoSpl ? 1 : 0; + if (settings.vox != null) s[0x23] = settings.vox ? 1 : 0; + if (settings.wfmRcv != null) s[0x24] = settings.wfmRcv ? 1 : 0; + if (settings.wxAlert != null) s[0x26] = settings.wxAlert ? 1 : 0; + if (settings.tot != null) s[0x27] = Math.min(settings.tot, 30); + if (settings.usePasswd != null) s[0x30] = settings.usePasswd ? 1 : 0; + if (settings.passwd != null) { + const digits = settings.passwd.replace(/[^0-9]/g, '').padEnd(4, '0').slice(0, 4); + for (let i = 0; i < 4; i++) s[0x31 + i] = digits.charCodeAt(i); + } +} diff --git a/src/radios/ft65/settingsProfile.ts b/src/radios/ft65/settingsProfile.ts new file mode 100644 index 0000000..0d3bd32 --- /dev/null +++ b/src/radios/ft65/settingsProfile.ts @@ -0,0 +1,132 @@ +/** + * Settings profiles for the FT-65/FT-4/FT-25R family. + * FT65_SETTINGS_PROFILE includes compander (FT-65/FT-25R have the hardware). + * FT4_SETTINGS_PROFILE omits it. + */ +import type { SettingsProfile } from '../../types/settingsProfile'; + +function opt(values: string[]) { + return values.map((label, i) => ({ value: i, label })); +} + +const APO_OPTIONS = opt(['Off', '0.5h', '1.0h', '1.5h', '2.0h', '2.5h', '3.0h', '3.5h', '4.0h', '4.5h', '5.0h', '5.5h', '6.0h', '6.5h', '7.0h', '7.5h', '8.0h', '8.5h', '9.0h', '9.5h', '10.0h', '10.5h', '11.0h', '11.5h', '12.0h']); +const TOT_OPTIONS = opt(['Off', ...Array.from({ length: 30 }, (_, i) => `${i + 1} min`)]); +const BATT_OPTIONS = opt(['Off', '200 ms', '300 ms', '500 ms', '1 s', '2 s']); +const BEEP_OPTIONS = opt(['Key + Scan', 'Key', 'Off']); +const BELL_OPTIONS = opt(['Off', '1T', '3T', '5T', '8T', 'Continuous']); +const LAMP_OPTIONS = opt(['5 sec', '10 sec', '30 sec', 'Key', 'Off']); +const SCAN_OPTIONS = opt(['Busy', 'Hold', 'Time']); +const SQL_OPTIONS = opt(['Off', 'S-1', 'S-2', 'S-3', 'S-4', 'S-5', 'S-6', 'S-7', 'S-Full']); +const ARTS_OPTIONS = opt(['Off', 'In Range', 'Always']); +const ARTS_INTV = opt(['25 sec', '15 sec']); +const KEY_LOCK_OPT = opt(['Key', 'PTT', 'Key + PTT']); +const MONI_OPTIONS = opt(['Monitor', '1750 Hz', '2100 Hz', '1000 Hz', '1450 Hz']); +const DTMF_MODE_OPT = opt(['Manual', 'Auto']); +const DTMF_DLY_OPT = opt(['50 ms', '250 ms', '450 ms', '750 ms', '1000 ms']); +const DTMF_SPD_OPT = opt(['50 ms', '100 ms']); + +function makeSections(includeCompander: boolean): SettingsProfile['sections'] { + return [ + { + id: 'basic', + title: 'Basic', + fields: [ + { key: 'ft65Settings.rfSquelch', label: 'RF Squelch', type: 'select', options: SQL_OPTIONS }, + { key: 'ft65Settings.apo', label: 'Auto Power Off', type: 'select', options: APO_OPTIONS }, + { key: 'ft65Settings.tot', label: 'Time-Out Timer', type: 'select', options: TOT_OPTIONS }, + { key: 'ft65Settings.battSave', label: 'Battery Save', type: 'select', options: BATT_OPTIONS }, + { key: 'ft65Settings.bclo', label: 'Busy Channel Lockout', type: 'checkbox' }, + { key: 'ft65Settings.txSave', label: 'TX Save', type: 'checkbox' }, + ], + }, + { + id: 'audio', + title: 'Audio & Beep', + fields: [ + { key: 'ft65Settings.beep', label: 'Beep', type: 'select', options: BEEP_OPTIONS }, + { key: 'ft65Settings.bell', label: 'Bell Rings', type: 'select', options: BELL_OPTIONS }, + { key: 'ft65Settings.edgBeep', label: 'Edge Beep', type: 'checkbox' }, + ...(includeCompander ? [{ key: 'ft65Settings.compander', label: 'Compander', type: 'checkbox' as const }] : []), + ], + }, + { + id: 'display', + title: 'Display & Indicators', + fields: [ + { key: 'ft65Settings.lamp', label: 'Lamp', type: 'select', options: LAMP_OPTIONS }, + { key: 'ft65Settings.txLed', label: 'TX LED', type: 'checkbox' }, + { key: 'ft65Settings.bsyLed', label: 'Busy LED', type: 'checkbox' }, + { key: 'ft65Settings.scanLamp', label: 'Scan Lamp', type: 'checkbox' }, + ], + }, + { + id: 'scan', + title: 'Scan', + fields: [ + { key: 'ft65Settings.scanResume', label: 'Scan Resume', type: 'select', options: SCAN_OPTIONS }, + { key: 'ft65Settings.priRvt', label: 'Priority Revert', type: 'checkbox' }, + ], + }, + { + id: 'ptt', + title: 'PTT & Monitor', + fields: [ + { key: 'ft65Settings.moniTcall', label: 'Monitor / Tone', type: 'select', options: MONI_OPTIONS }, + { key: 'ft65Settings.vox', label: 'VOX', type: 'checkbox' }, + { key: 'ft65Settings.keyLock', label: 'Key Lock', type: 'select', options: KEY_LOCK_OPT }, + ], + }, + { + id: 'misc', + title: 'Misc', + fields: [ + { key: 'ft65Settings.vfoSpl', label: 'VFO Split', type: 'checkbox' }, + { key: 'ft65Settings.wfmRcv', label: 'WFM Receive', type: 'checkbox' }, + { key: 'ft65Settings.wxAlert', label: 'WX Alert', type: 'checkbox' }, + ], + }, + { + id: 'arts', + title: 'ARTS', + fields: [ + { key: 'ft65Settings.useCwid', label: 'CW ID Enable', type: 'checkbox' }, + { key: 'ft65Settings.cwId', label: 'CW ID Callsign', type: 'text', maxLength: 6 }, + { key: 'ft65Settings.artsBeep', label: 'ARTS Beep', type: 'select', options: ARTS_OPTIONS }, + { key: 'ft65Settings.artsIntv', label: 'ARTS Interval', type: 'select', options: ARTS_INTV }, + ], + }, + { + id: 'dtmf', + title: 'DTMF', + fields: [ + { key: 'ft65Settings.dtmfMode', label: 'DTMF Mode', type: 'select', options: DTMF_MODE_OPT }, + { key: 'ft65Settings.dtmfDelay', label: 'DTMF Delay', type: 'select', options: DTMF_DLY_OPT }, + { key: 'ft65Settings.dtmfSpeed', label: 'DTMF Speed', type: 'select', options: DTMF_SPD_OPT }, + ], + }, + { + id: 'security', + title: 'Security', + fields: [ + { key: 'ft65Settings.usePasswd', label: 'Password Enable', type: 'checkbox' }, + { key: 'ft65Settings.passwd', label: 'Password (4 digits)', type: 'text', maxLength: 4 }, + ], + }, + ]; +} + +export const FT65_SETTINGS_PROFILE: SettingsProfile = { + radioType: 'FT-65', + sections: makeSections(true), +}; + +export const FT4_SETTINGS_PROFILE: SettingsProfile = { + radioType: 'FT-4', + sections: makeSections(false), +}; + +// FT-25R shares the FT-65 profile (same hardware, VHF-only) +export const FT25R_SETTINGS_PROFILE: SettingsProfile = { + radioType: 'FT-25R', + sections: makeSections(true), +}; diff --git a/src/radios/ft65/structures.ts b/src/radios/ft65/structures.ts new file mode 100644 index 0000000..7f044fe --- /dev/null +++ b/src/radios/ft65/structures.ts @@ -0,0 +1,295 @@ +/** + * Pure parse/encode functions for the FT-65/FT-4/FT-25 memory image. + */ + +import type { Channel, CTCSSDCS } from '../../models/Channel'; +import { + FT65_MAX_CHANNELS, FT65_CHANNEL_SIZE, FT65_ADDR_CHANNELS, + FT65_ADDR_ENABLE, FT65_ADDR_NAMES, FT65_ADDR_TXFREQS, + SLOT, SQL, DUPLEX, + CTCSS_TONES, DCS_CODES, +} from './constants'; +import { createDefaultChannel } from '../../utils/channelHelpers'; + +// --------------------------------------------------------------------------- +// BCD frequency codec +// --------------------------------------------------------------------------- + +/** Decode 4-byte big-endian BCD to MHz. Radio stores Hz/10. */ +export function decodeBCDFreq(bytes: Uint8Array, offset = 0): number { + let val = 0; + for (let i = 0; i < 4; i++) { + const b = bytes[offset + i]; + val = val * 100 + ((b >> 4) * 10) + (b & 0xf); + } + return (val * 10) / 1_000_000; // Hz β†’ MHz +} + +/** Encode MHz frequency to 4-byte big-endian BCD (Hz/10). */ +export function encodeBCDFreq(mhz: number, out: Uint8Array, offset = 0): void { + let val = Math.round(mhz * 100_000); // val = Hz/10 as integer + for (let i = 3; i >= 0; i--) { + const lo = val % 10; val = Math.floor(val / 10); + const hi = val % 10; val = Math.floor(val / 10); + out[offset + i] = (hi << 4) | lo; + } +} + +// --------------------------------------------------------------------------- +// Enable bitmap +// --------------------------------------------------------------------------- + +export function isChannelEnabled(image: Uint8Array, idx: number): boolean { + const byte = image[FT65_ADDR_ENABLE + (idx >> 3)]; + return ((byte >> (idx & 7)) & 1) === 1; +} + +export function setChannelEnabled(image: Uint8Array, idx: number, enabled: boolean): void { + const byteIdx = FT65_ADDR_ENABLE + (idx >> 3); + const bit = idx & 7; + if (enabled) { + image[byteIdx] |= (1 << bit); + } else { + image[byteIdx] &= ~(1 << bit); + } +} + +// --------------------------------------------------------------------------- +// Name codec +// --------------------------------------------------------------------------- + +const NAME_SLOT_LEN = 8; // physical bytes per name slot (both FT-65 and FT-4) + +export function decodeName(image: Uint8Array, idx: number): string { + const base = FT65_ADDR_NAMES + idx * NAME_SLOT_LEN; + let name = ''; + for (let i = 0; i < NAME_SLOT_LEN; i++) { + const b = image[base + i]; + if (b === 0x00 || b === 0xff) break; + const c = b === 0x7f ? 0x20 : b; // 0x7F (programmed from VFO) β†’ space + name += String.fromCharCode(c); + } + return name.trimEnd(); +} + +export function encodeName(image: Uint8Array, idx: number, name: string, maxLen = NAME_SLOT_LEN): void { + const base = FT65_ADDR_NAMES + idx * NAME_SLOT_LEN; + // Clear the full 8-byte slot first, then write up to maxLen chars + image.fill(0x00, base, base + NAME_SLOT_LEN); + const capped = name.slice(0, maxLen); + for (let i = 0; i < capped.length; i++) { + image[base + i] = capped.charCodeAt(i) & 0xff; + } +} + +// --------------------------------------------------------------------------- +// CTCSS / DCS helpers +// --------------------------------------------------------------------------- + +function decodeCTCSS(code: number): CTCSSDCS { + if (code === 0) return { type: 'None' }; + const hz = CTCSS_TONES[code]; + if (hz == null) return { type: 'None' }; + return { type: 'CTCSS', value: hz }; +} + +function decodeDCS(code: number): CTCSSDCS { + if (code === 0) return { type: 'None' }; + const n = DCS_CODES[code]; + if (n == null) return { type: 'None' }; + return { type: 'DCS', value: n, polarity: 'N' }; +} + +function encodeCTCSS(tone: CTCSSDCS): number { + if (tone.type !== 'CTCSS' || tone.value == null) return 0; + const idx = CTCSS_TONES.findIndex((t) => t != null && Math.abs(t - tone.value!) < 0.05); + return idx > 0 ? idx : 0; +} + +function encodeDCS(tone: CTCSSDCS): number { + if (tone.type !== 'DCS' || tone.value == null) return 0; + const idx = DCS_CODES.findIndex((c) => c === tone.value); + return idx > 0 ? idx : 0; +} + +// --------------------------------------------------------------------------- +// Channel parse / encode +// --------------------------------------------------------------------------- + +interface SlotInfo { + enabled: boolean; + slotBase: number; + name: string; + txFreqBase: number; +} + +function readSlotInfo(image: Uint8Array, idx: number): SlotInfo { + return { + enabled: isChannelEnabled(image, idx), + slotBase: FT65_ADDR_CHANNELS + idx * FT65_CHANNEL_SIZE, + name: decodeName(image, idx), + txFreqBase: FT65_ADDR_TXFREQS + idx * 4, + }; +} + +/** + * Parse one channel from a full memory image. + * Returns null if the channel slot is disabled/empty. + */ +export function parseChannel(image: Uint8Array, idx: number, offsetFactor: number): Channel | null { + const { enabled, slotBase, name } = readSlotInfo(image, idx); + if (!enabled) return null; + + const s = image; + const rxMhz = decodeBCDFreq(s, slotBase + SLOT.FREQ); + + // Offset: little-endian uint16 Γ— offsetFactor (Hz) + const offsetRaw = s[slotBase + SLOT.OFFSET] | (s[slotBase + SLOT.OFFSET + 1] << 8); + const offsetHz = offsetRaw * offsetFactor; + const offsetMhz = offsetHz / 1_000_000; + + const duplexField = s[slotBase + SLOT.DUPLEX] & 0x7; + let txMhz: number; + if (duplexField === DUPLEX.SPLIT) { + txMhz = decodeBCDFreq(s, FT65_ADDR_TXFREQS + idx * 4); + } else if (duplexField === DUPLEX.PLUS || duplexField === DUPLEX.AUTO) { + txMhz = rxMhz + offsetMhz; + } else if (duplexField === DUPLEX.MINUS) { + txMhz = rxMhz - offsetMhz; + } else { + txMhz = rxMhz; // simplex + } + + const sqlType = s[slotBase + SLOT.SQL_TYPE]; + const txCtcssCode = s[slotBase + SLOT.TX_CTCSS]; + const rxCtcssCode = s[slotBase + SLOT.RX_CTCSS]; + const txDcsCode = s[slotBase + SLOT.TX_DCS]; + const rxDcsCode = s[slotBase + SLOT.RX_DCS]; + + let txCtcssDcs: CTCSSDCS = { type: 'None' }; + let rxCtcssDcs: CTCSSDCS = { type: 'None' }; + + switch (sqlType) { + case SQL.T_TONE: + case SQL.TSQL: + txCtcssDcs = decodeCTCSS(txCtcssCode); + rxCtcssDcs = decodeCTCSS(rxCtcssCode || txCtcssCode); + break; + case SQL.R_TONE: + rxCtcssDcs = decodeCTCSS(rxCtcssCode); + break; + case SQL.DCS: + txCtcssDcs = decodeDCS(txDcsCode); + rxCtcssDcs = decodeDCS(rxDcsCode || txDcsCode); + break; + case SQL.REV_TN: + rxCtcssDcs = { type: 'None' }; // reverse tone = squelch opens without tone + break; + } + + const pwrMap: Channel['power'][] = ['Low', 'Medium', 'High']; + const bandwidth: Channel['bandwidth'] = (s[slotBase + SLOT.TX_WIDTH] & 1) ? '12.5kHz' : '25kHz'; + + return createDefaultChannel({ + number: idx + 1, + name, + rxFrequency: rxMhz, + txFrequency: txMhz, + mode: 'Analog', + bandwidth, + power: pwrMap[s[slotBase + SLOT.TX_PWR]] ?? 'High', + rxCtcssDcs, + txCtcssDcs, + }); +} + +/** + * Write one channel back into the memory image. + * Caller must clear the channel regions first (see clearChannelRegions). + * maxNameLen: 8 for FT-65/FT-25, 6 for FT-4. + */ +export function encodeChannel(image: Uint8Array, ch: Channel, offsetFactor: number, maxNameLen = 8): void { + const idx = ch.number - 1; + const slotBase = FT65_ADDR_CHANNELS + idx * FT65_CHANNEL_SIZE; + + // Clear slot (in case caller didn't pre-clear) + image.fill(0x00, slotBase, slotBase + FT65_CHANNEL_SIZE); + + // Frequency (rx) + encodeBCDFreq(ch.rxFrequency, image, slotBase + SLOT.FREQ); + + // Power + const pwrMap: Record = { Low: 0, Medium: 1, High: 2 }; + image[slotBase + SLOT.TX_PWR] = pwrMap[ch.power] ?? 2; + + // Bandwidth + image[slotBase + SLOT.TX_WIDTH] = ch.bandwidth === '12.5kHz' ? 1 : 0; + + // Offset / duplex + const txMhz = ch.txFrequency; + const rxMhz = ch.rxFrequency; + const diffHz = Math.round((txMhz - rxMhz) * 1_000_000); + if (Math.abs(diffHz) < 100) { + image[slotBase + SLOT.DUPLEX] = DUPLEX.OFF; + } else { + const offsetRaw = Math.round(Math.abs(diffHz) / offsetFactor); + image[slotBase + SLOT.OFFSET] = offsetRaw & 0xff; + image[slotBase + SLOT.OFFSET + 1] = (offsetRaw >> 8) & 0xff; + image[slotBase + SLOT.DUPLEX] = diffHz > 0 ? DUPLEX.PLUS : DUPLEX.MINUS; + } + + // CTCSS / DCS + const hasTxTone = ch.txCtcssDcs.type !== 'None'; + const hasRxTone = ch.rxCtcssDcs.type !== 'None'; + + if (hasTxTone && hasRxTone) { + image[slotBase + SLOT.SQL_TYPE] = SQL.TSQL; + } else if (hasTxTone) { + image[slotBase + SLOT.SQL_TYPE] = SQL.T_TONE; + } else if (hasRxTone) { + image[slotBase + SLOT.SQL_TYPE] = SQL.R_TONE; + } else { + image[slotBase + SLOT.SQL_TYPE] = SQL.OFF; + } + + if (ch.txCtcssDcs.type === 'CTCSS') { + image[slotBase + SLOT.TX_CTCSS] = encodeCTCSS(ch.txCtcssDcs); + } else if (ch.txCtcssDcs.type === 'DCS') { + image[slotBase + SLOT.TX_DCS] = encodeDCS(ch.txCtcssDcs); + } + + if (ch.rxCtcssDcs.type === 'CTCSS') { + image[slotBase + SLOT.RX_CTCSS] = encodeCTCSS(ch.rxCtcssDcs); + } else if (ch.rxCtcssDcs.type === 'DCS') { + image[slotBase + SLOT.RX_DCS] = encodeDCS(ch.rxCtcssDcs); + } + + // Name and enable bit + encodeName(image, idx, ch.name, maxNameLen); + setChannelEnabled(image, idx, true); +} + +/** + * Zero out all channel-data regions before re-encoding. + * Must be called before the encodeChannel loop in writeChannels. + */ +export function clearChannelRegions(image: Uint8Array): void { + // Channel slots + image.fill(0x00, FT65_ADDR_CHANNELS, FT65_ADDR_CHANNELS + FT65_MAX_CHANNELS * FT65_CHANNEL_SIZE); + // Enable + scan bitmaps + image.fill(0x00, FT65_ADDR_ENABLE, FT65_ADDR_ENABLE + 64); + // Name slots (8 bytes each Γ— 220 entries) + image.fill(0x00, FT65_ADDR_NAMES, FT65_ADDR_NAMES + 220 * 8); + // TX freq slots (4 bytes each Γ— 220 entries) + image.fill(0x00, FT65_ADDR_TXFREQS, FT65_ADDR_TXFREQS + 220 * 4); +} + +/** Parse all 200 channel slots from a full memory image. */ +export function parseAllChannels(image: Uint8Array, offsetFactor: number): Channel[] { + const channels: Channel[] = []; + for (let i = 0; i < FT65_MAX_CHANNELS; i++) { + const ch = parseChannel(image, i, offsetFactor); + if (ch) channels.push(ch); + } + return channels; +} diff --git a/src/radios/index.ts b/src/radios/index.ts index fc3053e..a9f9ad2 100644 --- a/src/radios/index.ts +++ b/src/radios/index.ts @@ -6,6 +6,7 @@ import type { RadioProtocol } from '../types/radio'; import type { RadioDescriptor } from './types'; import { DM32UV_DESCRIPTOR } from './dm32uv/descriptor'; import { UV5RMINI_DESCRIPTOR } from './uv5rmini/descriptor'; +import { FT65_DESCRIPTOR, FT4_DESCRIPTOR, FT25R_DESCRIPTOR } from './ft65/descriptor'; export type ProtocolFactory = () => RadioProtocol; @@ -13,6 +14,9 @@ export type ProtocolFactory = () => RadioProtocol; export const RADIO_DESCRIPTORS: readonly RadioDescriptor[] = [ DM32UV_DESCRIPTOR, UV5RMINI_DESCRIPTOR, + FT65_DESCRIPTOR, + FT4_DESCRIPTOR, + FT25R_DESCRIPTOR, ]; /** Backward compatibility: same radio, multiple model IDs. */ @@ -33,6 +37,7 @@ export interface RadioPickerOption { modelId: string; label: string; icon: string; + group?: string; supportsBle: boolean; } @@ -40,6 +45,7 @@ const RADIO_PICKER_OPTIONS: RadioPickerOption[] = RADIO_DESCRIPTORS.map((d) => ( modelId: d.modelIds[0], label: d.label, icon: d.icon, + group: d.group, supportsBle: d.supportsBle, })); diff --git a/src/radios/types.ts b/src/radios/types.ts index 4e17091..52b09df 100644 --- a/src/radios/types.ts +++ b/src/radios/types.ts @@ -14,6 +14,8 @@ export interface RadioDescriptor { label: string; /** Icon (emoji or character) for picker. */ icon: string; + /** Manufacturer/family group for the picker UI (e.g. "Yaesu", "Baofeng"). */ + group?: string; /** Whether the radio supports BLE in addition to serial. */ supportsBle: boolean; /** Factory that returns a new protocol instance. */ diff --git a/src/radios/uv5rmini/descriptor.ts b/src/radios/uv5rmini/descriptor.ts index 556e3b4..e350cef 100644 --- a/src/radios/uv5rmini/descriptor.ts +++ b/src/radios/uv5rmini/descriptor.ts @@ -12,6 +12,7 @@ export const UV5RMINI_DESCRIPTOR: RadioDescriptor = { modelIds: [UV5RMINI_MODEL_ID], label: 'UV5R-Mini', icon: 'πŸ“»', + group: 'Baofeng', supportsBle: true, protocolFactory: () => new UV5RMiniProtocol(), capabilities: UV5RMINI_CAPABILITIES, diff --git a/src/types/ft65Settings.ts b/src/types/ft65Settings.ts new file mode 100644 index 0000000..9f05c08 --- /dev/null +++ b/src/types/ft65Settings.ts @@ -0,0 +1,34 @@ +/** FT-65 / FT-4 / FT-25R settings (stored in RadioSettings.ft65Settings). Select fields use 0-based index. */ +export interface Ft65Settings { + apo: number; // 0=off, 1-24 = 0.5h to 12h + artsBeep: number; // 0=off, 1=inrange, 2=always + artsIntv: number; // 0=25sec, 1=15sec + battSave: number; // 0=off, 1-5 = 200/300/500/1s/2s + bclo: boolean; + beep: number; // 0=key+scan, 1=key, 2=off + bell: number; // 0=off, 1=1T, 2=3T, 3=5T, 4=8T, 5=continuous + cwId: string; // up to 6 chars A-Z 0-9 space + useCwid: boolean; + compander: boolean; // FT-65 / FT-25R only; byte present on FT-4 but no hardware effect + dtmfMode: number; // 0=manual, 1=auto + dtmfDelay: number; // 0-4 = 50/250/450/750/1000ms + dtmfSpeed: number; // 0=50ms, 1=100ms + edgBeep: boolean; + keyLock: number; // 0=key, 1=ptt, 2=key+ptt + lamp: number; // 0=5sec, 1=10sec, 2=30sec, 3=key, 4=off + txLed: boolean; + bsyLed: boolean; + moniTcall: number; // 0=mon, 1=1750Hz, 2=2100Hz, 3=1000Hz, 4=1450Hz + priRvt: boolean; + scanResume: number; // 0=busy, 1=hold, 2=time + rfSquelch: number; // 0=off, 1-7=S1-S7, 8=S-full + scanLamp: boolean; + txSave: boolean; + vfoSpl: boolean; + vox: boolean; + wfmRcv: boolean; + wxAlert: boolean; + tot: number; // 0=off, 1-30 = 1min to 30min + usePasswd: boolean; + passwd: string; // 4 ASCII digit string +} diff --git a/src/types/radioCapabilities.ts b/src/types/radioCapabilities.ts index 640f1c9..9f6412c 100644 --- a/src/types/radioCapabilities.ts +++ b/src/types/radioCapabilities.ts @@ -89,4 +89,6 @@ export interface RadioCapabilities { supportsBootImage?: boolean; /** If true, protocol supports readQuickMessages. */ supportsQuickMessages?: boolean; + /** If true, radio has Analog Emergency Systems (DM-32UV only). */ + supportsAnalogEmergency?: boolean; } From 65ade708f43cb24b5155597735ef070c00b479a8 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Sun, 14 Jun 2026 23:10:44 -0700 Subject: [PATCH 02/10] Clean up around settings for the new radios --- src/components/settings/SettingsTab.tsx | 15 +++++++------- src/radios/dm32uv/settingsProfile.ts | 2 +- src/radios/ft65/protocol.ts | 26 +++++++++++-------------- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/components/settings/SettingsTab.tsx b/src/components/settings/SettingsTab.tsx index cc814a1..a2a27af 100644 --- a/src/components/settings/SettingsTab.tsx +++ b/src/components/settings/SettingsTab.tsx @@ -90,6 +90,8 @@ export const SettingsTab: React.FC = () => { const [showFirmwareWarning, setShowFirmwareWarning] = useState(false); const { caps, model: effectiveModel } = useRadioCapabilities(); + const settingsProfile = getSettingsProfileForModel(effectiveModel); + const EXPECTED_FIRMWARE = 'DM32.01.L01.048'; const hasRealFirmware = !!(radioInfo?.firmware && radioInfo.firmware !== '-' && radioInfo.firmware.trim() !== ''); const isNewerFirmware = !!(hasRealFirmware && caps?.isFirmware049OrNewer?.(radioInfo!.firmware)); @@ -504,10 +506,7 @@ export const SettingsTab: React.FC = () => { {/* Boot / Startup Image Section - only when profile declares bootImage feature */} - {(() => { - const profile = getSettingsProfileForModel(effectiveModel); - return profile?.features?.includes('bootImage'); - })() && ( + {settingsProfile?.features?.includes('bootImage') && ( Boot / Startup Image

@@ -632,7 +631,7 @@ export const SettingsTab: React.FC = () => { {/* Radio Configuration - profile-driven */} {(() => { - const profile = getSettingsProfileForModel(effectiveModel); + const profile = settingsProfile; if (!profile) { return radioSettings ? ( @@ -665,8 +664,8 @@ export const SettingsTab: React.FC = () => { ); })()} - {/* One Key Operation (DM-32 only; UV5R-Mini uses uv5rMiniSettings, FT-65 uses ft65Settings) */} - {radioSettings && !radioSettings.uv5rMiniSettings && !radioSettings.ft65Settings && ( + {/* One Key Operation - only when profile declares the feature */} + {radioSettings && settingsProfile?.features?.includes('oneKeyOperation') && ( One Key Operation @@ -939,7 +938,7 @@ export const SettingsTab: React.FC = () => { )} {/* GPS & APRS Settings */} - {radioSettings && !radioSettings.uv5rMiniSettings && !radioSettings.ft65Settings && ( + {radioSettings && settingsProfile?.features?.includes('gpsAprs') && ( GPS & APRS diff --git a/src/radios/dm32uv/settingsProfile.ts b/src/radios/dm32uv/settingsProfile.ts index 3aaf286..eb3d55b 100644 --- a/src/radios/dm32uv/settingsProfile.ts +++ b/src/radios/dm32uv/settingsProfile.ts @@ -6,7 +6,7 @@ import type { SettingsProfile } from '../../types/settingsProfile'; export const DM32UV_SETTINGS_PROFILE: SettingsProfile = { radioType: 'DM-32UV', - features: ['bootImage'], + features: ['bootImage', 'oneKeyOperation', 'gpsAprs'], sections: [ { id: 'powerOnDisplay', diff --git a/src/radios/ft65/protocol.ts b/src/radios/ft65/protocol.ts index 135a2cd..7568889 100644 --- a/src/radios/ft65/protocol.ts +++ b/src/radios/ft65/protocol.ts @@ -10,7 +10,7 @@ import type { RadioProtocol, RadioInfo } from '../../types/radio'; import type { Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID } from '../../models'; import { FT65Connection, openFT65Port, type FT65SerialPort } from './connection'; -import { FT65_NUM_BLOCKS, FT65_BLOCK_SIZE, FT65_MEM_SIZE, FT65_ADDR_SETTINGS } from './constants'; +import { FT65_NUM_BLOCKS, FT65_BLOCK_SIZE, FT65_MEM_SIZE } from './constants'; import { parseAllChannels, encodeChannel, clearChannelRegions } from './structures'; import { parseFt65Settings, writeFt65Settings } from './settingsFormat'; @@ -20,6 +20,7 @@ export class FT65Protocol implements RadioProtocol { private conn: FT65Connection | null = null; private port: FT65SerialPort | null = null; private cachedImage: Uint8Array | null = null; + private pendingSettings: import('../../types/ft65Settings').Ft65Settings | null = null; constructor( private readonly modelId: string, @@ -43,6 +44,7 @@ export class FT65Protocol implements RadioProtocol { async disconnect(): Promise { this.cachedImage = null; + this.pendingSettings = null; if (this.conn) { await this.conn.close(); this.conn = null; @@ -97,6 +99,12 @@ export class FT65Protocol implements RadioProtocol { image.set(this.cachedImage); } + // Flush any pending settings changes into the image before writing + if (this.pendingSettings) { + writeFt65Settings(image, this.pendingSettings); + this.pendingSettings = null; + } + // Clear channel data regions so deleted channels don't leave ghost entries clearChannelRegions(image); @@ -140,21 +148,9 @@ export class FT65Protocol implements RadioProtocol { } async writeRadioSettings(settings: RadioSettings): Promise { - if (!this.conn) throw new Error('Not connected'); - if (!this.cachedImage) throw new Error('Read from radio before writing settings'); - const ft65Settings = settings.ft65Settings; if (!ft65Settings) return; - - // Apply changes to cached image so it stays consistent with what's on the radio - writeFt65Settings(this.cachedImage, ft65Settings); - - // Write only the 4 blocks covering the 64-byte settings region (0x2000–0x203F) - await this.conn.enterCloneMode(); - for (let i = 0; i < 4; i++) { - const addr = FT65_ADDR_SETTINGS + i * FT65_BLOCK_SIZE; - await this.conn.writeBlock(addr, this.cachedImage.subarray(addr, addr + FT65_BLOCK_SIZE)); - } - await this.conn.sendEnd(); + // Buffer settings; writeChannels picks them up and writes everything in one clone session. + this.pendingSettings = ft65Settings; } } From 3dfa85a2f2c0e582fc3aa1f844849e739f1e3a34 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Mon, 15 Jun 2026 00:52:14 -0700 Subject: [PATCH 03/10] Update readme and banner --- README.md | 19 ++++++++++++++----- neonplug_banner.jpg | Bin 198422 -> 205431 bytes 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4ace8d0..fe56657 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,16 @@ **A next-generation, web-based Channel Programming Software (CPS) for supported radios.** -NeonPlug supports the Baofeng DM-32UV / DP570UV and UV5R-Mini, with more radios on the way. Program your radio directly from your browserβ€”no software installation required. Connect via Web Serial (USB) or, where supported, Bluetooth Low Energy (BLE). A sleek, cyberpunk neon-themed UI puts channels, zones, scan lists, contacts, and settings at your fingertips. +NeonPlug lets you program your radio directly from your browserβ€”no software installation required. Connect via Web Serial (USB) or, where supported, Bluetooth Low Energy (BLE). A sleek, cyberpunk neon-themed UI puts channels, zones, scan lists, contacts, and settings at your fingertips. + +**Supported radios:** +| Radio | Manufacturer | Bands | Connection | +|---|---|---|---| +| DM-32UV / DP570UV | Baofeng | VHF + UHF (DMR/Analog) | USB | +| UV5R-Mini | Baofeng | VHF + UHF (Analog) | USB or BLE | +| FT-65 / FT-65R / FT-65E | Yaesu | VHF + UHF (Analog) | USB (SCU-35) | +| FT-4 / FT-4XR / FT-4XE / FT-4VR | Yaesu | VHF + UHF (Analog) | USB (SCU-35) | +| FT-25R | Yaesu | VHF (Analog) | USB (SCU-35) | **πŸš€ Try it live:** [https://neonplug.app](https://neonplug.app) Β· **πŸ“₯ [Download offline version](https://neonplug.app)** (single-file, no install) @@ -41,9 +50,9 @@ NeonPlug supports the Baofeng DM-32UV / DP570UV and UV5R-Mini, with more radios The `.neonplug` file is a zipped JSON archive. You can unzip it to inspect the contents in a semi-human-readable way (e.g. `codeplug.json` inside the zip). Editing the JSON directly is not recommendedβ€”use NeonPlug’s import/export and in-app editing instead to avoid invalid data or corruption. ### πŸ‘₯ Contact & Group Management -- **Digital Contacts** - Manage DMR contacts with full talk group support -- **RX Groups** - Create and organize receive groups -- **Scan Lists** - Configure scan lists across zones +- **Digital Contacts** - Manage DMR contacts with full talk group support (DM-32UV) +- **RX Groups** - Create and organize receive groups (DM-32UV) +- **Scan Lists** - Configure scan lists across zones (DM-32UV) ### 🎨 Modern Interface - **Cyberpunk Theme** - Eye-catching neon UI that's both beautiful and functional @@ -58,7 +67,7 @@ Just visit **[neonplug.app](https://neonplug.app)** in a Chrome-based browser (C **Requirements:** - Chrome, Edge, Opera, or Brave browser (for Web Serial API support) -- A supported radio (e.g. DM-32UV / DP570UV or UV5R-Mini) with USB cableβ€”or BLE for radios that support it +- A supported radio (see table above) with the appropriate USB cableβ€”or BLE for the UV5R-Mini ### πŸ“₯ Offline mode diff --git a/neonplug_banner.jpg b/neonplug_banner.jpg index 4ec584efac7ab7e39f3f557e063f3fc3dffdd877..24ec9660aca164cc344936817cb14a836d665a30 100644 GIT binary patch literal 205431 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 H|Gx8Ts=QICbx?!Ciof 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

5|C1eGj2fzI3$^juZFC2Lc4`Q^N;V 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

Qdm&TKT4K?ymR(Uy%ki&epzE3^Z0RfaXr9)d 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

sQ4S_}m%3tCm2>LPCoCo_5GF2S)AJp> zY+s^a1Mew;dbkudN0u)z&{eD-?=wIeh$R`)P-f-%M9?gbu^lFE!|Q;#)NdYtXf4Hp z*B(F)W(N&!i|d4?-T3UKZQI}l3W z%;fZyD~%%V1S8Er<%mZ`VyuZ7)B!}%8K0RB^Drc#I=wk`i%ww{@Ppzn3Ur@ z%n(kr_d%$Vw*EO#4AtD6x!(d@ZYw9Nee#%}*AZ)(p3RC#AwEXFXBx|yh} zpJ@Am42>BDJ6u@Rd!vI6L&`VZshFMX0`z`RIII*0+;fZC+lzA;N(5BlyYU07p-3?* z{{W+y6_IO4`r%ZD!3I@7h|Ne)!sW#|g{vX8pcG4z9E34+8M z(;Mi3h^_QXRaCr7-nTJ~Vy?J!nTLe?2GsMHNY30y{$ zH3ko;piyC$HK@|diuipTdW+qKT>Z7?f2@2q;1M0R zF251YzBz|7{S(KdmSBTJ0^GsiEWVbq{iYHM&ndC}a~{G4B@k9BQVm-vIF;#|F5ack zftA`JVVVn)+JvB&i*Fg!6z4-@>MNR}0{uW1eT}}ZS8NA>jyR20YAg!kEnW7Sxvky6 z0V*XzdTFUf4TKJoqAThZ!i&{>z&qPcr8#xo?}>aMic#hXV#}$ zhrI7oy=ogUK?Mxq@?o6PVKm*w)%o(xy(06QuXu5(!>P5r#Y>kL94+diz3MuH`N?Ot zJWF4|MCVrU?=fp+{U>L(i^61)bCq=Dyb8a}Sejv7l^!D1hP^8r;8IilVcO{La8x0E zErV}sDkFqYvqssixPSs-#<%Hpf*GMVRYkl@tt+bI2Elb>_xFSaTwD$5`|8PJ(#iC4i}jgr3+jbmw& zliF{@;uGb#EN6%cx>s`83f5A&&$ZP!qO zh;7iD-pSk>7UA$oU|ZDB1v7De<0V7Sk)L=Cu?N}96=_`Bys;I)FKN`&IA#a;MqAbZ z($o&p@+sm4GQ%?nGF{JUL}EWKmig_q0cz?N{8-To>s}deZWdcNsIVyA;}HZ241A2L zF|)uIT?25k6qkuch?G_QE8ac3qaN{aYF-?B^#VIp;lJa|X$KCr`0iZVaZMZ?T(6ZJ zW82a%9RQ$}Ropv)wHfGYYQ?~!h)$+B&EFGtuC6OsCsWnq`b1O$Dh7pOJ9R{O)}zEe zA-w7oS}@!IDSj4rqBpWr&D8pxYx}2!ae&pg>3$+~Sd4GxUtVfn?A*T);}HaNCibSB z0HG(x6Rb?uKz1pXXFeDKg%FnAbudP&;&q9BB9_qA;v9AjO*mn~FHnLblc_0DHZs&9`$cz`zoAJ=gy zTbqEh&sQ*~Baz=al>8^Arn>z_ndU~(evVj8w9ya>Y#8TSmc_PRw@*XON6fi@?ndGp zXf;s9NK)VCVUl3hB(H=lb3CZUrng(l-uMcQ1heC0cYY&+0!X5;rw8UE{cUS5vTy2X zn=l-i-s09F2FiBxwjd23b@QH|6C{ON1y|eVo%bJdyRK~W5w#W8CbOu_64k`NexsA0w%|(U zN>|C$t=t^juTgPEHXRwC`oV5}lII7acR<3ltcEz-sMdjF7-OFm`pa|AgU0jkJSJsf z9h@2y>04B*tqEp1^F-c6cdOp_A1$SnlO5(L3yRmQHf@szZes^&*5@ObY3d0jP<~!wlr?Hu- zBwwA>$Q6yz-?ZlfOCx^Y5{_PKM?Gp%U?iaa^f53_Nb~22QmP-wdhsiyQdM*-iidz# zCboiSi$E{!9TcWwzq6)q~hA0Dd9iB)%3NmH13hdW1Ylj3!W z#<`v1Wuv)}#8+J0d!CHZ{qP(?j+y{utabe%&!fbxA_3i~`7WlKjdtoDxX+^CwOmcz zEAahu43ZYi)V{=1@HJD+P8>fW^kW{IS@31E4i$U|u0>XubRi&@Q!6(6Wzki4+7 z{{UIq0yn>zdB%}Vz?<7<=`5=p z2>e7={=nMeo+X=gpdOY*neJcZ=Q%QAGhf0HP`tI}(3mG}V{XpVMO-TuVv<(UIr$R$ zM>}b)7?jV`%NgfgrtyJWE5cl}HWx0$U@gVt!8X8iyKqD$UD6lBE*83fGOPmJ6~cNF zFQ<-?n!5Ozb**fDql*;c34vYsc#3Zzz2seYDK|zgRO1amFcexZ7}=~#I%z{Eq0jFE z^eFGnEjzl5Hf4yuSzs}+#K1emGsUV>pddSq#D^||Xnx6$t?>xK44iq`+^Et>Qq$a^(i@7EEG27^@rb)MRIy46{KL+A zBcq5MJz);$S8>4Utwr=#h%%W>nuS{;ovPEv3pZb4eb@!coW`mEZ){t4{RP+1qz7>^ zC@jI>gsTm6{{SjDkGa}X;>eYn>L5eyU91kRXeHq6YNoSub(zND9WJb99|#P$$G?*d zkLc@i)pXQ2H|Y-v(F!T1A7h!%q0D)Y%y{%U{{Vm=&{NaA!+VHUp7V*`N%BLCkaxo6 zD-6zZY7R`3gCtx!+OV|M(Hb72A`R-x2LYaiUHb3TL!9lncf_LgJy_YBc9{^PR*008mg@r{saO zEZ(m^?}7(JBJrPL5>JMA6ey~Ofvm!d4FyF+jw9zXIfXq{t-*~YY7gKLRo2A1({C}w$l3<{PpJ2Jvqauzg2D2(bO21*OS~`5uIt#jxR9QZw$8fZg;2|*&0n=rTcxs)S_vl^B$(P z8P7ukoiN1!r#%RE#}$@t$&=9Oo#d7+7Y`<(#$)LDhZ&r19Ln?kqKsgXdIn*@w($=`k3*ShmIGbp zT>jHafINxtk29VpCZTj{JJhY<)CSBE$X!5fiiH#&8Quu*h+>*IFAR3re0nb_4Xp^J zs>c;YeIl66YGz(4xT0UBcQnAe7mV&&qL5MnkGX!x*>T?~0-omXKO{&J;B78QpuAKu z*X=VYZt)1Z2O2csMNle-Qjcjs6rcf2n1Yog@?Ih3q4ICU+&tB;S^@EiVlHF@lh2Y| zTO{Gxl-)CU>vgGrPp9e0ZIf#;FC?tJ=pA5PH$ zHJ!cd&Lc2tlpg;8DBxIMY=~BtKsKVjvVaN1Lf_R6m2;N+nNjV=RsH7qmPA*}9{&I{ zYqsEK#Yvo2!ZNC0*O=Yhsmx;MsR7*V8;gO7HmCL_An%rAv~p{TA+Yb_khRR(Dl_C=$T zH+tI_y$xl$CAP(FnDAsxn;v0xfwnJ*4X6mWZA&WIZ)CdoW)|G6@eKP#N4#lF5PK_d z6JdbIdu+Gm8@8#5Ox5~+YC|I(*Q?})w&?WevF-!@n725owZEF`BiUj-k`btG~B$p2;`Y(cd6f)(8XbHzT21~MknlxYj~UR;=?Bi z*)OUIaHf(*6#oDSpykx@b22Ee6lNWa?Tqq%ZV6h0256Tux&mJRSM6ynAWs?E+Jd^MO3)8zis9=xesO`(zRyhTBsq| z8K;Ps5>yqfuW`2B{W^+@3CX6q8$c^+-WkGr{{Y#5^k_j*WhH)~3$74R1qC65vY5bB za~Z8@TdQTL6oW}yfig9`hm3fXQ44kN*x{RNuyI`6BFa@;y-H<{0jR}P0rQHFf>hb2 zeW0Q%SZ&91+?doZgcVrFPNf(p2~v_jAUG*bF@d*3#^JWmQ`P&<0$O3n0u6&Tuik&B za;(%SCq*HAF{Ful+-+pt#a!q4U&2{IWj3O36XS@t*cDt_tak!};P!R9_ko>2)*`9~ zVo0Yk8uqX?mPX#o{{U(%>RJfFT*^tG*16e2=z%3u`{?6w5OFT3xNav-d(^GsI>g;I zgfE%iA-zM4P9f(KpgHbUb_aoO*RMA?oAz~k{{U`xiCV|>FT}qR{7xnK{_wqD%rV_I zuaW+bxCLXtN{b3G@Y@?rOatvY+&*_Z-0yI!HxkKwKQU!e!PJkg)oCGpFao;vDfMf0I<1HUk!v2kE+&G8uk6$D_~%-0LjPP1mK%I5|#;(Px9UZZJQ zS2s23NenD61X5L7+_!AJKqxCxt`*J4b8emp!kX$O8ib<8{{WQ1*%kG@qILafa`%dc z8{wk+Ov5;RpJnc17Q)OPQjb23)Rqnwa|y6p{fD3vqB2tZN;6|>(>i5fj{^dzALam- zI~MP>y?p}W0>&)bw=5SJdN!UT$2?0e0hNuIL(sR^bY4=TvI_VB#^6(n-Cf5w z)VBN!{oxHtvRJ7#M#fe-+-tN=@phN`B3!DruQK^NxYl<*QHoP2h3Q@^h{ds`P^se& zsMVNZUSnvKq;3HDEb`gWGV`g;(7mJlCbL8{<>GfqAX)Z7?(Qeg8mEZ(!mv&<>N^(7 z-6}eF=*tMuTQkZ-&u%hVYoe&*N8}?fCXJ|UQxom zr%ir@Yybyd@YH}YPk4=%J(w6;(G*l$+Bw788nhLB0=IjMC9BD}iEEAJj2Op*cZG}*O5!Cd>KnV6D`u^sD6=i z8v3d=?QlU3iW1Sr;OtX?sxyaVw&Ne8`pV^8yb&{;_2w39PW(e0M+We-_Ch6H$iIxD zDwNl%YE!d)$-d&?PZi_)z$lg;Q@ci|6uP)`1UiE(v&`h-Tpo#%T{w*;61LSa>TUEA z#jfyr=u7hr%It94K0gpUvK#=a@tn>62T65IiOIQZR&6Y9^8)ymq8F)l^ut;qH@O&j z;set(Qw)n9(9zniD1t54k#yC}h!+?Zbq6xgD(uOe*hF|PQyS#v`%j!1Ht;mB3@vN9GC|$&>EBnXrO2a(ID@$8> zw(%~PO;46735tJtk)QVE=YKHcGR?P$#=EEZmd)2I?&0qf)2e;aqAG)sxARMehg>$v zt8+Qq;%&Kja?f%N=|@Ul)4a>`4l_Hv)lON1oz5h->hU*Mi06o|a}R$)Q{q;HuQRO5 z%qIdiHXOyYQx`n(Gezr$zu_Eeam2dQ=<6_NaW|41GENMU=6A0^>GKEEE1l$=@vlb_ zHv>8K!1CS9eq%4FrK;);>CQ%}>jl9g(2%kG!KqU78|`9)x2kh`@iCllS{24mXc@ExAt8s@T2T38RZT)*=$w6Lnx` z8jeC_Af-d>Ze1(@(c5uzrl>(MXK!K{uqNyl?NIJ= z;Pid57-9(Ov;4+tfzlky>?XACJ8hI!GcgopW6YpFTSR3pRoKg8CP`^<6`vAsvsVB` z=G5~V-NSLEB};iA3$ z;Err53vG7BaDO=PG&RC(Q4KlQ!0|Cph!D|ia}7kGWF^J;j$7LZ8I=80H2_Nr%pR;ls{J^&Tb4$!R!UN1Z_n zlT{MK4#{3trH}zj7d#4GgY|l z#Z2^SaU7y^!tJp5f)PsvZ{Mh5A;Rd?OUcwF8grq3)WVRwV5hPyM#@!l5f}N8R#!fA z2!f+kVw;2UmmcSSCEom7UvM(ec&pENi;5=!ON^%i=>a-Jg0>-`{m>Y~om?bf#IE@b z5CSwuMn2{#f~d@!E@hOQOY~I&LV~}xl((%PE!j7286k z%ZX+WX>c-7$ix+Ga>1J04EL3r>{Z5P-sSj;C}W~EcvL{auHtOG^)CJ*7J%K{*5&vx zYS`4(SarU1=(Xg?vjo6OK16x`*)=bZS>Zajs)PSwvmj zcwyTSD+Cg?Gn`ILPNi7{YbJ?6U-V5QIQl^a_3C@Ud zf_!s3!3$b|DtkOmuzDQJ@f^4%^-<>&nCl0r5CT{cSAJgd$0w=J{A=+q$ESFQ9nDAy znqcD`%fqyrfJRH) zRw7u|&$tsS7A1Y!s6H~U9 z^E|)iajswioF!qhW%X;b$psZx63t>%-PdFi!F?C0t--svOnnJ$nXie3$*|XVk0`k( zw%fiARbLSkf0#h_IGy5irZZ)i4VaHOn>c4!m*Q~Zd`-hHBv7=|4X$T+pAq{>gcvsF z3q?eDXLz3ztWSxXp6(D9hGe?MYl(}Bs|~(ox-zGs&-}3i4H_)zme0RWxL6d&gHAzh z>0a`^46ypdA!Lf%8puu^%PLmErSxSt5NOn8?{zJ^Z2bG? zZ4->JAL$LtseJ{;_NhdWB!^;y+S-=#b50H*W7UbIZqLkhY4O*}F2l1w=AB;zboQ4b z90ow?D;q&Z&;mEI8TW4liqi7=nHgRn4Yp={lO-hN6>ELKJug#xjTpxd{&2O+va44C~TvN?ugtwsXW6Oog3SG!HSFwK5+?%%Zi6^OhVndm&e3> z5Pnkg1wh*1K)=xiQEXZJB0ercuZ`VqRG_SUx;~;k1c5t-AQoGb22g@kp>sVvEkQqY zvw+XM55nDL-BT+{QbVk03Ft#q7adA!e_U9s`}dS0_D%LyN0jEdbn0lAai_y zsbc4trH>ea)S1E33}uP}#{6L|o)h+FB_!Is`d-D8-ekmX{{YhsZyZILb03dCDYC_Z z0C_(VrwP*jxH*Q z*IeHtgc8EhgJurfZyH7_Zdh^t`XIl3pAfz|Dr-I=eHe~b7Oo^JDnc3j!!QKFu{efn zs+!sr9aHLEKI1hMv#4x#M~D==Fw|}UJ@1D#7J}qBIKsWy3B3Hu3Im+ty)jG;Q55-r|)O4zvgcj}7&aIF-uR0;7a|R(AmGt4O; zbHp6`N>ekm_amV0Waz-3SS%DNc_n5ZF5<6Gm~jGtY?mp-=eu%;F6ej=luO!pp?YQ; zl`35aO$F}pxTdvOyIqpw{RyZo-S1E(#wsg;BTz5^qyGS5?1HrydmuRsj|>`vDCcJs z*UXF!C1aGb;Du}k3-X*|(3OFRQumV#6!KYeK8{B)sw4 zQGh(^E02wt=8)p zi?NL<{{VCEpE4HuFK8PZ?$wesjWx*24W>xaA}uKaG9SO z`{TD$;WI~x#BFze(_Nm2GjNeBhUa?pa%v3)`U~w|r#^%>Mzr{{q0gblr8OJRsPuV< z{Jyd1bLjEtb2FSwMC1gzb%>=vfOWXtyhQPt-X-{l7@Rnc+)ME;FCRr07V%S4x+ERq za$+1~(-xvMokE>vISq54#xeH9%gDVM=(`Lv=;TQ;SM@V z>$l8kt^$hR191l#CiwI?ftL|sK$umT_b*@)B;7>ATH2awx-J*S1LyeAgxglQ#CgQO z5JD6#%G^LQ_2*ulX%OS-(w z(;1iJ(c{y+O7P19W#S>3c~?FsG1fg3;AyH!RYA&cVzHtGFP!wmDBc_$k8o03n1}>c z{D2JOWF%||9LmlhEGps=0G)b6kC|qT1p_JpaHRE*4>51woyu8X3Y;5{Fc$8n4u)E@ z#B(init!X4N0~;9p`%CzDEY*)wB5vnS~#Qij@7nhUel5Uju7&GrZ?V1!N0j$HG<{- zFr!yW)9s1Kq!{!{yb+xV9>|~sWu;SXaTnPJpb<@#F?csK)YWW`^uF@mN<2(B1Ta10 z*ohD#g+cq6Em;7Hatt2uZT=$D{LHnFf;htcnM&hC(UsInh&GrOtbN|NqOUAi>mb<^ zx2o|)%Bm7)g-$-DvJ+Tl^KrH=BS^sR3$9$UnJNK%>UFusxrWqkSoEs^F=PDBIh_NK z#Hli_XOaBQA=`$0Fkf8E)}6>|)Wp-psPVzQ_jj1P4e+>wQi{NV zqCO?c@O1=HqZTHj0fAjQ>QKt5vW>xLVp)NMmmmx>@eg3k4_SLZlW|>+*d}s|t{g*< zSVM%rz_#@R46?j9f@XnFkccSZ?gIrz9{6ftTF^97sD&jt**YJDaM7SJuTqyn3<}gx? zB=kUJ-22?Cz0Kfiz=qAvIi2of%x}`yon8rE8Q$mIINaiW&%aJNhcjt)rKw%x{-CnP zQwA#0YIUFJ9Ajk*x>0mLa%?)EMGp znRRK1{{X<6Ptam!+RUqx2+z-=*6nM82AWx<3+GvfQE~t*X?`V>^SkX!RiEAp4eOKWoXg@2f~+J0b!r~FIv6)8n^ ze+*PL!_!R4CX+LW?=$8B%4g0T=2`}80`lSPfM;IL{nEECG}VT&i>l&dM$t@4^B!|6 z%y^aNSD9X6YfTXABC)b8KK;X)USr3ndG)V8kNpwM`G*-N9*6obro#{|WpH?TQpoW* zoH-_A7^?6~2o7Ra&$d{ptAC$nBlo>M0$B12gha1Amsuz&1 zDj=vt?GOwg!V-uW+ULfQF)IFi$Drv zW?D@FmEF9ba?Y!j44hn8vJb^;&Z_=mtzfRA*|T#XM7x66fJbte%R@fsA_mZHYNCd6 z4hhu$W6e|*+I_%v8|xgs;|SIP!(B?du`+CGdx^&zl&44uXVeQp7KQLbjLs){C)T|T zM;$v%asL3Z(8QwQHh^0Yd@xSbW@nQF4!{S&9z7AxrI5R;9`S4xTjwno+Bv-6d8D433V}*>En7=%++@+gd+Jag_fojv=EmL3X3Oiu zsIoEQ_3tYm;%5H<#9@k|RI*GrAThk$%gP))b}LDX0^I5zBB#$;8f=FEA&RSQuP|E+ zC9RcRMYEm+4z(z+SgsCLiCFBEev;w-Qmd6(%!7-niw!idY4 zmSanPbRzPhZ(xor^0c@r=f;=Togt zIGyTq#Oq#RbR5N&|yVIEQIFB>xJbHJpM~Uvq#eUPhdJZ+Y!>Qg0 z$*I<(Dk|1vX?1vEc)>WREt;mhAW?u~vhNTm3V0*LIi2cqV3~Zvk*g`(RaZ9Qd`|TZ z=+rpD=n9|D%73qUw-NHn?4)ga+*Q62-$t)daY}0gTkba)ZQYAdZWire*1c0P=Kla` z8P^D>e@JDvBJDfJQOO{^iY(*aR?OLdTv|csFL`iq8e^BVDZ! zkt2Dj_cI?*HLD2Ar=K{gUy0r)c=Xys zmSVSwUO1g&(dQ5|t|KrOU%5=5XH%VVFmb=URzX`+&xj4>t7i*CaI8VD>K$t|>RzKn zx;rgHId`g+sB{LZ$GCOoE^&y{7UZp)%&@Ah>z<&{W)GE~8@klB(V=q;w@|W!6hy7Q zW?QD0iF7brL5Iwz7p7T2E#~-@O3#UE9qDC&ASJ}IxZCPFF0-XEEbmtHhfEbNr4m4Y zoUCAQ)Xs4fwv()SBH1hsjK)F( z47_|wTzG0NZ&AF_J~*9Y)4WfPA+iTl(i8#GRIxVU7rdQ%oZ{WK{{SWE0(;hqtG>42(04dOVyFj6ArHbr(AjoH%377;M8T zUx>)9oCk0)weG<6?+o~LD1d?Wx*9QvZtm@fBPW7Wj1soK=v@XbsqMoa!>(bY3^ZEu zmF}K2fWmaw&gYfKD0^Y8cr^=Gi`j#h0%8!O|~c*#`okag86bDk0Xwhg?Msx^e9(o%D{okIbxT+!+jRhP~sF zM^mgz@i%*cb$6-O8OEK?@Xv+|)JbPTwPPcUxV)15O{WpQNSn*}mEoOXoN9bRLph%Y zB3poIik<0OP6b0?qcLFP8^qG6fuAE|^XPLh)OCs8Bklb){{VDz{R9wP3aebtzfSi) z=iE7+?i_ABZZqZiO5;ea1E#zo0m-mfyx$kzeI9o?=5@Km?{U(ZJ)mz+dxsnJ?{n@Q z=hY%+`uU`8%H|*zzYn=kt6a3V!H7pl(ui=z!cnTSlQ>rc@O}xI3|oio3?+=eEzVhl zG};oC@|hgKiyVczw09PrJ-9HaITD`g)k{rTsoGOeeoNZjvN7^&G&!%9m>eJ zQ?1XG?{nn?Ta;pbg8I4TU!#d37cfoO&i6UzQ?1S;YQ$7ZDTV>hH5g)Ep!WEkWqi6h zt&w5^-ot3|>GwJ25axaV08O)S+a@3Tlb=idH!L~D<|K4fnhWa(C(o(xI?F4}Igh+J z%P$*-*^MOX?evTCz7yvy>=7R%icV%xjJ zh~VY?&9}r2;H9MMb1?q^F7FxoC(jV$FcibRAlZpof>r?n%gHYK&U2_B=~|qM=A!Gm zqR?Ts8rBBgdN64tZ`eM_Sa8th`?`k;(55cVW($?R;)#?F{#T0q<7SkVpm8>pDm*xs zgNG^mN(mO)1G|(a>s#t5(<69nSInwS(l04XEDQI*&{Nl zt+Twd<&LvB-0w4(tq3}6a;C+*xX2MgggW4ReLKwOezoQtXZiz5O;t^Nu+7I(_O|ct zU(wiq-CHZ(WhwynPU-`i>RT3Z{T1idyu*paIgf3)`I!K0-@M{H<~!Ut$pdSJT+fg@ zC3&ADILR5_WqBoQC!%j8tnAe5B&%GLHspsHf;8#5Pj>>0W8ATCUDuu5I5={M0BpRk4!g}%ZTp^)Rt%mV^q9dCkDtgyOq)T<%6h7S?i z#+yrQN0`7FZa6LR2xCrd)Rkt$irxzvtC9`egZ{AQIDUuk_FED#j zQ;~lLZVJO$xYya#wM?3qgHhBS+_zYnYWZSj!l$e29Y>tbW{cwZVMj9M^Vfv$Gv;-f z$D`(THy(2jdDdqWyv?^VS|h9O1-OFRQp*-W@cJD80ArYj&`ghIW!dICf8E|aUOf(B zvT+V)KBqI7aX9pH;GJXoKB32;?KWj@f(UG>X^YG_#Nr-tJ`GN>4KtSnIK<+21}GRa zoXbJ3h$Kn zamV|y(~f6&{{Rz7gHqN_TMFE&s)4-EIBc(L#Ku8AdOniw9QqtiA}h5aSa3O8aG0U3GGisM$F!b>7Xg=o#A5K_cXH#L4*3MB1r0){5sByHc>UW8LCs>?oncgQlonlrX+i<;Z zs~X%LJxaS*3D!Lmc$eaJiN>dRm*N~^Ux|Jt`1BOXxXlLA*<~yL0FD&sX&A1C?%;>V ztH-b3smy+7TZbF;IrMm(MdssGX=&-!=MSOd(dTpF)awtSr*L!Zh}k$elvo3Kj`>44 z1)&_f8Da&%qiL@Zz}ywk5G!)g)atEnD1yVC1aW1{T?R}=5qrixrg*%p}Gi*i&W`7%7379KId3r zu4S~NVi{dQ`o!MZJBN=)pGS{FOAm@$6-@yeFu(p?EBlWghd`02y4s*xbkfVP7KQ3_@TZ8`qsG40$aq#lZY=fc}y$NxSGx$D| zmh^_FcH$<|DcI)|CImQKdGtV*N(WxvB9{6(-}G`!_SQwXf=tVYxmI85c=U4C#&+WB zJbHJ(M~_D=X&v<(%C_(S0Hrzf(1^F>yNE+X*mm0x=h5TPX~x(z7FddyD840mooCSJ z(BgM5Ib(D+Rrs7;*tI6@Zt7+n#?K{Z(CP>25wOV7=HBFW3YKNF^;9$kkyvWY<4mtu zZa>cvXv-LLE6g~T>ME4b3sybPB+udgv9vk%2zXY;)mi+*pGS}CIsX9Y>(BOcl$*g0 zVIDmz%%-FJXUPe&;i+rE0@uvHFylU*=2w_H%+B zyT^iEJ`Gr*u$_><*jG@ky=tI0&Fs~LZS_mky=GoFbG*-(ai2$=&zP&(7%2#}VuR2h z*HFqQisBT!&#aMIb8@x5w? zZhQPhl8Q?u7jE|zH!wun%L>%I@g64}PW9+G^gQ}Je^!V@E7RqOb+1`cwXZ{`nvI)hqrj{{Z!O{{TGn|JipLPh Date: Mon, 15 Jun 2026 09:19:19 -0700 Subject: [PATCH 04/10] Fix the about tab --- src/components/about/AboutTab.tsx | 41 +++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/components/about/AboutTab.tsx b/src/components/about/AboutTab.tsx index 6377ea8..fc5de17 100644 --- a/src/components/about/AboutTab.tsx +++ b/src/components/about/AboutTab.tsx @@ -1,5 +1,6 @@ import React, { useState } from 'react'; import { useDebugStore } from '../../store/debugStore'; +import { RADIO_DESCRIPTORS } from '../../radios'; import { Card } from '../ui/Card'; import { SectionTitle } from '../ui/SectionTitle'; import { Button } from '../ui/Button'; @@ -23,7 +24,7 @@ export const AboutTab: React.FC = () => {

About NeonPlug

- Channel programming software. Supports: DM-32UV, DP570UV. + Online Digital CPS β€” program your radio directly from your browser.

@@ -101,14 +102,43 @@ npm run build:single Project Information

- NeonPlug is a next-generation, web-based Channel Programming Software (CPS) for supported radios, including DM-32UV / DP570UV and UV5R-Mini. Built with a modern cyberpunk neon-themed UI, it provides an intuitive interface for managing channels, zones, scan lists, contacts, and radio settings. + NeonPlug is a next-generation, web-based Channel Programming Software (CPS). Built with a cyberpunk neon-themed UI, it provides an intuitive interface for managing channels, zones, scan lists, contacts, and radio settings β€” all from your browser, with no drivers or software to install.

- This software implements protocol support for each radio, enabling full read and write operations directly from your web browser via the Web Serial API andβ€”where supportedβ€”Bluetooth Low Energy (BLE). + Each radio's full protocol is implemented natively, enabling read and write operations via the Web Serial API and β€” where supported β€” Bluetooth Low Energy (BLE).

+ {/* Supported Radios */} + + Supported Radios +
+ + + + + + + + + + {RADIO_DESCRIPTORS.map((d) => ( + + + + + + ))} + +
RadioManufacturerConnection
+ {d.icon} {d.modelIds.join(' / ')} + {d.group ?? 'β€”'} + {d.supportsBle ? 'USB or BLE' : 'USB'} +
+
+
+ {/* Codeplug format */} Codeplug format (.neonplug) @@ -162,8 +192,9 @@ npm run build:single

- This project implements the DM-32UV protocol specification, which was reverse-engineered - through analysis of serial port captures and the official CPS software. + Radio protocols were implemented through reverse engineering β€” serial port captures, + analysis of official CPS software, and reference to open-source projects including + CHIRP. The DM-32UV protocol specification is documented separately.

From 49fdfdbf9dc141d1354cf98cd871ae84fab92d11 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Mon, 15 Jun 2026 10:51:22 -0700 Subject: [PATCH 05/10] Simplify shared and reduce stubs --- src/models/RadioSettings.ts | 7 +- src/radios/ft65/connection.ts | 69 ++-------- src/radios/ft65/protocol.ts | 39 +++--- src/radios/ft65/settingsProfile.ts | 62 ++++----- src/radios/shared/BaseRadioProtocol.ts | 30 +++++ src/radios/shared/BaseSerialConnection.ts | 69 ++++++++++ src/radios/uv5rmini/protocol.ts | 56 ++------ src/radios/uv5rmini/serialConnection.ts | 152 ++++++---------------- src/radios/uv5rmini/settingsProfile.ts | 74 +++++------ 9 files changed, 245 insertions(+), 313 deletions(-) create mode 100644 src/radios/shared/BaseRadioProtocol.ts create mode 100644 src/radios/shared/BaseSerialConnection.ts diff --git a/src/models/RadioSettings.ts b/src/models/RadioSettings.ts index aa1738e..f2a9944 100644 --- a/src/models/RadioSettings.ts +++ b/src/models/RadioSettings.ts @@ -187,9 +187,6 @@ export interface RadioSettings { vfoA: Channel; // Offset 0x276-0x2A5 (48 bytes) - VFO A Channel vfoB: Channel; // Offset 0x2A6-0x2D5 (48 bytes) - VFO B Channel - /** UV5R-Mini specific settings (when radio is UV5R-Mini). Select fields use 0-based index. */ - uv5rMiniSettings?: import('../types/uv5rMiniSettings').Uv5rMiniSettings; - - /** FT-65 / FT-4 / FT-25R specific settings. Select fields use 0-based index. */ - ft65Settings?: import('../types/ft65Settings').Ft65Settings; + /** Radio-specific settings bag. Parsed by each radio's settingsFormat.ts; rendered via its settingsProfile. */ + radioSpecific?: Record; } diff --git a/src/radios/ft65/connection.ts b/src/radios/ft65/connection.ts index 7b3ba1a..ab48803 100644 --- a/src/radios/ft65/connection.ts +++ b/src/radios/ft65/connection.ts @@ -14,6 +14,7 @@ */ import { FT65_BAUD_RATE, FT65_BLOCK_SIZE } from './constants'; +import { BaseSerialConnection, type SerialLikePort } from '../shared/BaseSerialConnection'; const PROGRAM_CMD = new TextEncoder().encode('PROGRAM'); const END_CMD = new TextEncoder().encode('END'); @@ -21,12 +22,7 @@ const ACK = 0x06; const TIMEOUT_MS = 8000; const BLOCK_TIMEOUT_MS = 5000; -export interface FT65SerialPort { - readonly readable: ReadableStream | null; - readonly writable: WritableStream | null; - open(options: { baudRate: number }): Promise; - close(): Promise; -} +export type FT65SerialPort = SerialLikePort; /** Request / reuse a Web Serial port and open it at 9600 baud. */ export async function openFT65Port(forceSelection = false): Promise { @@ -43,27 +39,22 @@ export async function openFT65Port(forceSelection = false): Promise | null = null; - private writer: WritableStreamDefaultWriter | null = null; - private buf = new Uint8Array(0); - private port: FT65SerialPort | null = null; - +export class FT65Connection extends BaseSerialConnection { /** Valid radio ID prefixes β€” any match accepted. */ validIdPrefixes: string[] = []; /** Open the port and set up reader/writer. Does NOT enter clone mode. */ async open(port: FT65SerialPort): Promise { - this.port = port; - this.buf = new Uint8Array(0); - if (!port.readable || !port.writable) throw new Error('Port streams unavailable'); - if (port.readable.locked || port.writable.locked) throw new Error('Port already in use'); - this.reader = port.readable.getReader(); - this.writer = port.writable.getWriter(); + await super.openPort(port); await this.delay(300); this.buf = new Uint8Array(0); } + /** Close reader/writer and port. Does NOT send END β€” call sendEnd() first. */ + async close(): Promise { + await super.closeStreams(); + } + /** * Enter clone mode and read + validate the radio's ID string. * Must be called before each readBlock / writeBlock session. @@ -107,18 +98,6 @@ export class FT65Connection { await this.sendcmd(END_CMD, 0); } - /** Close reader/writer and port. Does NOT send END β€” call sendEnd() first. */ - async close(): Promise { - try { await this.reader?.cancel(); } catch { /* ignore */ } - try { await this.writer?.close(); } catch { /* ignore */ } - if (this.port) { - try { await this.port.close(); } catch { /* ignore */ } - } - this.reader = null; - this.writer = null; - this.port = null; - } - /** Read one 16-byte block at byte address `addr`. */ async readBlock(addr: number): Promise { const cmd = new Uint8Array(4); @@ -184,34 +163,4 @@ export class FT65Connection { if (ack[0] !== ACK) throw new Error(`Expected ACK 0x06, got 0x${ack[0].toString(16)}`); return response; } - - private async write(data: Uint8Array): Promise { - if (!this.writer) throw new Error('Not connected'); - await this.writer.write(data); - } - - private async readExact(n: number, timeoutMs: number): Promise> { - const deadline = Date.now() + timeoutMs; - while (this.buf.length < n) { - if (Date.now() > deadline) { - throw new Error(`Timeout: needed ${n} bytes, have ${this.buf.length}`); - } - const { value, done } = await this.reader!.read(); - if (done) throw new Error('Serial port closed unexpectedly'); - if (value && value.length > 0) { - const next = new Uint8Array(this.buf.length + value.length); - next.set(this.buf); - next.set(value, this.buf.length); - this.buf = next; - } - if (this.buf.length < n) await this.delay(10); - } - const result = new Uint8Array(this.buf.slice(0, n)); - this.buf = this.buf.length > n ? this.buf.slice(n) : new Uint8Array(0); - return result; - } - - private delay(ms: number): Promise { - return new Promise((r) => setTimeout(r, ms)); - } } diff --git a/src/radios/ft65/protocol.ts b/src/radios/ft65/protocol.ts index 7568889..3290af1 100644 --- a/src/radios/ft65/protocol.ts +++ b/src/radios/ft65/protocol.ts @@ -7,27 +7,29 @@ * The port stays open between operations; each read/write enters/exits independently. */ -import type { RadioProtocol, RadioInfo } from '../../types/radio'; -import type { Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID } from '../../models'; +import type { RadioInfo } from '../../types/radio'; +import type { Channel, RadioSettings } from '../../models'; +import type { Ft65Settings } from '../../types/ft65Settings'; +import { BaseRadioProtocol } from '../shared/BaseRadioProtocol'; import { FT65Connection, openFT65Port, type FT65SerialPort } from './connection'; import { FT65_NUM_BLOCKS, FT65_BLOCK_SIZE, FT65_MEM_SIZE } from './constants'; import { parseAllChannels, encodeChannel, clearChannelRegions } from './structures'; import { parseFt65Settings, writeFt65Settings } from './settingsFormat'; -export class FT65Protocol implements RadioProtocol { - public onProgress?: (progress: number, message: string) => void; - +export class FT65Protocol extends BaseRadioProtocol { private conn: FT65Connection | null = null; private port: FT65SerialPort | null = null; private cachedImage: Uint8Array | null = null; - private pendingSettings: import('../../types/ft65Settings').Ft65Settings | null = null; + private pendingSettings: Ft65Settings | null = null; constructor( private readonly modelId: string, private readonly idPrefixes: string[], private readonly offsetFactor: number, private readonly maxNameLen: number = 8, - ) {} + ) { + super(); + } async connect( portOrOptions?: string | { forcePortSelection?: boolean; transport?: string } @@ -133,24 +135,17 @@ export class FT65Protocol implements RadioProtocol { await this.conn.sendEnd(); } - async readZones(): Promise { return []; } - async writeZones(_zones: Zone[]): Promise {} - async readScanLists(): Promise { return []; } - async readDMRRadioIDs(): Promise { return []; } - async writeDMRRadioIDs(_ids: DMRRadioID[]): Promise {} - async readContacts(): Promise { return []; } - async writeContacts(_contacts: Contact[]): Promise {} - async readRadioSettings(): Promise { + override async readRadioSettings(): Promise { if (!this.cachedImage) return null; - const ft65Settings = parseFt65Settings(this.cachedImage); - if (!ft65Settings) return null; - return { ft65Settings } as RadioSettings; + const radioSpecific = parseFt65Settings(this.cachedImage); + if (!radioSpecific) return null; + return { radioSpecific } as unknown as RadioSettings; } - async writeRadioSettings(settings: RadioSettings): Promise { - const ft65Settings = settings.ft65Settings; - if (!ft65Settings) return; + override async writeRadioSettings(settings: RadioSettings): Promise { + const radioSpecific = settings.radioSpecific as Ft65Settings | undefined; + if (!radioSpecific) return; // Buffer settings; writeChannels picks them up and writes everything in one clone session. - this.pendingSettings = ft65Settings; + this.pendingSettings = radioSpecific; } } diff --git a/src/radios/ft65/settingsProfile.ts b/src/radios/ft65/settingsProfile.ts index 0d3bd32..4c65370 100644 --- a/src/radios/ft65/settingsProfile.ts +++ b/src/radios/ft65/settingsProfile.ts @@ -31,85 +31,85 @@ function makeSections(includeCompander: boolean): SettingsProfile['sections'] { id: 'basic', title: 'Basic', fields: [ - { key: 'ft65Settings.rfSquelch', label: 'RF Squelch', type: 'select', options: SQL_OPTIONS }, - { key: 'ft65Settings.apo', label: 'Auto Power Off', type: 'select', options: APO_OPTIONS }, - { key: 'ft65Settings.tot', label: 'Time-Out Timer', type: 'select', options: TOT_OPTIONS }, - { key: 'ft65Settings.battSave', label: 'Battery Save', type: 'select', options: BATT_OPTIONS }, - { key: 'ft65Settings.bclo', label: 'Busy Channel Lockout', type: 'checkbox' }, - { key: 'ft65Settings.txSave', label: 'TX Save', type: 'checkbox' }, + { key: 'radioSpecific.rfSquelch', label: 'RF Squelch', type: 'select', options: SQL_OPTIONS }, + { key: 'radioSpecific.apo', label: 'Auto Power Off', type: 'select', options: APO_OPTIONS }, + { key: 'radioSpecific.tot', label: 'Time-Out Timer', type: 'select', options: TOT_OPTIONS }, + { key: 'radioSpecific.battSave', label: 'Battery Save', type: 'select', options: BATT_OPTIONS }, + { key: 'radioSpecific.bclo', label: 'Busy Channel Lockout', type: 'checkbox' }, + { key: 'radioSpecific.txSave', label: 'TX Save', type: 'checkbox' }, ], }, { id: 'audio', title: 'Audio & Beep', fields: [ - { key: 'ft65Settings.beep', label: 'Beep', type: 'select', options: BEEP_OPTIONS }, - { key: 'ft65Settings.bell', label: 'Bell Rings', type: 'select', options: BELL_OPTIONS }, - { key: 'ft65Settings.edgBeep', label: 'Edge Beep', type: 'checkbox' }, - ...(includeCompander ? [{ key: 'ft65Settings.compander', label: 'Compander', type: 'checkbox' as const }] : []), + { key: 'radioSpecific.beep', label: 'Beep', type: 'select', options: BEEP_OPTIONS }, + { key: 'radioSpecific.bell', label: 'Bell Rings', type: 'select', options: BELL_OPTIONS }, + { key: 'radioSpecific.edgBeep', label: 'Edge Beep', type: 'checkbox' }, + ...(includeCompander ? [{ key: 'radioSpecific.compander', label: 'Compander', type: 'checkbox' as const }] : []), ], }, { id: 'display', title: 'Display & Indicators', fields: [ - { key: 'ft65Settings.lamp', label: 'Lamp', type: 'select', options: LAMP_OPTIONS }, - { key: 'ft65Settings.txLed', label: 'TX LED', type: 'checkbox' }, - { key: 'ft65Settings.bsyLed', label: 'Busy LED', type: 'checkbox' }, - { key: 'ft65Settings.scanLamp', label: 'Scan Lamp', type: 'checkbox' }, + { key: 'radioSpecific.lamp', label: 'Lamp', type: 'select', options: LAMP_OPTIONS }, + { key: 'radioSpecific.txLed', label: 'TX LED', type: 'checkbox' }, + { key: 'radioSpecific.bsyLed', label: 'Busy LED', type: 'checkbox' }, + { key: 'radioSpecific.scanLamp', label: 'Scan Lamp', type: 'checkbox' }, ], }, { id: 'scan', title: 'Scan', fields: [ - { key: 'ft65Settings.scanResume', label: 'Scan Resume', type: 'select', options: SCAN_OPTIONS }, - { key: 'ft65Settings.priRvt', label: 'Priority Revert', type: 'checkbox' }, + { key: 'radioSpecific.scanResume', label: 'Scan Resume', type: 'select', options: SCAN_OPTIONS }, + { key: 'radioSpecific.priRvt', label: 'Priority Revert', type: 'checkbox' }, ], }, { id: 'ptt', title: 'PTT & Monitor', fields: [ - { key: 'ft65Settings.moniTcall', label: 'Monitor / Tone', type: 'select', options: MONI_OPTIONS }, - { key: 'ft65Settings.vox', label: 'VOX', type: 'checkbox' }, - { key: 'ft65Settings.keyLock', label: 'Key Lock', type: 'select', options: KEY_LOCK_OPT }, + { key: 'radioSpecific.moniTcall', label: 'Monitor / Tone', type: 'select', options: MONI_OPTIONS }, + { key: 'radioSpecific.vox', label: 'VOX', type: 'checkbox' }, + { key: 'radioSpecific.keyLock', label: 'Key Lock', type: 'select', options: KEY_LOCK_OPT }, ], }, { id: 'misc', title: 'Misc', fields: [ - { key: 'ft65Settings.vfoSpl', label: 'VFO Split', type: 'checkbox' }, - { key: 'ft65Settings.wfmRcv', label: 'WFM Receive', type: 'checkbox' }, - { key: 'ft65Settings.wxAlert', label: 'WX Alert', type: 'checkbox' }, + { key: 'radioSpecific.vfoSpl', label: 'VFO Split', type: 'checkbox' }, + { key: 'radioSpecific.wfmRcv', label: 'WFM Receive', type: 'checkbox' }, + { key: 'radioSpecific.wxAlert', label: 'WX Alert', type: 'checkbox' }, ], }, { id: 'arts', title: 'ARTS', fields: [ - { key: 'ft65Settings.useCwid', label: 'CW ID Enable', type: 'checkbox' }, - { key: 'ft65Settings.cwId', label: 'CW ID Callsign', type: 'text', maxLength: 6 }, - { key: 'ft65Settings.artsBeep', label: 'ARTS Beep', type: 'select', options: ARTS_OPTIONS }, - { key: 'ft65Settings.artsIntv', label: 'ARTS Interval', type: 'select', options: ARTS_INTV }, + { key: 'radioSpecific.useCwid', label: 'CW ID Enable', type: 'checkbox' }, + { key: 'radioSpecific.cwId', label: 'CW ID Callsign', type: 'text', maxLength: 6 }, + { key: 'radioSpecific.artsBeep', label: 'ARTS Beep', type: 'select', options: ARTS_OPTIONS }, + { key: 'radioSpecific.artsIntv', label: 'ARTS Interval', type: 'select', options: ARTS_INTV }, ], }, { id: 'dtmf', title: 'DTMF', fields: [ - { key: 'ft65Settings.dtmfMode', label: 'DTMF Mode', type: 'select', options: DTMF_MODE_OPT }, - { key: 'ft65Settings.dtmfDelay', label: 'DTMF Delay', type: 'select', options: DTMF_DLY_OPT }, - { key: 'ft65Settings.dtmfSpeed', label: 'DTMF Speed', type: 'select', options: DTMF_SPD_OPT }, + { key: 'radioSpecific.dtmfMode', label: 'DTMF Mode', type: 'select', options: DTMF_MODE_OPT }, + { key: 'radioSpecific.dtmfDelay', label: 'DTMF Delay', type: 'select', options: DTMF_DLY_OPT }, + { key: 'radioSpecific.dtmfSpeed', label: 'DTMF Speed', type: 'select', options: DTMF_SPD_OPT }, ], }, { id: 'security', title: 'Security', fields: [ - { key: 'ft65Settings.usePasswd', label: 'Password Enable', type: 'checkbox' }, - { key: 'ft65Settings.passwd', label: 'Password (4 digits)', type: 'text', maxLength: 4 }, + { key: 'radioSpecific.usePasswd', label: 'Password Enable', type: 'checkbox' }, + { key: 'radioSpecific.passwd', label: 'Password (4 digits)', type: 'text', maxLength: 4 }, ], }, ]; diff --git a/src/radios/shared/BaseRadioProtocol.ts b/src/radios/shared/BaseRadioProtocol.ts new file mode 100644 index 0000000..d052bf2 --- /dev/null +++ b/src/radios/shared/BaseRadioProtocol.ts @@ -0,0 +1,30 @@ +/** + * Default no-op implementations for optional RadioProtocol methods. + * New protocols extend this and only override what they actually support. + * The six required methods (connect, disconnect, isConnected, getRadioInfo, + * readChannels, writeChannels) remain abstract. + */ + +import type { RadioProtocol, RadioInfo } from '../../types/radio'; +import type { Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID } from '../../models'; + +export abstract class BaseRadioProtocol implements RadioProtocol { + public onProgress?: (progress: number, message: string) => void; + + abstract connect(portOrOptions?: string | { forcePortSelection?: boolean; transport?: string }): Promise; + abstract disconnect(): Promise; + abstract isConnected(): boolean; + abstract getRadioInfo(): Promise; + abstract readChannels(): Promise; + abstract writeChannels(channels: Channel[]): Promise; + + async readZones(): Promise { return []; } + async writeZones(_zones: Zone[]): Promise {} + async readScanLists(): Promise { return []; } + async readDMRRadioIDs(): Promise { return []; } + async writeDMRRadioIDs(_ids: DMRRadioID[]): Promise {} + async readContacts(): Promise { return []; } + async writeContacts(_contacts: Contact[]): Promise {} + async readRadioSettings(): Promise { return null; } + async writeRadioSettings(_settings: RadioSettings, _options?: { changedFields?: string[] }): Promise {} +} diff --git a/src/radios/shared/BaseSerialConnection.ts b/src/radios/shared/BaseSerialConnection.ts new file mode 100644 index 0000000..54151af --- /dev/null +++ b/src/radios/shared/BaseSerialConnection.ts @@ -0,0 +1,69 @@ +/** + * Shared Web Serial boilerplate: port open/close, reader/writer lifecycle, + * buffered readExact, write helper, and delay. Extended by each radio's + * connection class, which only needs to implement its framing protocol. + */ + +export interface SerialLikePort { + readonly readable: ReadableStream | null; + readonly writable: WritableStream | null; + open(options: { baudRate: number }): Promise; + close(): Promise; +} + +export abstract class BaseSerialConnection { + protected reader: ReadableStreamDefaultReader | null = null; + protected writer: WritableStreamDefaultWriter | null = null; + protected buf = new Uint8Array(0); + protected port: SerialLikePort | null = null; + + protected async openPort(port: SerialLikePort): Promise { + this.port = port; + this.buf = new Uint8Array(0); + if (!port.readable || !port.writable) throw new Error('Port streams unavailable'); + if (port.readable.locked || port.writable.locked) throw new Error('Port already in use'); + this.reader = port.readable.getReader(); + this.writer = port.writable.getWriter(); + } + + protected async closeStreams(): Promise { + try { await this.reader?.cancel(); } catch { /* ignore */ } + try { await this.writer?.close(); } catch { /* ignore */ } + if (this.port) { + try { await this.port.close(); } catch { /* ignore */ } + } + this.reader = null; + this.writer = null; + this.port = null; + } + + protected async write(data: Uint8Array): Promise { + if (!this.writer) throw new Error('Not connected'); + await this.writer.write(data); + } + + protected async readExact(n: number, timeoutMs: number): Promise> { + const deadline = Date.now() + timeoutMs; + while (this.buf.length < n) { + if (Date.now() > deadline) { + throw new Error(`Timeout: needed ${n} bytes, have ${this.buf.length}`); + } + const { value, done } = await this.reader!.read(); + if (done) throw new Error('Serial port closed unexpectedly'); + if (value && value.length > 0) { + const next = new Uint8Array(this.buf.length + value.length); + next.set(this.buf); + next.set(value, this.buf.length); + this.buf = next; + } + if (this.buf.length < n) await this.delay(10); + } + const result = new Uint8Array(this.buf.slice(0, n)); + this.buf = this.buf.length > n ? this.buf.slice(n) : new Uint8Array(0); + return result; + } + + protected delay(ms: number): Promise { + return new Promise((r) => setTimeout(r, ms)); + } +} diff --git a/src/radios/uv5rmini/protocol.ts b/src/radios/uv5rmini/protocol.ts index a52ed19..986ef7d 100644 --- a/src/radios/uv5rmini/protocol.ts +++ b/src/radios/uv5rmini/protocol.ts @@ -2,8 +2,10 @@ * UV5R-Mini protocol: implements RadioProtocol (Serial and BLE). */ -import type { RadioProtocol, RadioInfo } from '../../types/radio'; -import type { Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID } from '../../models'; +import type { RadioInfo } from '../../types/radio'; +import type { Channel, RadioSettings } from '../../models'; +import type { Uv5rMiniSettings } from '../../types/uv5rMiniSettings'; +import { BaseRadioProtocol } from '../shared/BaseRadioProtocol'; import { UV5RMiniSerialConnection, openUV5RMiniPort } from './serialConnection'; import { UV5RMiniBleConnection, requestUV5RMiniBleDevice } from './bleConnection'; import { @@ -28,7 +30,7 @@ type ConnectionLike = { disconnect(): Promise; }; -export class UV5RMiniProtocol implements RadioProtocol { +export class UV5RMiniProtocol extends BaseRadioProtocol { private connection: ConnectionLike | null = null; private port: import('./serialConnection').UV5RMiniSerialPort | null = null; /** Cached image from last readChannels (used by readRadioSettings and getFirmwareFromCache). */ @@ -48,7 +50,6 @@ export class UV5RMiniProtocol implements RadioProtocol { } return String.fromCharCode(...slice.subarray(0, end)).trim(); } - public onProgress?: (progress: number, message: string) => void; async connect(portOrOptions?: string | { forcePortSelection?: boolean; transport?: 'serial' | 'ble' }): Promise { const options = @@ -182,54 +183,23 @@ export class UV5RMiniProtocol implements RadioProtocol { } } - async readZones(): Promise { - return []; - } - - async writeZones(_zones: Zone[]): Promise { - // no-op - } - - async readScanLists(): Promise { - return []; - } - - async readDMRRadioIDs(): Promise { - return []; - } - - async writeDMRRadioIDs(_ids: DMRRadioID[]): Promise { - // no-op - } - - async readContacts(): Promise { - return []; - } - - async writeContacts(_contacts: Contact[]): Promise { - // no-op - } - - async readRadioSettings(): Promise { + override async readRadioSettings(): Promise { const image = this.cachedImage; if (!image || image.length < 0x8080) return null; - - const uv5rMiniSettings = parseUv5rMiniSettings(image); - if (!uv5rMiniSettings) return null; - - return { uv5rMiniSettings } as RadioSettings; + const radioSpecific = parseUv5rMiniSettings(image); + if (!radioSpecific) return null; + return { radioSpecific } as unknown as RadioSettings; } - async writeRadioSettings(settings: RadioSettings, _options?: { changedFields?: string[] }): Promise { - const uv5rMiniSettings = settings.uv5rMiniSettings; - if (!uv5rMiniSettings || !this.connection) return; - + override async writeRadioSettings(settings: RadioSettings, _options?: { changedFields?: string[] }): Promise { + const radioSpecific = settings.radioSpecific as Uv5rMiniSettings | undefined; + if (!radioSpecific || !this.connection) return; // Read current settings block from radio, merge our changes, write back const block = await this.connection.readBlock(UV5RMINI_SETTINGS_OFFSET); const image = new Uint8Array(UV5RMINI_SETTINGS_OFFSET + 64); image.fill(0xff); image.set(block, UV5RMINI_SETTINGS_OFFSET); - writeUv5rMiniSettings(image, uv5rMiniSettings); + writeUv5rMiniSettings(image, radioSpecific); await this.connection.writeBlock(UV5RMINI_SETTINGS_OFFSET, image.subarray(UV5RMINI_SETTINGS_OFFSET)); } } diff --git a/src/radios/uv5rmini/serialConnection.ts b/src/radios/uv5rmini/serialConnection.ts index 62d3ad1..8a7d18e 100644 --- a/src/radios/uv5rmini/serialConnection.ts +++ b/src/radios/uv5rmini/serialConnection.ts @@ -17,77 +17,40 @@ import { buildBaofengWriteFrame, parseBaofengReadResponse, } from './baofengProtocol'; +import { BaseSerialConnection, type SerialLikePort } from '../shared/BaseSerialConnection'; -export interface UV5RMiniSerialPort { - readonly readable: ReadableStream | null; - readonly writable: WritableStream | null; - open(options: { baudRate: number }): Promise; - close(): Promise; -} +export type UV5RMiniSerialPort = SerialLikePort; const READ_TIMEOUT_MS = 6000; const WRITE_ACK_TIMEOUT_MS = 400; -export class UV5RMiniSerialConnection { - private reader: ReadableStreamDefaultReader | null = null; - private writer: WritableStreamDefaultWriter | null = null; - private readBuffer = new Uint8Array(0); - private port: UV5RMiniSerialPort | null = null; - +export class UV5RMiniSerialConnection extends BaseSerialConnection { async connect(port: UV5RMiniSerialPort): Promise { - this.port = port; - this.readBuffer = new Uint8Array(0); - if (!port.readable || !port.writable) { - throw new Error('Port streams not available'); - } - if (port.readable.locked || port.writable.locked) { - throw new Error('Port already in use'); - } - this.reader = port.readable.getReader(); - this.writer = port.writable.getWriter(); + await super.openPort(port); await this.delay(300); - await this.clearBuffer(); + this.buf = new Uint8Array(0); await this.delay(200); // Handshake: ident -> ACK - await this.send(BAOFENG_IDENT); + await this.write(BAOFENG_IDENT); await this.waitForByte(BAOFENG_ACK, 8000); // Magics (read mode) for (const { send, responseLen } of BAOFENG_MAGICS_READ) { - await this.clearBuffer(); - await this.send(send); - await this.readBytes(responseLen, 4000); + this.buf = new Uint8Array(0); + await this.write(send); + await this.readExact(responseLen, 4000); } } async disconnect(): Promise { - try { - await this.reader?.cancel(); - } catch { - /* ignore */ - } - try { - await this.writer?.close(); - } catch { - /* ignore */ - } - if (this.port) { - try { - await this.port.close(); - } catch { - /* ignore */ - } - } - this.reader = null; - this.writer = null; - this.port = null; + await super.closeStreams(); } /** Read one 64-byte block at address (returns decrypted payload). */ async readBlock(addr: number): Promise { const frame = buildBaofengReadFrame(addr, BAOFENG_BLOCK_SIZE); - await this.send(frame); + await this.write(frame); const raw = await this.waitForReadResponse(READ_TIMEOUT_MS); return parseBaofengReadResponse(raw); } @@ -95,74 +58,39 @@ export class UV5RMiniSerialConnection { /** Write one 64-byte block at address (block is plain; we encrypt in buildBaofengWriteFrame). */ async writeBlock(addr: number, block: Uint8Array): Promise { if (block.length !== BAOFENG_BLOCK_SIZE) throw new Error('Block must be 64 bytes'); - await this.clearBuffer(); + this.buf = new Uint8Array(0); const frame = buildBaofengWriteFrame(addr, block); - await this.send(frame); + await this.write(frame); await this.waitForByte(BAOFENG_ACK, WRITE_ACK_TIMEOUT_MS); } /** Switch to upload magics (call before writing multiple blocks). */ async handshakeUpload(): Promise { - await this.clearBuffer(); - await this.send(BAOFENG_IDENT); + this.buf = new Uint8Array(0); + await this.write(BAOFENG_IDENT); await this.waitForByte(BAOFENG_ACK, 8000); for (const { send, responseLen } of BAOFENG_MAGICS_UPLOAD) { - await this.clearBuffer(); - await this.send(send); - await this.readBytes(responseLen, 4000); - } - } - - private delay(ms: number): Promise { - return new Promise((r) => setTimeout(r, ms)); - } - - private async send(data: Uint8Array): Promise { - if (!this.writer) throw new Error('Not connected'); - await this.writer.write(data); - } - - private async readBytes(n: number, timeoutMs: number): Promise { - const deadline = Date.now() + timeoutMs; - while (this.readBuffer.length < n) { - if (Date.now() > deadline) { - throw new Error(`Timeout waiting for ${n} bytes (got ${this.readBuffer.length})`); - } - const { value } = await this.reader!.read(); - if (value && value.length > 0) { - const newLen = this.readBuffer.length + value.length; - const next = new Uint8Array(newLen); - next.set(this.readBuffer); - next.set(value, this.readBuffer.length); - this.readBuffer = next; - } - await this.delay(10); + this.buf = new Uint8Array(0); + await this.write(send); + await this.readExact(responseLen, 4000); } - const out = this.readBuffer.slice(0, n); - this.readBuffer = - this.readBuffer.length > n ? this.readBuffer.subarray(n) : new Uint8Array(0); - return out; } private async waitForByte(byte: number, timeoutMs: number): Promise { const deadline = Date.now() + timeoutMs; while (Date.now() < deadline) { - for (let i = 0; i < this.readBuffer.length; i++) { - if (this.readBuffer[i] === byte) { - this.readBuffer = - this.readBuffer.length > i + 1 - ? this.readBuffer.subarray(i + 1) - : new Uint8Array(0); + for (let i = 0; i < this.buf.length; i++) { + if (this.buf[i] === byte) { + this.buf = this.buf.length > i + 1 ? this.buf.subarray(i + 1) : new Uint8Array(0); return; } } const { value } = await this.reader!.read(); if (value && value.length > 0) { - const newLen = this.readBuffer.length + value.length; - const next = new Uint8Array(newLen); - next.set(this.readBuffer); - next.set(value, this.readBuffer.length); - this.readBuffer = next; + const next = new Uint8Array(this.buf.length + value.length); + next.set(this.buf); + next.set(value, this.buf.length); + this.buf = next; } await this.delay(20); } @@ -173,35 +101,29 @@ export class UV5RMiniSerialConnection { private async waitForReadResponse(timeoutMs: number): Promise { const deadline = Date.now() + timeoutMs; while (Date.now() < deadline) { - while (this.readBuffer.length > 0 && this.readBuffer[0] !== 0x52) { - this.readBuffer = this.readBuffer.subarray(1); + while (this.buf.length > 0 && this.buf[0] !== 0x52) { + this.buf = this.buf.subarray(1); } - if (this.readBuffer.length >= BAOFENG_READ_RESPONSE_LEN) { - const out = this.readBuffer.slice(0, BAOFENG_READ_RESPONSE_LEN); - this.readBuffer = - this.readBuffer.length > BAOFENG_READ_RESPONSE_LEN - ? this.readBuffer.subarray(BAOFENG_READ_RESPONSE_LEN) - : new Uint8Array(0); + if (this.buf.length >= BAOFENG_READ_RESPONSE_LEN) { + const out = this.buf.slice(0, BAOFENG_READ_RESPONSE_LEN); + this.buf = this.buf.length > BAOFENG_READ_RESPONSE_LEN + ? this.buf.subarray(BAOFENG_READ_RESPONSE_LEN) + : new Uint8Array(0); return out; } const { value } = await this.reader!.read(); if (value && value.length > 0) { - const newLen = this.readBuffer.length + value.length; - const next = new Uint8Array(newLen); - next.set(this.readBuffer); - next.set(value, this.readBuffer.length); - this.readBuffer = next; + const next = new Uint8Array(this.buf.length + value.length); + next.set(this.buf); + next.set(value, this.buf.length); + this.buf = next; } await this.delay(20); } throw new Error( - `Timeout waiting for read response (68 bytes). Have ${this.readBuffer.length} bytes.` + `Timeout waiting for read response (68 bytes). Have ${this.buf.length} bytes.` ); } - - private clearBuffer(): void { - this.readBuffer = new Uint8Array(0); - } } /** Request Web Serial port and open at UV5R-Mini baud rate. */ diff --git a/src/radios/uv5rmini/settingsProfile.ts b/src/radios/uv5rmini/settingsProfile.ts index 88c4b55..30c5dd7 100644 --- a/src/radios/uv5rmini/settingsProfile.ts +++ b/src/radios/uv5rmini/settingsProfile.ts @@ -14,79 +14,79 @@ export const UV5RMINI_SETTINGS_PROFILE: SettingsProfile = { id: 'basic', title: 'Basic', fields: [ - { key: 'uv5rMiniSettings.squelch', label: 'Squelch', type: 'select', options: optionsFor(['Off', '1', '2', '3', '4', '5']) }, - { key: 'uv5rMiniSettings.savemode', label: 'Save mode', type: 'select', options: optionsFor(['Off', 'On']) }, - { key: 'uv5rMiniSettings.vox', label: 'VOX', type: 'select', options: optionsFor(['Off', '1', '2', '3', '4', '5', '6', '7', '8', '9']) }, - { key: 'uv5rMiniSettings.backlight', label: 'Backlight', type: 'select', options: optionsFor(['Always On', ...Array.from({ length: 4 }, (_, i) => `${5 + i * 5} sec`)]) }, - { key: 'uv5rMiniSettings.dualstandby', label: 'Dual watch', type: 'select', options: optionsFor(['Off', 'On']) }, - { key: 'uv5rMiniSettings.tot', label: 'Timeout timer', type: 'select', options: optionsFor(['Off', ...Array.from({ length: 12 }, (_, i) => `${15 + i * 15} sec`)]) }, - { key: 'uv5rMiniSettings.beep', label: 'Beep', type: 'select', options: optionsFor(['Off', 'On']) }, - { key: 'uv5rMiniSettings.voicesw', label: 'Enable voice', type: 'checkbox' }, - { key: 'uv5rMiniSettings.voice', label: 'Voice prompt', type: 'select', options: optionsFor(['English', 'Chinese']) }, + { key: 'radioSpecific.squelch', label: 'Squelch', type: 'select', options: optionsFor(['Off', '1', '2', '3', '4', '5']) }, + { key: 'radioSpecific.savemode', label: 'Save mode', type: 'select', options: optionsFor(['Off', 'On']) }, + { key: 'radioSpecific.vox', label: 'VOX', type: 'select', options: optionsFor(['Off', '1', '2', '3', '4', '5', '6', '7', '8', '9']) }, + { key: 'radioSpecific.backlight', label: 'Backlight', type: 'select', options: optionsFor(['Always On', ...Array.from({ length: 4 }, (_, i) => `${5 + i * 5} sec`)]) }, + { key: 'radioSpecific.dualstandby', label: 'Dual watch', type: 'select', options: optionsFor(['Off', 'On']) }, + { key: 'radioSpecific.tot', label: 'Timeout timer', type: 'select', options: optionsFor(['Off', ...Array.from({ length: 12 }, (_, i) => `${15 + i * 15} sec`)]) }, + { key: 'radioSpecific.beep', label: 'Beep', type: 'select', options: optionsFor(['Off', 'On']) }, + { key: 'radioSpecific.voicesw', label: 'Enable voice', type: 'checkbox' }, + { key: 'radioSpecific.voice', label: 'Voice prompt', type: 'select', options: optionsFor(['English', 'Chinese']) }, ], }, { id: 'display', title: 'Display & Channel', fields: [ - { key: 'uv5rMiniSettings.chadistype', label: 'Channel A display', type: 'select', options: optionsFor(['Name', 'Frequency', 'Channel Number']) }, - { key: 'uv5rMiniSettings.chbdistype', label: 'Channel B display', type: 'select', options: optionsFor(['Name', 'Frequency', 'Channel Number']) }, - { key: 'uv5rMiniSettings.chaworkmode', label: 'Channel A work mode', type: 'select', options: optionsFor(['Frequency', 'Channel']) }, - { key: 'uv5rMiniSettings.chbworkmode', label: 'Channel B work mode', type: 'select', options: optionsFor(['Frequency', 'Channel']) }, - { key: 'uv5rMiniSettings.powerondistype', label: 'Power on display', type: 'select', options: optionsFor(['LOGO', 'BATT voltage']) }, - { key: 'uv5rMiniSettings.aOrB', label: 'VFO selected', type: 'select', options: [{ value: 0, label: 'A' }, { value: 1, label: 'B' }] }, + { key: 'radioSpecific.chadistype', label: 'Channel A display', type: 'select', options: optionsFor(['Name', 'Frequency', 'Channel Number']) }, + { key: 'radioSpecific.chbdistype', label: 'Channel B display', type: 'select', options: optionsFor(['Name', 'Frequency', 'Channel Number']) }, + { key: 'radioSpecific.chaworkmode', label: 'Channel A work mode', type: 'select', options: optionsFor(['Frequency', 'Channel']) }, + { key: 'radioSpecific.chbworkmode', label: 'Channel B work mode', type: 'select', options: optionsFor(['Frequency', 'Channel']) }, + { key: 'radioSpecific.powerondistype', label: 'Power on display', type: 'select', options: optionsFor(['LOGO', 'BATT voltage']) }, + { key: 'radioSpecific.aOrB', label: 'VFO selected', type: 'select', options: [{ value: 0, label: 'A' }, { value: 1, label: 'B' }] }, ], }, { id: 'ptt', title: 'PTT & Roger', fields: [ - { key: 'uv5rMiniSettings.pttid', label: 'PTT ID', type: 'select', options: optionsFor(['Off', 'BOT', 'EOT', 'Both']) }, - { key: 'uv5rMiniSettings.pttdly', label: 'Send ID delay', type: 'select', options: optionsFor(Array.from({ length: 30 }, (_, i) => `${100 + i * 100} ms`)) }, - { key: 'uv5rMiniSettings.roger', label: 'Roger', type: 'checkbox' }, - { key: 'uv5rMiniSettings.sidetone', label: 'Side tone', type: 'select', options: optionsFor(['Off', 'KB Side Tone', 'ANI Side Tone', 'KB + ANI Side Tone']) }, + { key: 'radioSpecific.pttid', label: 'PTT ID', type: 'select', options: optionsFor(['Off', 'BOT', 'EOT', 'Both']) }, + { key: 'radioSpecific.pttdly', label: 'Send ID delay', type: 'select', options: optionsFor(Array.from({ length: 30 }, (_, i) => `${100 + i * 100} ms`)) }, + { key: 'radioSpecific.roger', label: 'Roger', type: 'checkbox' }, + { key: 'radioSpecific.sidetone', label: 'Side tone', type: 'select', options: optionsFor(['Off', 'KB Side Tone', 'ANI Side Tone', 'KB + ANI Side Tone']) }, ], }, { id: 'scan', title: 'Scan & Squelch', fields: [ - { key: 'uv5rMiniSettings.scanmode', label: 'Scan mode', type: 'select', options: optionsFor(['Time', 'Carrier', 'Search']) }, - { key: 'uv5rMiniSettings.ctsdcsscantype', label: 'QT save mode', type: 'select', options: optionsFor(['Both', 'RX', 'TX']) }, + { key: 'radioSpecific.scanmode', label: 'Scan mode', type: 'select', options: optionsFor(['Time', 'Carrier', 'Search']) }, + { key: 'radioSpecific.ctsdcsscantype', label: 'QT save mode', type: 'select', options: optionsFor(['Both', 'RX', 'TX']) }, ], }, { id: 'alarm', title: 'Alarm & Safety', fields: [ - { key: 'uv5rMiniSettings.alarmmode', label: 'Alarm mode', type: 'select', options: optionsFor(['Local', 'Send Tone', 'Send Code']) }, - { key: 'uv5rMiniSettings.alarmtone', label: 'Sound alarm', type: 'checkbox' }, - { key: 'uv5rMiniSettings.totalarm', label: 'Timeout alarm', type: 'select', options: optionsFor(['Off', '1 sec', '2 sec', '3 sec', '4 sec', '5 sec', '6 sec', '7 sec', '8 sec', '9 sec', '10 sec']) }, + { key: 'radioSpecific.alarmmode', label: 'Alarm mode', type: 'select', options: optionsFor(['Local', 'Send Tone', 'Send Code']) }, + { key: 'radioSpecific.alarmtone', label: 'Sound alarm', type: 'checkbox' }, + { key: 'radioSpecific.totalarm', label: 'Timeout alarm', type: 'select', options: optionsFor(['Off', '1 sec', '2 sec', '3 sec', '4 sec', '5 sec', '6 sec', '7 sec', '8 sec', '9 sec', '10 sec']) }, ], }, { id: 'repeater', title: 'Repeater', fields: [ - { key: 'uv5rMiniSettings.tailclear', label: 'Tail clear', type: 'checkbox' }, - { key: 'uv5rMiniSettings.rpttailclear', label: 'Rpt tail clear', type: 'select', options: optionsFor(Array.from({ length: 11 }, (_, i) => `${i * 100} ms`)) }, - { key: 'uv5rMiniSettings.rpttaildet', label: 'Rpt tail delay', type: 'select', options: optionsFor(Array.from({ length: 11 }, (_, i) => `${i * 100} ms`)) }, + { key: 'radioSpecific.tailclear', label: 'Tail clear', type: 'checkbox' }, + { key: 'radioSpecific.rpttailclear', label: 'Rpt tail clear', type: 'select', options: optionsFor(Array.from({ length: 11 }, (_, i) => `${i * 100} ms`)) }, + { key: 'radioSpecific.rpttaildet', label: 'Rpt tail delay', type: 'select', options: optionsFor(Array.from({ length: 11 }, (_, i) => `${i * 100} ms`)) }, ], }, { id: 'vox', title: 'VOX & Misc', fields: [ - { key: 'uv5rMiniSettings.voxdlytime', label: 'VOX delay time', type: 'select', options: optionsFor(Array.from({ length: 16 }, (_, i) => `${500 + i * 100} ms`)) }, - { key: 'uv5rMiniSettings.voxsw', label: 'VOX switch', type: 'checkbox' }, - { key: 'uv5rMiniSettings.menuquittime', label: 'Menu quit timer', type: 'select', options: optionsFor([...Array.from({ length: 10 }, (_, i) => `${5 + i * 5} sec`), '60 sec']) }, - { key: 'uv5rMiniSettings.dispani', label: 'Display ANI', type: 'checkbox' }, - { key: 'uv5rMiniSettings.inputdtmf', label: 'Input DTMF', type: 'checkbox' }, - { key: 'uv5rMiniSettings.bcl', label: 'BCL', type: 'checkbox' }, - { key: 'uv5rMiniSettings.autolock', label: 'Key auto lock', type: 'checkbox' }, - { key: 'uv5rMiniSettings.keylock', label: 'Key lock', type: 'checkbox' }, - { key: 'uv5rMiniSettings.fmenable', label: 'Disable FM', type: 'checkbox' }, - { key: 'uv5rMiniSettings.hangup', label: 'Hang-up time', type: 'select', options: optionsFor(['3 s', '4 s', '5 s', '6 s', '7 s', '8 s', '9 s', '10 s']) }, + { key: 'radioSpecific.voxdlytime', label: 'VOX delay time', type: 'select', options: optionsFor(Array.from({ length: 16 }, (_, i) => `${500 + i * 100} ms`)) }, + { key: 'radioSpecific.voxsw', label: 'VOX switch', type: 'checkbox' }, + { key: 'radioSpecific.menuquittime', label: 'Menu quit timer', type: 'select', options: optionsFor([...Array.from({ length: 10 }, (_, i) => `${5 + i * 5} sec`), '60 sec']) }, + { key: 'radioSpecific.dispani', label: 'Display ANI', type: 'checkbox' }, + { key: 'radioSpecific.inputdtmf', label: 'Input DTMF', type: 'checkbox' }, + { key: 'radioSpecific.bcl', label: 'BCL', type: 'checkbox' }, + { key: 'radioSpecific.autolock', label: 'Key auto lock', type: 'checkbox' }, + { key: 'radioSpecific.keylock', label: 'Key lock', type: 'checkbox' }, + { key: 'radioSpecific.fmenable', label: 'Disable FM', type: 'checkbox' }, + { key: 'radioSpecific.hangup', label: 'Hang-up time', type: 'select', options: optionsFor(['3 s', '4 s', '5 s', '6 s', '7 s', '8 s', '9 s', '10 s']) }, ], }, ], From 7d58262658166cefec148b79688413a6bd8287f0 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Mon, 15 Jun 2026 11:01:03 -0700 Subject: [PATCH 06/10] More test, more cleanup of shared code --- src/radios/ft65/connection.ts | 13 +- src/radios/shared/serialPort.ts | 19 ++ src/radios/uv5rmini/serialConnection.ts | 23 +-- tests/unit/ft65SettingsFormat.test.ts | 232 ++++++++++++++++++++++ tests/unit/uv5rMiniSettingsFormat.test.ts | 216 ++++++++++++++++++++ 5 files changed, 472 insertions(+), 31 deletions(-) create mode 100644 src/radios/shared/serialPort.ts create mode 100644 tests/unit/ft65SettingsFormat.test.ts create mode 100644 tests/unit/uv5rMiniSettingsFormat.test.ts diff --git a/src/radios/ft65/connection.ts b/src/radios/ft65/connection.ts index ab48803..6f76269 100644 --- a/src/radios/ft65/connection.ts +++ b/src/radios/ft65/connection.ts @@ -15,6 +15,7 @@ import { FT65_BAUD_RATE, FT65_BLOCK_SIZE } from './constants'; import { BaseSerialConnection, type SerialLikePort } from '../shared/BaseSerialConnection'; +import { requestSerialPort } from '../shared/serialPort'; const PROGRAM_CMD = new TextEncoder().encode('PROGRAM'); const END_CMD = new TextEncoder().encode('END'); @@ -26,17 +27,7 @@ export type FT65SerialPort = SerialLikePort; /** Request / reuse a Web Serial port and open it at 9600 baud. */ export async function openFT65Port(forceSelection = false): Promise { - if (!('serial' in navigator)) throw new Error('Web Serial API not supported. Use Chrome/Edge.'); - const nav = (navigator as any).serial; - let port: FT65SerialPort; - if (forceSelection) { - port = await nav.requestPort(); - } else { - const ports: FT65SerialPort[] = await nav.getPorts(); - port = ports.length > 0 ? ports[0] : await nav.requestPort(); - } - await port.open({ baudRate: FT65_BAUD_RATE }); - return port; + return requestSerialPort(FT65_BAUD_RATE, forceSelection); } export class FT65Connection extends BaseSerialConnection { diff --git a/src/radios/shared/serialPort.ts b/src/radios/shared/serialPort.ts new file mode 100644 index 0000000..4fde23c --- /dev/null +++ b/src/radios/shared/serialPort.ts @@ -0,0 +1,19 @@ +import type { SerialLikePort } from './BaseSerialConnection'; + +/** + * Request or reuse a Web Serial port and open it at the given baud rate. + * Shared by all serial radios; each radio's connection file wraps this + * with a named function that supplies its own baud rate constant. + */ +export async function requestSerialPort( + baudRate: number, + forceSelection = false +): Promise { + if (!('serial' in navigator)) throw new Error('Web Serial API not supported. Use Chrome/Edge.'); + const nav = (navigator as any).serial; + const port: SerialLikePort = forceSelection + ? await nav.requestPort() + : ((await nav.getPorts())[0] ?? (await nav.requestPort())); + await port.open({ baudRate }); + return port; +} diff --git a/src/radios/uv5rmini/serialConnection.ts b/src/radios/uv5rmini/serialConnection.ts index 8a7d18e..8338ac6 100644 --- a/src/radios/uv5rmini/serialConnection.ts +++ b/src/radios/uv5rmini/serialConnection.ts @@ -18,6 +18,7 @@ import { parseBaofengReadResponse, } from './baofengProtocol'; import { BaseSerialConnection, type SerialLikePort } from '../shared/BaseSerialConnection'; +import { requestSerialPort } from '../shared/serialPort'; export type UV5RMiniSerialPort = SerialLikePort; @@ -127,24 +128,6 @@ export class UV5RMiniSerialConnection extends BaseSerialConnection { } /** Request Web Serial port and open at UV5R-Mini baud rate. */ -export async function openUV5RMiniPort( - forcePortSelection?: boolean -): Promise { - if (!('serial' in navigator)) { - throw new Error('Web Serial API not supported. Please use Chrome/Edge.'); - } - const nav = (navigator as any).serial; - let port: UV5RMiniSerialPort; - if (forcePortSelection) { - port = await nav.requestPort(); - } else { - const ports = await nav.getPorts(); - if (ports.length === 0) { - port = await nav.requestPort(); - } else { - port = ports[0]; - } - } - await port.open({ baudRate: UV5RMINI_BAUD_RATE }); - return port; +export async function openUV5RMiniPort(forcePortSelection = false): Promise { + return requestSerialPort(UV5RMINI_BAUD_RATE, forcePortSelection); } diff --git a/tests/unit/ft65SettingsFormat.test.ts b/tests/unit/ft65SettingsFormat.test.ts new file mode 100644 index 0000000..2662212 --- /dev/null +++ b/tests/unit/ft65SettingsFormat.test.ts @@ -0,0 +1,232 @@ +import { describe, it, expect } from 'vitest'; +import { parseFt65Settings, writeFt65Settings } from '../../src/radios/ft65/settingsFormat'; +import { FT65_ADDR_SETTINGS } from '../../src/radios/ft65/constants'; + +const OFF = FT65_ADDR_SETTINGS; // 0x2000 + +function makeImage(): Uint8Array { + return new Uint8Array(OFF + 64); +} + +// ── parseFt65Settings ────────────────────────────────────────────────────── + +describe('parseFt65Settings', () => { + it('returns null when image is too small', () => { + expect(parseFt65Settings(new Uint8Array(0))).toBeNull(); + expect(parseFt65Settings(new Uint8Array(OFF + 10))).toBeNull(); + }); + + it('parses all-zero block to safe defaults', () => { + const s = parseFt65Settings(makeImage())!; + expect(s.apo).toBe(0); + expect(s.beep).toBe(0); + expect(s.bclo).toBe(false); + expect(s.txLed).toBe(false); + expect(s.cwId).toBe(''); + expect(s.passwd).toBe('0000'); + expect(s.tot).toBe(0); + expect(s.usePasswd).toBe(false); + }); + + it('parses scalar settings at correct byte offsets', () => { + const img = makeImage(); + img[OFF + 0x00] = 12; // apo + img[OFF + 0x03] = 3; // battSave + img[OFF + 0x05] = 2; // beep + img[OFF + 0x06] = 4; // bell + img[OFF + 0x14] = 1; // keyLock + img[OFF + 0x15] = 3; // lamp + img[OFF + 0x18] = 2; // moniTcall + img[OFF + 0x1A] = 1; // scanResume + img[OFF + 0x1B] = 5; // rfSquelch + img[OFF + 0x27] = 20; // tot + const s = parseFt65Settings(img)!; + expect(s.apo).toBe(12); + expect(s.battSave).toBe(3); + expect(s.beep).toBe(2); + expect(s.bell).toBe(4); + expect(s.keyLock).toBe(1); + expect(s.lamp).toBe(3); + expect(s.moniTcall).toBe(2); + expect(s.scanResume).toBe(1); + expect(s.rfSquelch).toBe(5); + expect(s.tot).toBe(20); + }); + + it('parses boolean flags correctly', () => { + const img = makeImage(); + img[OFF + 0x04] = 1; // bclo + img[OFF + 0x13] = 1; // edgBeep + img[OFF + 0x16] = 1; // txLed + img[OFF + 0x17] = 1; // bsyLed + img[OFF + 0x19] = 1; // priRvt + img[OFF + 0x1C] = 1; // scanLamp + img[OFF + 0x1E] = 1; // useCwid + img[OFF + 0x1F] = 1; // compander + img[OFF + 0x21] = 1; // txSave + img[OFF + 0x22] = 1; // vfoSpl + img[OFF + 0x23] = 1; // vox + img[OFF + 0x24] = 1; // wfmRcv + img[OFF + 0x26] = 1; // wxAlert + img[OFF + 0x30] = 1; // usePasswd + const s = parseFt65Settings(img)!; + expect(s.bclo).toBe(true); + expect(s.edgBeep).toBe(true); + expect(s.txLed).toBe(true); + expect(s.bsyLed).toBe(true); + expect(s.priRvt).toBe(true); + expect(s.scanLamp).toBe(true); + expect(s.useCwid).toBe(true); + expect(s.compander).toBe(true); + expect(s.txSave).toBe(true); + expect(s.vfoSpl).toBe(true); + expect(s.vox).toBe(true); + expect(s.wfmRcv).toBe(true); + expect(s.wxAlert).toBe(true); + expect(s.usePasswd).toBe(true); + }); + + it('parses CW ID (6-byte ASCII, space-padded)', () => { + const img = makeImage(); + // 'VE2XY ' β€” trailing space should be trimmed + img[OFF + 0x07] = 0x56; // 'V' + img[OFF + 0x08] = 0x45; // 'E' + img[OFF + 0x09] = 0x32; // '2' + img[OFF + 0x0A] = 0x58; // 'X' + img[OFF + 0x0B] = 0x59; // 'Y' + img[OFF + 0x0C] = 0x20; // ' ' (padding) + expect(parseFt65Settings(img)!.cwId).toBe('VE2XY'); + }); + + it('stops CW ID parsing at null byte', () => { + const img = makeImage(); + img[OFF + 0x07] = 0x41; // 'A' + img[OFF + 0x08] = 0x00; // null β€” terminates here + img[OFF + 0x09] = 0x42; // 'B' β€” should not appear + expect(parseFt65Settings(img)!.cwId).toBe('A'); + }); + + it('parses password digits', () => { + const img = makeImage(); + img[OFF + 0x31] = 0x39; // '9' + img[OFF + 0x32] = 0x38; // '8' + img[OFF + 0x33] = 0x37; // '7' + img[OFF + 0x34] = 0x36; // '6' + expect(parseFt65Settings(img)!.passwd).toBe('9876'); + }); + + it('replaces non-digit password bytes with 0', () => { + const img = makeImage(); + img[OFF + 0x31] = 0x41; // 'A' β†’ '0' + img[OFF + 0x32] = 0x35; // '5' β†’ ok + img[OFF + 0x33] = 0xFF; // invalid β†’ '0' + img[OFF + 0x34] = 0x31; // '1' β†’ ok + expect(parseFt65Settings(img)!.passwd).toBe('0501'); + }); + + it('clamps out-of-range values to valid maximums', () => { + const img = makeImage(); + img[OFF + 0x00] = 255; // apo max 24 + img[OFF + 0x27] = 255; // tot max 30 + img[OFF + 0x01] = 255; // artsBeep max 2 + img[OFF + 0x1B] = 255; // rfSquelch max 8 + const s = parseFt65Settings(img)!; + expect(s.apo).toBe(24); + expect(s.tot).toBe(30); + expect(s.artsBeep).toBe(2); + expect(s.rfSquelch).toBe(8); + }); +}); + +// ── writeFt65Settings ────────────────────────────────────────────────────── + +describe('writeFt65Settings', () => { + it('no-ops silently on an undersized image', () => { + expect(() => writeFt65Settings(new Uint8Array(0), { apo: 5 })).not.toThrow(); + }); + + it('writes scalar fields to correct byte offsets', () => { + const img = makeImage(); + writeFt65Settings(img, { apo: 8, tot: 15, beep: 1, rfSquelch: 3 }); + expect(img[OFF + 0x00]).toBe(8); + expect(img[OFF + 0x27]).toBe(15); + expect(img[OFF + 0x05]).toBe(1); + expect(img[OFF + 0x1B]).toBe(3); + }); + + it('writes boolean fields as 0/1', () => { + const img = makeImage(); + writeFt65Settings(img, { bclo: true, txLed: false, vox: true, scanLamp: false }); + expect(img[OFF + 0x04]).toBe(1); + expect(img[OFF + 0x16]).toBe(0); + expect(img[OFF + 0x23]).toBe(1); + expect(img[OFF + 0x1C]).toBe(0); + }); + + it('writes CW ID space-padded to 6 bytes', () => { + const img = makeImage(); + writeFt65Settings(img, { cwId: 'AB' }); + expect(img[OFF + 0x07]).toBe(0x41); // 'A' + expect(img[OFF + 0x08]).toBe(0x42); // 'B' + expect(img[OFF + 0x09]).toBe(0x20); // space pad + expect(img[OFF + 0x0C]).toBe(0x20); // space pad + }); + + it('truncates CW ID beyond 6 chars', () => { + const img = makeImage(); + writeFt65Settings(img, { cwId: 'ABCDEFGH' }); + // Only first 6 bytes written + expect(img[OFF + 0x07]).toBe(0x41); // 'A' + expect(img[OFF + 0x0C]).toBe(0x46); // 'F' (6th char) + }); + + it('writes password digits', () => { + const img = makeImage(); + writeFt65Settings(img, { passwd: '5678' }); + expect(img[OFF + 0x31]).toBe(0x35); // '5' + expect(img[OFF + 0x32]).toBe(0x36); // '6' + expect(img[OFF + 0x33]).toBe(0x37); // '7' + expect(img[OFF + 0x34]).toBe(0x38); // '8' + }); + + it('does not modify bytes for unspecified fields', () => { + const img = makeImage(); + img[OFF + 0x10] = 0x42; // dtmfMode byte + img[OFF + 0x15] = 0x77; // lamp byte + writeFt65Settings(img, { apo: 3 }); + expect(img[OFF + 0x10]).toBe(0x42); + expect(img[OFF + 0x15]).toBe(0x77); + }); + + it('clamps written values to valid ranges', () => { + const img = makeImage(); + writeFt65Settings(img, { apo: 99, tot: 99, rfSquelch: 99 }); + expect(img[OFF + 0x00]).toBe(24); + expect(img[OFF + 0x27]).toBe(30); + expect(img[OFF + 0x1B]).toBe(8); + }); +}); + +// ── round-trip ──────────────────────────────────────────────────────────── + +describe('round-trip', () => { + it('parse β†’ write β†’ parse yields identical result', () => { + const img = makeImage(); + img[OFF + 0x00] = 7; // apo + img[OFF + 0x05] = 1; // beep + img[OFF + 0x04] = 1; // bclo + img[OFF + 0x07] = 0x56; img[OFF + 0x08] = 0x45; img[OFF + 0x09] = 0x32; // cwId 'VE2' + img[OFF + 0x14] = 2; // keyLock + img[OFF + 0x16] = 1; // txLed + img[OFF + 0x23] = 1; // vox + img[OFF + 0x27] = 15; // tot + img[OFF + 0x30] = 1; // usePasswd + img[OFF + 0x31] = 0x39; img[OFF + 0x32] = 0x38; img[OFF + 0x33] = 0x37; img[OFF + 0x34] = 0x36; + + const parsed1 = parseFt65Settings(img)!; + const img2 = makeImage(); + writeFt65Settings(img2, parsed1); + const parsed2 = parseFt65Settings(img2)!; + expect(parsed2).toEqual(parsed1); + }); +}); diff --git a/tests/unit/uv5rMiniSettingsFormat.test.ts b/tests/unit/uv5rMiniSettingsFormat.test.ts new file mode 100644 index 0000000..2a2a4e6 --- /dev/null +++ b/tests/unit/uv5rMiniSettingsFormat.test.ts @@ -0,0 +1,216 @@ +import { describe, it, expect } from 'vitest'; +import { + parseUv5rMiniSettings, + writeUv5rMiniSettings, + UV5RMINI_SETTINGS_OFFSET, +} from '../../src/radios/uv5rmini/settingsFormat'; + +const OFF = UV5RMINI_SETTINGS_OFFSET; // 0x8040 + +function makeImage(): Uint8Array { + return new Uint8Array(OFF + 64); +} + +// ── parseUv5rMiniSettings ───────────────────────────────────────────────── + +describe('parseUv5rMiniSettings', () => { + it('returns null when image is too small', () => { + expect(parseUv5rMiniSettings(new Uint8Array(0))).toBeNull(); + expect(parseUv5rMiniSettings(new Uint8Array(OFF + 10))).toBeNull(); + }); + + it('parses all-zero block to safe defaults', () => { + const s = parseUv5rMiniSettings(makeImage())!; + expect(s.squelch).toBe(0); + expect(s.tot).toBe(0); + expect(s.beep).toBe(0); + expect(s.voicesw).toBe(false); + expect(s.roger).toBe(false); + expect(s.aOrB).toBe(0); + expect(s.chaworkmode).toBe(0); + expect(s.chbworkmode).toBe(0); + }); + + it('parses byte-mapped scalar fields at correct offsets', () => { + const img = makeImage(); + img[OFF + 0] = 4; // squelch + img[OFF + 1] = 1; // savemode + img[OFF + 2] = 5; // vox + img[OFF + 3] = 2; // backlight + img[OFF + 4] = 1; // dualstandby + img[OFF + 5] = 8; // tot + img[OFF + 6] = 1; // beep + img[OFF + 8] = 1; // voice + img[OFF + 9] = 2; // sidetone + img[OFF + 10] = 1; // scanmode + img[OFF + 11] = 3; // pttid + img[OFF + 12] = 5; // pttdly + img[OFF + 13] = 2; // chadistype + img[OFF + 14] = 1; // chbdistype + img[OFF + 17] = 2; // alarmmode + img[OFF + 21] = 3; // rpttailclear + img[OFF + 22] = 4; // rpttaildet + img[OFF + 28] = 1; // powerondistype + img[OFF + 32] = 7; // voxdlytime + img[OFF + 33] = 5; // menuquittime + img[OFF + 40] = 6; // totalarm + img[OFF + 43] = 2; // ctsdcsscantype + img[OFF + 57] = 3; // hangup + const s = parseUv5rMiniSettings(img)!; + expect(s.squelch).toBe(4); + expect(s.savemode).toBe(1); + expect(s.vox).toBe(5); + expect(s.backlight).toBe(2); + expect(s.dualstandby).toBe(1); + expect(s.tot).toBe(8); + expect(s.beep).toBe(1); + expect(s.voice).toBe(1); + expect(s.sidetone).toBe(2); + expect(s.scanmode).toBe(1); + expect(s.pttid).toBe(3); + expect(s.pttdly).toBe(5); + expect(s.chadistype).toBe(2); + expect(s.chbdistype).toBe(1); + expect(s.alarmmode).toBe(2); + expect(s.rpttailclear).toBe(3); + expect(s.rpttaildet).toBe(4); + expect(s.powerondistype).toBe(1); + expect(s.voxdlytime).toBe(7); + expect(s.menuquittime).toBe(5); + expect(s.totalarm).toBe(6); + expect(s.ctsdcsscantype).toBe(2); + expect(s.hangup).toBe(3); + }); + + it('parses boolean flags', () => { + const img = makeImage(); + img[OFF + 7] = 1; // voicesw + img[OFF + 15] = 1; // bcl + img[OFF + 16] = 1; // autolock + img[OFF + 18] = 1; // alarmtone + img[OFF + 20] = 1; // tailclear + img[OFF + 23] = 1; // roger + img[OFF + 25] = 1; // fmenable + img[OFF + 27] = 1; // keylock + img[OFF + 36] = 1; // dispani + img[OFF + 58] = 1; // voxsw + img[OFF + 61] = 1; // inputdtmf + const s = parseUv5rMiniSettings(img)!; + expect(s.voicesw).toBe(true); + expect(s.bcl).toBe(true); + expect(s.autolock).toBe(true); + expect(s.alarmtone).toBe(true); + expect(s.tailclear).toBe(true); + expect(s.roger).toBe(true); + expect(s.fmenable).toBe(true); + expect(s.keylock).toBe(true); + expect(s.dispani).toBe(true); + expect(s.voxsw).toBe(true); + expect(s.inputdtmf).toBe(true); + }); + + it('decodes chaworkmode / chbworkmode from packed nibbles', () => { + const img = makeImage(); + img[OFF + 26] = (1 << 4) | 0; // chaworkmode=Channel(1), chbworkmode=Frequency(0) + const s = parseUv5rMiniSettings(img)!; + expect(s.chaworkmode).toBe(1); + expect(s.chbworkmode).toBe(0); + + const img2 = makeImage(); + img2[OFF + 26] = (0 << 4) | 1; // chaworkmode=Frequency(0), chbworkmode=Channel(1) + const s2 = parseUv5rMiniSettings(img2)!; + expect(s2.chaworkmode).toBe(0); + expect(s2.chbworkmode).toBe(1); + }); + + it('parses aOrB as 0 or 1', () => { + const img = makeImage(); + img[OFF + 24] = 0; + expect(parseUv5rMiniSettings(img)!.aOrB).toBe(0); + img[OFF + 24] = 5; // any non-zero β†’ 1 + expect(parseUv5rMiniSettings(img)!.aOrB).toBe(1); + }); + + it('clamps out-of-range values', () => { + const img = makeImage(); + img[OFF + 0] = 255; // squelch max 5 + img[OFF + 5] = 255; // tot max 12 + img[OFF + 11] = 255; // pttid max 3 + const s = parseUv5rMiniSettings(img)!; + expect(s.squelch).toBe(5); + expect(s.tot).toBe(12); + expect(s.pttid).toBe(3); + }); +}); + +// ── writeUv5rMiniSettings ───────────────────────────────────────────────── + +describe('writeUv5rMiniSettings', () => { + it('no-ops silently on an undersized image', () => { + expect(() => writeUv5rMiniSettings(new Uint8Array(0), { squelch: 3 })).not.toThrow(); + }); + + it('writes scalar fields to correct byte offsets', () => { + const img = makeImage(); + writeUv5rMiniSettings(img, { squelch: 4, tot: 6, beep: 1, sidetone: 2 }); + expect(img[OFF + 0]).toBe(4); + expect(img[OFF + 5]).toBe(6); + expect(img[OFF + 6]).toBe(1); + expect(img[OFF + 9]).toBe(2); + }); + + it('writes boolean fields as 0/1', () => { + const img = makeImage(); + writeUv5rMiniSettings(img, { voicesw: true, roger: false, keylock: true, voxsw: false }); + expect(img[OFF + 7]).toBe(1); + expect(img[OFF + 23]).toBe(0); + expect(img[OFF + 27]).toBe(1); + expect(img[OFF + 58]).toBe(0); + }); + + it('packs chaworkmode / chbworkmode into nibbles of byte 26', () => { + const img = makeImage(); + writeUv5rMiniSettings(img, { chaworkmode: 1, chbworkmode: 0 }); + expect(img[OFF + 26]).toBe((1 << 4) | 0); + }); + + it('preserves the other nibble when only one workmode is set', () => { + const img = makeImage(); + img[OFF + 26] = (1 << 4) | 1; // both Channel + writeUv5rMiniSettings(img, { chaworkmode: 0 }); // change only A + expect(img[OFF + 26]).toBe((0 << 4) | 1); // B stays Channel + }); + + it('does not modify bytes for unspecified fields', () => { + const img = makeImage(); + img[OFF + 10] = 0x55; // scanmode + img[OFF + 17] = 0x77; // alarmmode + writeUv5rMiniSettings(img, { squelch: 2 }); + expect(img[OFF + 10]).toBe(0x55); + expect(img[OFF + 17]).toBe(0x77); + }); +}); + +// ── round-trip ──────────────────────────────────────────────────────────── + +describe('round-trip', () => { + it('parse β†’ write β†’ parse yields identical result', () => { + const img = makeImage(); + img[OFF + 0] = 3; // squelch + img[OFF + 5] = 8; // tot + img[OFF + 6] = 1; // beep + img[OFF + 7] = 1; // voicesw + img[OFF + 9] = 2; // sidetone + img[OFF + 23] = 1; // roger + img[OFF + 24] = 0; // aOrB = A + img[OFF + 26] = (1 << 4) | 1; // both workmode=Channel + img[OFF + 27] = 1; // keylock + img[OFF + 57] = 4; // hangup + + const parsed1 = parseUv5rMiniSettings(img)!; + const img2 = makeImage(); + writeUv5rMiniSettings(img2, parsed1); + const parsed2 = parseUv5rMiniSettings(img2)!; + expect(parsed2).toEqual(parsed1); + }); +}); From e24253b787e1749dfa83311a776a4c85b862d677 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Mon, 15 Jun 2026 15:06:24 -0700 Subject: [PATCH 07/10] More clean up and prep for another radio to be added --- src/components/layout/Toolbar.tsx | 20 ++++++++----- src/components/ui/ReadProgressModal.tsx | 12 +++++++- src/hooks/useRadioConnection.ts | 11 +++++-- src/radios/dm32uv/protocol.ts | 12 ++------ src/radios/dm32uv/structures.ts | 1 + src/radios/ft65/protocol.ts | 4 +-- ...{BaseRadioProtocol.ts => BaseProtocols.ts} | 24 +++++++++++---- src/radios/uv5rmini/protocol.ts | 4 +-- src/types/radio.ts | 30 +++++++++++++++++++ 9 files changed, 88 insertions(+), 30 deletions(-) rename src/radios/shared/{BaseRadioProtocol.ts => BaseProtocols.ts} (52%) diff --git a/src/components/layout/Toolbar.tsx b/src/components/layout/Toolbar.tsx index e0dab61..711093c 100644 --- a/src/components/layout/Toolbar.tsx +++ b/src/components/layout/Toolbar.tsx @@ -261,7 +261,7 @@ export const Toolbar: React.FC = () => { await exportCodeplug(buildCodeplugData()); }; - const handleRead = async () => { + const handleRead = async (forcePortSelection = true) => { window.focus(); try { setConnectionError(null); @@ -269,15 +269,15 @@ export const Toolbar: React.FC = () => { setProgress(0); setProgressMessage('Selecting port...'); setCurrentStep('Selecting port'); - + await readFromRadio((progress, message, step) => { setProgress(progress); setProgressMessage(message); if (step) { setCurrentStep(step); } - }); - + }, { forcePortSelection }); + setConnectionError(null); setLastOperationMode(null); const modelLabel = useRadioStore.getState().radioInfo?.model ?? effectiveModel ?? undefined; @@ -289,8 +289,7 @@ export const Toolbar: React.FC = () => { }, 2000); } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Unknown error'; - const displayError = errorMessage; - setConnectionError(displayError); + setConnectionError(errorMessage); setProgress(0); setProgressMessage('Connection failed'); } @@ -300,10 +299,14 @@ export const Toolbar: React.FC = () => { if (lastOperationMode === 'write') { handleWrite(); } else { - window.location.reload(); + handleRead(false); } }; + const handleChangePort = () => { + handleRead(true); + }; + const handleCloseModal = () => { setConnectionError(null); setLastOperationMode(null); @@ -494,7 +497,7 @@ export const Toolbar: React.FC = () => { )} + {isError && onChangePort && ( + + )} {isError && onRetry && ( )}

diff --git a/src/hooks/useRadioConnection.ts b/src/hooks/useRadioConnection.ts index 51f23ca..aebe1c3 100644 --- a/src/hooks/useRadioConnection.ts +++ b/src/hooks/useRadioConnection.ts @@ -67,7 +67,8 @@ export function useRadioConnection() { const { clearKeys: clearEncryptionKeys } = useEncryptionKeysStore(); const readFromRadio = useCallback(async ( - onProgress?: (progress: number, message: string, step?: string) => void + onProgress?: (progress: number, message: string, step?: string) => void, + { forcePortSelection = true }: { forcePortSelection?: boolean } = {} ) => { setIsConnecting(true); setError(null); @@ -239,8 +240,12 @@ export function useRadioConnection() { const transport = caps?.supportsBle ? (preferredTransport ?? caps?.preferredTransport ?? 'serial') : undefined; - onProgress?.(5, transport === 'ble' ? 'Select BLE device...' : 'Select serial port...', steps[0]); - await protocol.connect({ forcePortSelection: true, ...(transport != null && { transport }) }); + onProgress?.(5, + forcePortSelection + ? (transport === 'ble' ? 'Select BLE device...' : 'Select serial port...') + : 'Reconnecting to radio...', + steps[0]); + await protocol.connect({ forcePortSelection, ...(transport != null && { transport }) }); await performRead(protocol); } catch (err) { diff --git a/src/radios/dm32uv/protocol.ts b/src/radios/dm32uv/protocol.ts index 4eb5c4d..c097d85 100644 --- a/src/radios/dm32uv/protocol.ts +++ b/src/radios/dm32uv/protocol.ts @@ -16,7 +16,8 @@ import { type MemoryBlock, } from './memory'; import { parseChannel, parseZones, parseScanLists, parseContactEntry, encodeChannel, encodeZone, encodeScanList, encodeContactEntry, parseRadioSettings, encodeRadioSettings, encodeDigitalEmergencies, encodeAnalogEmergencies, encodeEncryptionKey, parseQuickMessages, parseDMRRadioIDs, encodeDMRRadioID, parseCalibration, parseRXGroups, parseQuickContacts, encodeQuickContacts, encodeQuickMessages, parseTxContactForChannel, encodeTxContactForChannel, encodeRXGroups } from './structures'; -import type { RadioProtocol, RadioInfo } from '../../types/radio'; +import type { RadioInfo } from '../../types/radio'; +import { BaseDigitalProtocol } from '../shared/BaseProtocols'; import type { Channel, Zone, Contact, RadioSettings, ScanList, DigitalEmergency, DigitalEmergencyConfig, AnalogEmergency, QuickTextMessage, DMRRadioID, Calibration, RXGroup, QuickContact, EncryptionKey } from '../../models'; import type { WebSerialPort, ProtocolDebugData } from './types'; import { METADATA, BLOCK_SIZE, OFFSET, VFRAME, CONNECTION, LIMITS } from './constants'; @@ -40,17 +41,10 @@ import { log } from '../../utils/protocolLogger'; * await protocol.disconnect(); * ``` */ -export class DM32UVProtocol implements RadioProtocol { +export class DM32UVProtocol extends BaseDigitalProtocol { private connection: DM32Connection | null = null; private port: WebSerialPort | null = null; private radioInfo: RadioInfo | null = null; - - /** - * Progress callback for long-running operations - * @param progress Progress percentage (0-100) - * @param message Status message - */ - public onProgress?: (progress: number, message: string) => void; public rawChannelData: Map = new Map(); public rawZoneData: Map = new Map(); public rawContactBlockData: Uint8Array | null = null; diff --git a/src/radios/dm32uv/structures.ts b/src/radios/dm32uv/structures.ts index 56ade63..3f8f913 100644 --- a/src/radios/dm32uv/structures.ts +++ b/src/radios/dm32uv/structures.ts @@ -2284,6 +2284,7 @@ export function parseQuickMessages( const textBytes = messageBytes.slice(0, textEndOffset); const text = new TextDecoder('ascii', { fatal: false }) .decode(textBytes) + .replace(/\x00/g, '') // strip null-byte padding (radio uses 0x00 before the 0xFF terminator) .trim(); // Skip empty messages diff --git a/src/radios/ft65/protocol.ts b/src/radios/ft65/protocol.ts index 3290af1..77addc6 100644 --- a/src/radios/ft65/protocol.ts +++ b/src/radios/ft65/protocol.ts @@ -10,13 +10,13 @@ import type { RadioInfo } from '../../types/radio'; import type { Channel, RadioSettings } from '../../models'; import type { Ft65Settings } from '../../types/ft65Settings'; -import { BaseRadioProtocol } from '../shared/BaseRadioProtocol'; +import { BaseAnalogProtocol } from '../shared/BaseProtocols'; import { FT65Connection, openFT65Port, type FT65SerialPort } from './connection'; import { FT65_NUM_BLOCKS, FT65_BLOCK_SIZE, FT65_MEM_SIZE } from './constants'; import { parseAllChannels, encodeChannel, clearChannelRegions } from './structures'; import { parseFt65Settings, writeFt65Settings } from './settingsFormat'; -export class FT65Protocol extends BaseRadioProtocol { +export class FT65Protocol extends BaseAnalogProtocol { private conn: FT65Connection | null = null; private port: FT65SerialPort | null = null; private cachedImage: Uint8Array | null = null; diff --git a/src/radios/shared/BaseRadioProtocol.ts b/src/radios/shared/BaseProtocols.ts similarity index 52% rename from src/radios/shared/BaseRadioProtocol.ts rename to src/radios/shared/BaseProtocols.ts index d052bf2..0e125db 100644 --- a/src/radios/shared/BaseRadioProtocol.ts +++ b/src/radios/shared/BaseProtocols.ts @@ -1,14 +1,18 @@ /** - * Default no-op implementations for optional RadioProtocol methods. - * New protocols extend this and only override what they actually support. - * The six required methods (connect, disconnect, isConnected, getRadioInfo, - * readChannels, writeChannels) remain abstract. + * Base classes for the radio protocol hierarchy. + * + * BaseAnalogProtocol β€” channels + settings only. Extend this for analog radios (FT-65, UV5R-Mini). + * BaseDigitalProtocol β€” marker subclass for digital radios (DM-32UV, etc.). Extend this for any + * radio that supports zones, contacts, scan lists, RX groups, encryption, etc. + * + * useRadioConnection.ts uses `instanceof BaseDigitalProtocol` to gate DMR-specific reads + * instead of inspecting capability flags or using `as any` casts. */ import type { RadioProtocol, RadioInfo } from '../../types/radio'; import type { Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID } from '../../models'; -export abstract class BaseRadioProtocol implements RadioProtocol { +export abstract class BaseAnalogProtocol implements RadioProtocol { public onProgress?: (progress: number, message: string) => void; abstract connect(portOrOptions?: string | { forcePortSelection?: boolean; transport?: string }): Promise; @@ -18,6 +22,7 @@ export abstract class BaseRadioProtocol implements RadioProtocol { abstract readChannels(): Promise; abstract writeChannels(channels: Channel[]): Promise; + // No-op stubs satisfy RadioProtocol for digital features analog radios don't support. async readZones(): Promise { return []; } async writeZones(_zones: Zone[]): Promise {} async readScanLists(): Promise { return []; } @@ -28,3 +33,12 @@ export abstract class BaseRadioProtocol implements RadioProtocol { async readRadioSettings(): Promise { return null; } async writeRadioSettings(_settings: RadioSettings, _options?: { changedFields?: string[] }): Promise {} } + +/** + * Marker base class for digital radios. Extend this instead of BaseAnalogProtocol when the + * radio supports zones, contacts, scan lists, RX groups, encryption keys, calibration, etc. + * + * The empty body is intentional β€” the only purpose right now is to allow + * `instanceof BaseDigitalProtocol` checks in useRadioConnection.ts. + */ +export abstract class BaseDigitalProtocol extends BaseAnalogProtocol {} diff --git a/src/radios/uv5rmini/protocol.ts b/src/radios/uv5rmini/protocol.ts index 986ef7d..677c8d1 100644 --- a/src/radios/uv5rmini/protocol.ts +++ b/src/radios/uv5rmini/protocol.ts @@ -5,7 +5,7 @@ import type { RadioInfo } from '../../types/radio'; import type { Channel, RadioSettings } from '../../models'; import type { Uv5rMiniSettings } from '../../types/uv5rMiniSettings'; -import { BaseRadioProtocol } from '../shared/BaseRadioProtocol'; +import { BaseAnalogProtocol } from '../shared/BaseProtocols'; import { UV5RMiniSerialConnection, openUV5RMiniPort } from './serialConnection'; import { UV5RMiniBleConnection, requestUV5RMiniBleDevice } from './bleConnection'; import { @@ -30,7 +30,7 @@ type ConnectionLike = { disconnect(): Promise; }; -export class UV5RMiniProtocol extends BaseRadioProtocol { +export class UV5RMiniProtocol extends BaseAnalogProtocol { private connection: ConnectionLike | null = null; private port: import('./serialConnection').UV5RMiniSerialPort | null = null; /** Cached image from last readChannels (used by readRadioSettings and getFirmwareFromCache). */ diff --git a/src/types/radio.ts b/src/types/radio.ts index e52d6ef..d6f955c 100644 --- a/src/types/radio.ts +++ b/src/types/radio.ts @@ -3,6 +3,36 @@ import type { Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID } from // Re-export RadioSettings for use in stores export type { RadioSettings } from '../models'; +/** + * Minimal interface shared by all radios: channels + settings. + * Analog radios (FT-65, UV5R-Mini) implement only this surface. + */ +export interface AnalogRadioProtocol { + connect(portOrOptions?: string | { forcePortSelection?: boolean; transport?: string }): Promise; + disconnect(): Promise; + isConnected(): boolean; + getRadioInfo(): Promise; + readChannels(): Promise; + writeChannels(channels: Channel[]): Promise; + readRadioSettings(): Promise; + writeRadioSettings(settings: RadioSettings, options?: { changedFields?: string[] }): Promise; + onProgress?: (progress: number, message: string) => void; +} + +/** + * Full interface for digital radios: zones, contacts, scan lists, DMR IDs, etc. + * Digital radios (DM-32UV and future) implement this. + */ +export interface DigitalRadioProtocol extends AnalogRadioProtocol { + readZones(): Promise; + writeZones(zones: Zone[]): Promise; + readScanLists(): Promise; + readDMRRadioIDs(): Promise; + writeDMRRadioIDs(radioIds: DMRRadioID[]): Promise; + readContacts(): Promise; + writeContacts(contacts: Contact[]): Promise; +} + export interface RadioInfo { model: string; // "DP570UV" firmware: string; // "DM32.01.01.046" From 954c089185b09b677a45d4184f4286b16ba4d9f2 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Mon, 15 Jun 2026 16:15:22 -0700 Subject: [PATCH 08/10] Remove cast --- src/hooks/useRadioConnection.ts | 264 ++++++++++++++++---------------- src/radios/dm32uv/protocol.ts | 4 +- src/types/radio.ts | 91 ++++++++--- 3 files changed, 206 insertions(+), 153 deletions(-) diff --git a/src/hooks/useRadioConnection.ts b/src/hooks/useRadioConnection.ts index aebe1c3..0c7b906 100644 --- a/src/hooks/useRadioConnection.ts +++ b/src/hooks/useRadioConnection.ts @@ -1,6 +1,7 @@ import { useState, useCallback } from 'react'; import type { RadioProtocol } from '../types/radio'; import { createDefaultProtocol, createProtocolForModel } from '../radios'; +import { DM32UVProtocol } from '../radios/dm32uv/protocol'; import { getCapabilitiesForModel } from '../radios/capabilities'; import type { Contact } from '../models/Contact'; import { useRadioStore } from '../store/radioStore'; @@ -132,25 +133,30 @@ export function useRadioConnection() { // on first connect, which would cause bulk read to be skipped if we used it here. const caps = getCapabilitiesForModel(info.model ?? effectiveModel); - if (caps?.supportsBulkRead && typeof (proto as any).bulkReadRequiredBlocks === 'function') { + // Narrow to DM32UVProtocol once; all DM32-specific calls go through this variable. + const dm32 = proto instanceof DM32UVProtocol ? proto : null; + + if (caps?.supportsBulkRead && dm32) { onProgress?.(15, 'Reading all memory blocks...', steps[3]); - await (proto as any).bulkReadRequiredBlocks(); + await dm32.bulkReadRequiredBlocks(); } onProgress?.(20, 'Parsing channels...', steps[4]); const channels = await proto.readChannels(); setChannels(channels); - // Enrich radioInfo with firmware from cached image (UV5R-Mini path) - if (typeof (proto as any).getFirmwareFromCache === 'function') { - const fw = (proto as any).getFirmwareFromCache(); - if (fw) { - const current = useRadioStore.getState().radioInfo; - if (current) setRadioInfo({ ...current, firmware: fw }); - } + + // Enrich radioInfo with firmware from cached image (UV5R-Mini and DM-32UV) + const fw = proto.getFirmwareFromCache?.(); + if (fw) { + const current = useRadioStore.getState().radioInfo; + if (current) setRadioInfo({ ...current, firmware: fw }); + } + + if (dm32) { + setRawChannelData(dm32.rawChannelData); + setBlockMetadata(new Map(dm32.blockMetadata)); + setBlockData(new Map(dm32.blockData)); } - if ((proto as any).rawChannelData) setRawChannelData((proto as any).rawChannelData); - if ((proto as any).allBlockMetadata) setBlockMetadata(new Map((proto as any).allBlockMetadata)); - if ((proto as any).allBlockData) setBlockData(new Map((proto as any).allBlockData)); // Suppress per-item progress messages during config parsing; only surface the percentage. const savedProgress = proto.onProgress; @@ -160,46 +166,54 @@ export function useRadioConnection() { onProgress?.(70, 'Parsing configuration from cache...', steps[5]); - const zones = await proto.readZones(); - setZones(zones); - if ((proto as any).rawZoneData) setRawZoneData((proto as any).rawZoneData); + if (caps?.supportsZones) { + const zones = await proto.readZones(); + setZones(zones); + if (dm32) setRawZoneData(dm32.rawZoneData); + } - const scanLists = await proto.readScanLists(); - setScanLists(scanLists); - if ((proto as any).rawScanListData) setRawScanListData((proto as any).rawScanListData); - if ((proto as any).blockData) setBlockData((proto as any).blockData); + if (caps?.supportsScanLists) { + const scanLists = await proto.readScanLists(); + setScanLists(scanLists); + if (dm32) { + setRawScanListData(dm32.rawScanListData); + setBlockData(dm32.blockData); + } + } - try { - const messages = await (proto as any).readQuickMessages(); - setMessages(messages); - const rawMsgMap = new Map(); - for (const [i, raw] of (proto as any).rawMessageData.entries()) rawMsgMap.set(i, raw); - setRawMessageData(rawMsgMap); - } catch { console.warn('Could not read Quick Messages'); } + if (dm32) { + try { + const messages = await dm32.readQuickMessages(); + setMessages(messages); + const rawMsgMap = new Map(); + for (const [i, raw] of dm32.rawMessageData.entries()) rawMsgMap.set(i, raw); + setRawMessageData(rawMsgMap); + } catch { console.warn('Could not read Quick Messages'); } - try { - const radioIds = await proto.readDMRRadioIDs(); - setRadioIds(radioIds); - const rawIdMap = new Map(); - for (const [i, raw] of (proto as any).rawDMRRadioIDData.entries()) rawIdMap.set(i, raw); - setRawRadioIdData(rawIdMap); - } catch { console.warn('Could not read DMR Radio IDs'); } + try { + const radioIds = await dm32.readDMRRadioIDs(); + setRadioIds(radioIds); + const rawIdMap = new Map(); + for (const [i, raw] of dm32.rawDMRRadioIDData.entries()) rawIdMap.set(i, raw); + setRawRadioIdData(rawIdMap); + } catch { console.warn('Could not read DMR Radio IDs'); } - try { - setCalibration(await (proto as any).readCalibration()); - } catch { console.warn('Could not read calibration data'); } + try { + setCalibration(await dm32.readCalibration()); + } catch { console.warn('Could not read calibration data'); } - try { - const rxGroups = await (proto as any).readRXGroups(); - setRXGroups(rxGroups); - const rawGroupMap = new Map(); - for (const [i, raw] of (proto as any).rawRXGroupData.entries()) rawGroupMap.set(i, raw); - setRawGroupData(rawGroupMap); - } catch { console.warn('Could not read RX Groups'); } + try { + const rxGroups = await dm32.readRXGroups(); + setRXGroups(rxGroups); + const rawGroupMap = new Map(); + for (const [i, raw] of dm32.rawRXGroupData.entries()) rawGroupMap.set(i, raw); + setRawGroupData(rawGroupMap); + } catch { console.warn('Could not read RX Groups'); } - try { - setQuickContacts(await (proto as any).readQuickContacts()); - } catch { console.warn('Could not read Talk Groups'); } + try { + setQuickContacts(await dm32.readQuickContacts()); + } catch { console.warn('Could not read Talk Groups'); } + } try { onProgress?.(90, 'Reading configuration...', 'Reading configuration'); @@ -207,23 +221,25 @@ export function useRadioConnection() { try { const radioSettings = await proto.readRadioSettings(); if (radioSettings) setRadioSettings(radioSettings); - if ((proto as any).rawRadioSettingsData) setRawRadioSettingsData((proto as any).rawRadioSettingsData); + if (dm32?.rawRadioSettingsData) setRawRadioSettingsData(dm32.rawRadioSettingsData); } catch { console.warn('Could not read Radio Settings'); } - try { - const digitalEmergency = await (proto as any).readDigitalEmergencies(); - if (digitalEmergency) { - setDigitalEmergencies(digitalEmergency.systems); - setDigitalEmergencyConfig(digitalEmergency.config); - } - } catch { console.warn('Could not read Digital Emergency Systems'); } - - try { - const analogEmergencies = await (proto as any).readAnalogEmergencies(); - if (analogEmergencies) setAnalogEmergencies(analogEmergencies); - } catch { console.warn('Could not read Analog Emergency Systems'); } - - if ((proto as any).blockData) setBlockData((proto as any).blockData); + if (dm32) { + try { + const digitalEmergency = await dm32.readDigitalEmergencies(); + if (digitalEmergency) { + setDigitalEmergencies(digitalEmergency.systems); + setDigitalEmergencyConfig(digitalEmergency.config); + } + } catch { console.warn('Could not read Digital Emergency Systems'); } + + try { + const analogEmergencies = await dm32.readAnalogEmergencies(); + if (analogEmergencies) setAnalogEmergencies(analogEmergencies); + } catch { console.warn('Could not read Analog Emergency Systems'); } + + setBlockData(dm32.blockData); + } } catch { console.warn('Error reading configuration blocks'); } proto.onProgress = savedProgress; @@ -323,13 +339,12 @@ export function useRadioConnection() { const contacts = await protocol.readContacts(); setContacts(contacts); - // Store first contact block for debugging - if ((protocol as any).rawContactBlockData) { - setRawContactBlockData((protocol as any).rawContactBlockData, (protocol as any).rawContactBlockAddress || null); + const dm32 = protocol instanceof DM32UVProtocol ? protocol : null; + if (dm32?.rawContactBlockData) { + setRawContactBlockData(dm32.rawContactBlockData, dm32.rawContactBlockAddress); } - // Store all contact blocks for diagnostics - if ((protocol as any).rawContactBlocks) { - setRawContactBlocks((protocol as any).rawContactBlocks); + if (dm32?.rawContactBlocks) { + setRawContactBlocks(dm32.rawContactBlocks); } onProgress?.(100, `Successfully read ${contacts.length} contacts`); @@ -370,7 +385,9 @@ export function useRadioConnection() { setConnected(true); } onProgress?.(10, 'Reading boot image from radio...'); - const raw = await (protocol as any).readBootImage(); + const dm32 = protocol instanceof DM32UVProtocol ? protocol : null; + if (!dm32) throw new Error('Boot image is only supported on DM-32UV'); + const raw = await dm32.readBootImage(); setBootImageRaw(raw); const parsed = parseBootImageHeader(raw); setBootImageDescription(parsed.description || null); @@ -413,7 +430,9 @@ export function useRadioConnection() { setConnected(true); } onProgress?.(10, 'Writing boot image to radio...'); - await (protocol as any).writeBootImage(data); + const dm32 = protocol instanceof DM32UVProtocol ? protocol : null; + if (!dm32) throw new Error('Boot image is only supported on DM-32UV'); + await dm32.writeBootImage(data); setBootImageRaw(data); const parsed = parseBootImageHeader(data); setBootImageDescription(parsed.description || null); @@ -542,16 +561,15 @@ export function useRadioConnection() { // Use protocol for connected radio (write path) protocol = createProtocolForModel(radioInfo?.model ?? '') ?? createDefaultProtocol(); - + const dm32 = protocol instanceof DM32UVProtocol ? protocol : null; + // Restore cache from store if available (DM-32 bulk read path) - const storeState = useRadioStore.getState(); - const storeBlockData = storeState.blockData; - const storeBlockMetadata = storeState.blockMetadata; - if (typeof (protocol as any).restoreCacheFromStore === 'function') { + if (dm32) { + const storeState = useRadioStore.getState(); + const storeBlockData = storeState.blockData; + const storeBlockMetadata = storeState.blockMetadata; if (storeBlockData && storeBlockData.size > 0 && storeBlockMetadata && storeBlockMetadata.size > 0) { - const dataCopy = new Map(storeBlockData); - const metadataCopy = new Map(storeBlockMetadata); - (protocol as any).restoreCacheFromStore(dataCopy, metadataCopy); + dm32.restoreCacheFromStore(new Map(storeBlockData), new Map(storeBlockMetadata)); } else { console.warn('[Connection] Store cache is empty - will need to read all blocks from radio'); } @@ -576,83 +594,63 @@ export function useRadioConnection() { setRadioInfo(connectedRadioInfo); setConnected(true); - // Step 4: Write channels (and zones/scan lists for DM-32; UV5R-Mini uses writeChannels only) - if (typeof (protocol as any).writeAllData === 'function') { + // Step 4: Write channels (and zones/scan lists for DM-32; analog radios use writeChannels only) + if (dm32) { onProgress?.(20, 'Writing channels, zones, and scan lists to radio...', steps[4]); - await (protocol as any).writeAllData(validChannels, filteredZones, filteredScanLists); - } else if (typeof protocol.writeChannels === 'function') { + await dm32.writeAllData(validChannels, filteredZones, filteredScanLists); + } else { onProgress?.(20, 'Writing channels to radio...', steps[4]); await protocol.writeChannels(validChannels); - } else { - throw new Error('Protocol does not support writing channels'); } - // Step 5: Write Talk Groups if they have been loaded (DM-32 only) - if (typeof (protocol as any).writeQuickContacts === 'function') { - const quickContactsStore = useQuickContactsStore.getState(); - const quickContacts = quickContactsStore.contacts; + if (dm32) { + // Step 5: Talk Groups + const quickContacts = useQuickContactsStore.getState().contacts; if (quickContacts && quickContacts.length > 0) { onProgress?.(90, `Writing ${quickContacts.length} talk group(s) to radio...`, steps[4]); - await (protocol as any).writeQuickContacts(quickContacts); + await dm32.writeQuickContacts(quickContacts); } - } - // Step 5.5: Write Quick Messages if they have been loaded (DM-32 only) - if (typeof (protocol as any).writeQuickMessages === 'function') { - const quickMessagesStore = useQuickMessagesStore.getState(); - const quickMessages = quickMessagesStore.messages; + // Step 5.5: Quick Messages + const quickMessages = useQuickMessagesStore.getState().messages; if (quickMessages && quickMessages.length > 0) { onProgress?.(92, `Writing ${quickMessages.length} quick message(s) to radio...`, steps[4]); - await (protocol as any).writeQuickMessages(quickMessages); + await dm32.writeQuickMessages(quickMessages); } - } - // Step 5.6: Write RX Groups if they have been loaded (DM-32 only) - if (typeof (protocol as any).writeRXGroups === 'function') { + // Step 5.6: RX Groups const rxGroupsStore = useRXGroupsStore.getState(); - const rxGroups = rxGroupsStore.groups; - if (rxGroups && rxGroups.length > 0 && rxGroupsStore.groupsLoaded) { - onProgress?.(93, `Writing ${rxGroups.length} RX group(s) to radio...`, steps[4]); - await (protocol as any).writeRXGroups(rxGroups); + if (rxGroupsStore.groups.length > 0 && rxGroupsStore.groupsLoaded) { + onProgress?.(93, `Writing ${rxGroupsStore.groups.length} RX group(s) to radio...`, steps[4]); + await dm32.writeRXGroups(rxGroupsStore.groups); } - } - // Step 5.7: Write DMR Radio IDs if they have been loaded (DM-32 only) - const dmrRadioIDsStore = useDMRRadioIDsStore.getState(); - const dmrRadioIds = dmrRadioIDsStore.radioIds; - if (dmrRadioIds && dmrRadioIds.length > 0) { - onProgress?.(94, `Writing ${dmrRadioIds.length} DMR Radio ID(s) to radio...`, steps[4]); - await protocol.writeDMRRadioIDs(dmrRadioIds); - } + // Step 5.7: DMR Radio IDs + const dmrRadioIDsStore = useDMRRadioIDsStore.getState(); + if (dmrRadioIDsStore.radioIds.length > 0) { + onProgress?.(94, `Writing ${dmrRadioIDsStore.radioIds.length} DMR Radio ID(s) to radio...`, steps[4]); + await dm32.writeDMRRadioIDs(dmrRadioIDsStore.radioIds); + } - // Step 5.8: Write Encryption Keys if they have been loaded (DM-32 only) - if (typeof (protocol as any).writeEncryptionKeys === 'function') { + // Step 5.8: Encryption Keys const encryptionKeysStore = useEncryptionKeysStore.getState(); - const encryptionKeys = encryptionKeysStore.keys; - if (encryptionKeys && encryptionKeys.length > 0 && encryptionKeysStore.keysLoaded) { - onProgress?.(94, `Writing ${encryptionKeys.length} encryption key(s) to radio...`, steps[4]); - await (protocol as any).writeEncryptionKeys(encryptionKeys); + if (encryptionKeysStore.keys.length > 0 && encryptionKeysStore.keysLoaded) { + onProgress?.(94, `Writing ${encryptionKeysStore.keys.length} encryption key(s) to radio...`, steps[4]); + await dm32.writeEncryptionKeys(encryptionKeysStore.keys); } - } - // Step 5.9: Write Digital Emergency Systems if they have been loaded (DM-32 only) - if (typeof (protocol as any).writeDigitalEmergencies === 'function') { + // Step 5.9: Digital Emergency Systems const digitalEmergencyStore = useDigitalEmergencyStore.getState(); - const digitalEmergencySystems = digitalEmergencyStore.systems; - const digitalEmergencyConfig = digitalEmergencyStore.config; - if (digitalEmergencySystems.length > 0 && digitalEmergencyConfig) { - onProgress?.(94, `Writing ${digitalEmergencySystems.length} digital emergency system(s) to radio...`, steps[4]); - await (protocol as any).writeDigitalEmergencies(digitalEmergencySystems, digitalEmergencyConfig); + if (digitalEmergencyStore.systems.length > 0 && digitalEmergencyStore.config) { + onProgress?.(94, `Writing ${digitalEmergencyStore.systems.length} digital emergency system(s) to radio...`, steps[4]); + await dm32.writeDigitalEmergencies(digitalEmergencyStore.systems, digitalEmergencyStore.config); } - } - // Step 5.10: Write Analog Emergency Systems if they have been loaded (DM-32 only) - if (typeof (protocol as any).writeAnalogEmergencies === 'function') { + // Step 5.10: Analog Emergency Systems const analogEmergencyStore = useAnalogEmergencyStore.getState(); - const analogEmergencySystems = analogEmergencyStore.systems; - if (analogEmergencySystems.length > 0) { - onProgress?.(94, `Writing ${analogEmergencySystems.length} analog emergency system(s) to radio...`, steps[4]); - await (protocol as any).writeAnalogEmergencies(analogEmergencySystems); + if (analogEmergencyStore.systems.length > 0) { + onProgress?.(94, `Writing ${analogEmergencyStore.systems.length} analog emergency system(s) to radio...`, steps[4]); + await dm32.writeAnalogEmergencies(analogEmergencyStore.systems); } } @@ -670,8 +668,10 @@ export function useRadioConnection() { } // Store write block data and zone comparison data for debug export (DM-32 only) - if ((protocol as any).writeBlockData != null) setWriteBlockData((protocol as any).writeBlockData); - if ((protocol as any).zoneComparisonData != null) setZoneComparisonData((protocol as any).zoneComparisonData); + if (dm32) { + setWriteBlockData(dm32.writeBlockData); + setZoneComparisonData(dm32.zoneComparisonData); + } // Step 6: Disconnect await protocol.disconnect(); diff --git a/src/radios/dm32uv/protocol.ts b/src/radios/dm32uv/protocol.ts index c097d85..d2cf59b 100644 --- a/src/radios/dm32uv/protocol.ts +++ b/src/radios/dm32uv/protocol.ts @@ -16,7 +16,7 @@ import { type MemoryBlock, } from './memory'; import { parseChannel, parseZones, parseScanLists, parseContactEntry, encodeChannel, encodeZone, encodeScanList, encodeContactEntry, parseRadioSettings, encodeRadioSettings, encodeDigitalEmergencies, encodeAnalogEmergencies, encodeEncryptionKey, parseQuickMessages, parseDMRRadioIDs, encodeDMRRadioID, parseCalibration, parseRXGroups, parseQuickContacts, encodeQuickContacts, encodeQuickMessages, parseTxContactForChannel, encodeTxContactForChannel, encodeRXGroups } from './structures'; -import type { RadioInfo } from '../../types/radio'; +import type { RadioInfo, DM32Protocol } from '../../types/radio'; import { BaseDigitalProtocol } from '../shared/BaseProtocols'; import type { Channel, Zone, Contact, RadioSettings, ScanList, DigitalEmergency, DigitalEmergencyConfig, AnalogEmergency, QuickTextMessage, DMRRadioID, Calibration, RXGroup, QuickContact, EncryptionKey } from '../../models'; import type { WebSerialPort, ProtocolDebugData } from './types'; @@ -41,7 +41,7 @@ import { log } from '../../utils/protocolLogger'; * await protocol.disconnect(); * ``` */ -export class DM32UVProtocol extends BaseDigitalProtocol { +export class DM32UVProtocol extends BaseDigitalProtocol implements DM32Protocol { private connection: DM32Connection | null = null; private port: WebSerialPort | null = null; private radioInfo: RadioInfo | null = null; diff --git a/src/types/radio.ts b/src/types/radio.ts index d6f955c..d68266d 100644 --- a/src/types/radio.ts +++ b/src/types/radio.ts @@ -1,4 +1,8 @@ -import type { Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID } from '../models'; +import type { + Channel, Zone, Contact, RadioSettings, ScanList, DMRRadioID, + QuickTextMessage, Calibration, RXGroup, QuickContact, EncryptionKey, + DigitalEmergency, DigitalEmergencyConfig, AnalogEmergency, +} from '../models'; // Re-export RadioSettings for use in stores export type { RadioSettings } from '../models'; @@ -17,6 +21,8 @@ export interface AnalogRadioProtocol { readRadioSettings(): Promise; writeRadioSettings(settings: RadioSettings, options?: { changedFields?: string[] }): Promise; onProgress?: (progress: number, message: string) => void; + /** Extract firmware version from the cached clone image. UV5R-Mini and DM-32UV implement this. */ + getFirmwareFromCache?(): string | null; } /** @@ -33,6 +39,70 @@ export interface DigitalRadioProtocol extends AnalogRadioProtocol { writeContacts(contacts: Contact[]): Promise; } +/** + * Full public API of the DM-32UV protocol, including DM32-specific operations + * not present in the base digital radio interface. + * + * DM32UVProtocol implements this. A future DM32-compatible radio should also + * implement this if it shares the same on-air structures. + */ +export interface DM32Protocol extends DigitalRadioProtocol { + // Bulk memory read (DM-32 reads all 4 KB blocks up front) + bulkReadRequiredBlocks(): Promise; + + // Write-path cache restore (avoids re-reading from radio before write) + restoreCacheFromStore( + blockData: Map, + blockMetadata: Map + ): void; + + // Boot image + readBootImage(): Promise; + writeBootImage(data: Uint8Array): Promise; + + // Quick text messages + readQuickMessages(): Promise; + writeQuickMessages(messages: QuickTextMessage[]): Promise; + + // Calibration (read-only) + readCalibration(): Promise; + + // RX groups + readRXGroups(): Promise; + writeRXGroups(groups: RXGroup[]): Promise; + + // Quick contacts (talk groups in the DM-32 sense) + readQuickContacts(): Promise; + writeQuickContacts(contacts: QuickContact[]): Promise; + + // Single-session write for channels + zones + scan lists + writeAllData(channels: Channel[], zones: Zone[], scanLists: ScanList[]): Promise; + + // Encryption keys + writeEncryptionKeys(keys: EncryptionKey[]): Promise; + + // Emergency systems + readDigitalEmergencies(): Promise<{ systems: DigitalEmergency[]; config: DigitalEmergencyConfig } | null>; + writeDigitalEmergencies(systems: DigitalEmergency[], config: DigitalEmergencyConfig): Promise; + readAnalogEmergencies(): Promise; + writeAnalogEmergencies(systems: AnalogEmergency[]): Promise; + + // Raw/debug data (set after each read for the Diagnostics tab) + rawChannelData: Map; + rawZoneData: Map; + rawContactBlockData: Uint8Array | null; + rawContactBlockAddress: number | null; + rawContactBlocks: Map; + rawScanListData: Map; + rawRadioSettingsData: Uint8Array | null; + rawMessageData: Map; + rawDMRRadioIDData: Map; + rawRXGroupData: Map; + blockData: Map; + blockMetadata: Map; + writeBlockData: Map; +} + export interface RadioInfo { model: string; // "DP570UV" firmware: string; // "DM32.01.01.046" @@ -57,38 +127,21 @@ export interface RadioInfo { * linear addresses) and decode/encode are implementation details of each radio. */ export interface RadioProtocol { - // Connection - // port: legacy for protocols that take a path; options: e.g. { forcePortSelection } for Web Serial connect(portOrOptions?: string | { forcePortSelection?: boolean }): Promise; disconnect(): Promise; isConnected(): boolean; - - // Radio Info getRadioInfo(): Promise; - - // Channels readChannels(): Promise; writeChannels(channels: Channel[]): Promise; - - // Zones readZones(): Promise; writeZones(zones: Zone[]): Promise; - - // Scan Lists readScanLists(): Promise; - - // DMR Radio IDs readDMRRadioIDs(): Promise; writeDMRRadioIDs(radioIds: DMRRadioID[]): Promise; - - // Contacts readContacts(): Promise; writeContacts(contacts: Contact[]): Promise; - - // Settings readRadioSettings(): Promise; writeRadioSettings(settings: RadioSettings, options?: { changedFields?: string[] }): Promise; - - // Progress callbacks onProgress?: (progress: number, message: string) => void; + getFirmwareFromCache?(): string | null; } From 09f78d5f3a182a99dbab31e2e8beaf9a1b844a83 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Mon, 15 Jun 2026 21:43:44 -0700 Subject: [PATCH 09/10] Diag panel fix --- src/radios/dm32uv/protocol.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/radios/dm32uv/protocol.ts b/src/radios/dm32uv/protocol.ts index d2cf59b..f2ff6b6 100644 --- a/src/radios/dm32uv/protocol.ts +++ b/src/radios/dm32uv/protocol.ts @@ -489,8 +489,8 @@ export class DM32UVProtocol extends BaseDigitalProtocol implements DM32Protocol blockData: this.blockData, writeBlockData: this.writeBlockData, zoneComparisonData: this.zoneComparisonData, - allBlockMetadata: (this as any).allBlockMetadata || new Map(), - allBlockData: (this as any).allBlockData || new Map(), + allBlockMetadata: this.blockMetadata, + allBlockData: new Map(this.blockData), cachedBlockData: this.cachedBlockData, discoveredBlocks: this.discoveredBlocks, }; @@ -554,8 +554,7 @@ export class DM32UVProtocol extends BaseDigitalProtocol implements DM32Protocol type: block.type, }); } - (this as any).allBlockMetadata = blockMetadataMap; - // Note: allBlockData will be set after all blocks are read (see end of bulkReadRequiredBlocks) + this.blockMetadata = blockMetadataMap; // Step 2: Determine which blocks we need to read const blocksToRead: MemoryBlock[] = []; @@ -753,10 +752,7 @@ export class DM32UVProtocol extends BaseDigitalProtocol implements DM32Protocol log.debug('All blocks are now in cache - parsing can proceed without additional radio reads', 'Protocol'); - // Update allBlockData after all blocks are read (for store persistence) - // This is critical - the store needs this data for cache restoration during writes - (this as any).allBlockData = new Map(this.blockData); // Create a new Map to ensure it's a copy - log.info(`Set allBlockData with ${this.blockData.size} blocks for store persistence (allBlockMetadata has ${(this as any).allBlockMetadata?.size || 0} entries)`, 'Protocol'); + log.info(`All blocks read: ${this.blockData.size} blocks, ${this.blockMetadata.size} metadata entries`, 'Protocol'); // Verify critical blocks are in allBlockData const tx42Addr = this.discoveredBlocks.find(b => b.metadata === METADATA.TX_CONTACT_LOW)?.address; From 6e3d0eb268edd80658b0974525aad67724141f83 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Mon, 15 Jun 2026 21:53:13 -0700 Subject: [PATCH 10/10] One more clean up for data dup --- src/hooks/useRadioConnection.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/hooks/useRadioConnection.ts b/src/hooks/useRadioConnection.ts index 0c7b906..7914c44 100644 --- a/src/hooks/useRadioConnection.ts +++ b/src/hooks/useRadioConnection.ts @@ -175,10 +175,7 @@ export function useRadioConnection() { if (caps?.supportsScanLists) { const scanLists = await proto.readScanLists(); setScanLists(scanLists); - if (dm32) { - setRawScanListData(dm32.rawScanListData); - setBlockData(dm32.blockData); - } + if (dm32) setRawScanListData(dm32.rawScanListData); } if (dm32) { @@ -237,8 +234,6 @@ export function useRadioConnection() { const analogEmergencies = await dm32.readAnalogEmergencies(); if (analogEmergencies) setAnalogEmergencies(analogEmergencies); } catch { console.warn('Could not read Analog Emergency Systems'); } - - setBlockData(dm32.blockData); } } catch { console.warn('Error reading configuration blocks'); }