fix(yaesu): mic gain scale, 200 W models, and a NAR button that did nothing
Reported from a real FTDX101, and each one is a different kind of wrong. MIC GAIN was read and written through the 0-255 scale the audio gains use, but the CAT reference gives MG000-100. A rig set to 80 therefore showed 38, and moving the slider sent 204 — outside the range the radio accepts, so it refused the command and the slider sprang back. That snap-back was the symptom; the scale was the cause. POWER was capped at 100 W by the slider, not by the radio. There is no CAT command for 'how much power can you make', so the ceiling comes from the model name, with the rig believed if it ever reports more than the table expects — it has just proved what it can do. NAR is the narrow IF filter, and on a rig that does not implement NA the button showed a state the radio never gave and did nothing when pressed, which reads as a fault in the radio. Now shown only when the rig answers, with a tooltip saying what it is. Also: the frequency readout steps the Hz digits under the wheel, not just the kHz ones. Zero-beating a CW signal is a few tens of Hz and it was the one move the display would not make. And the split chaser is CW-only — its marker comes from a CW skimmer.
This commit is contained in:
@@ -18,7 +18,8 @@ type YaesuState = {
|
||||
s_meter: number; power_meter: number; swr_meter: number;
|
||||
rf_power: number; mic_gain: number; af_gain: number; rf_gain: number; squelch: number;
|
||||
agc?: string; preamp: number; att: number; antenna: number;
|
||||
nb: boolean; nr: boolean; nr_level: number; narrow: boolean; vox: boolean;
|
||||
nb: boolean; nr: boolean; nr_level: number; narrow: boolean; narrow_supported?: boolean; vox: boolean;
|
||||
max_power?: number;
|
||||
split_tx_hz?: number; key_speed?: number; break_in?: boolean; swr?: number; power_w?: number;
|
||||
};
|
||||
|
||||
@@ -445,7 +446,13 @@ export function YaesuPanel({ onReportRST, onKeySpeed }: {
|
||||
<div className="flex items-center gap-2 flex-wrap">
|
||||
<Chip on={view.nb} onClick={() => push('nb', !view.nb, () => SetYaesuNB(!view.nb))} label="NB" />
|
||||
<Chip on={view.nr} onClick={() => push('nr', !view.nr, () => SetYaesuNR(!view.nr))} label="DNR" />
|
||||
<Chip on={view.narrow} onClick={() => push('narrow', !view.narrow, () => SetYaesuNarrow(!view.narrow))} label="NAR" />
|
||||
{/* NAR is the narrow IF filter. Shown only when the rig ANSWERED NA:
|
||||
a button that does nothing when pressed reads as a fault in the
|
||||
radio, which is how it was reported from an FTDX101. */}
|
||||
{view.narrow_supported && (
|
||||
<Chip on={view.narrow} onClick={() => push('narrow', !view.narrow, () => SetYaesuNarrow(!view.narrow))}
|
||||
label="NAR" title={t('yaesu.narrowHint')} />
|
||||
)}
|
||||
</div>
|
||||
<Row label="DNR">
|
||||
{/* 1-15 on the rig, shown as-is rather than rescaled to a percentage:
|
||||
@@ -462,7 +469,7 @@ export function YaesuPanel({ onReportRST, onKeySpeed }: {
|
||||
<Row label="PWR">
|
||||
{/* Watts, not a percentage: the rig reports and takes watts, and a
|
||||
percentage would be a second unit to reconcile every time. */}
|
||||
<Slider value={view.rf_power || 5} min={5} max={100} accent="var(--destructive)"
|
||||
<Slider value={view.rf_power || 5} min={5} max={Math.max(100, view.max_power || 100)} accent="var(--destructive)"
|
||||
onChange={(v) => push('rf_power', v, () => SetYaesuPower(v))} />
|
||||
<span className="w-10 text-right text-xs font-mono tabular-nums text-muted-foreground">{view.rf_power}W</span>
|
||||
</Row>
|
||||
|
||||
Reference in New Issue
Block a user