fix(elecraft): MOX would not unkey, and the TX meters never moved
Both are the same bug. ReadState returns early while transmitting — the rig answers '?;' to IF; then, and treating that as a fault used to drop the link — but that early return also skipped the panel update and the meter read. So the panel believed the radio was still receiving. Pressing MOX again therefore sent ANOTHER transmit command instead of RX, and the K3 stayed keyed, exactly as reported. And the power and SWR bars were only ever read at the one moment they mean nothing. Reading meters while transmitting needs one more guard: a '?;' then says when the question was asked, not what the radio supports, so the unsupported-command memory is suspended for that read. Without it, one badly timed refusal would silence a meter for the rest of the session. Adds RIT/XIT offset control (±10/±100 Hz, offset shown), a 4.0 kHz filter button for FT8, and logs the K3's icon word when it changes: there is no command for 'is the ATU in line', the reference says the switch functions show up as icon changes, so an operator toggling the ATU while watching the log will name the bit and the button can then light up honestly.
This commit is contained in:
@@ -4,7 +4,7 @@ import {
|
||||
GetKenwoodState, RefreshKenwood, SetKenwoodPower, SetKenwoodAFGain, SetKenwoodTX, TuneKenwoodATU,
|
||||
SetKenwoodRFGain, SetKenwoodMicGain, SetKenwoodSquelch, SetKenwoodPreamp, SetKenwoodAtt,
|
||||
SetKenwoodNB, SetKenwoodNR, SetKenwoodAGC, SetKenwoodFilter, SetKenwoodAntenna,
|
||||
SetKenwoodRIT, SetKenwoodXIT, ClearKenwoodRIT, SetKenwoodKeySpeed, ToggleKenwoodATU,
|
||||
SetKenwoodRIT, SetKenwoodXIT, ClearKenwoodRIT, SetKenwoodKeySpeed, ToggleKenwoodATU, NudgeKenwoodRIT,
|
||||
GetCATState,
|
||||
} from '../../wailsjs/go/main/App';
|
||||
import { cn } from '@/lib/utils';
|
||||
@@ -20,7 +20,7 @@ type KenwoodState = {
|
||||
power_meter: number; swr: number; swr_raw: number;
|
||||
rf_power: number; af_gain: number; rf_gain: number; mic_gain: number; squelch: number;
|
||||
preamp: boolean; att: boolean; nb: boolean; nr: boolean; agc?: string;
|
||||
filter_hz: number; antenna: number; rit: boolean; xit: boolean; key_speed: number;
|
||||
filter_hz: number; antenna: number; rit: boolean; xit: boolean; rit_offset: number; key_speed: number;
|
||||
meters_provisional: boolean;
|
||||
};
|
||||
|
||||
@@ -29,14 +29,17 @@ const ZERO: KenwoodState = {
|
||||
s_meter: 0, s_meter_raw: 0, power_meter: 0, swr: 0, swr_raw: 0,
|
||||
rf_power: 0, af_gain: 0, rf_gain: 0, mic_gain: 0, squelch: 0,
|
||||
preamp: false, att: false, nb: false, nr: false,
|
||||
filter_hz: 0, antenna: 0, rit: false, xit: false, key_speed: 0,
|
||||
filter_hz: 0, antenna: 0, rit: false, xit: false, rit_offset: 0, key_speed: 0,
|
||||
meters_provisional: true,
|
||||
};
|
||||
|
||||
// Filter widths worth a button. CW work happens at 200-500 Hz, SSB at 2.4-2.8
|
||||
// kHz; the rest of the range is reachable from the radio's own knob, and a
|
||||
// panel offering thirty widths is slower to use than the knob it replaces.
|
||||
const FILTERS = [200, 400, 700, 1000, 1800, 2400, 2800];
|
||||
// 4.0k is the K3 maximum and the one FT8 wants: a 2.8 kHz filter clips the
|
||||
// top of the FT8 sub-band, and the decodes that go missing are the ones
|
||||
// nobody notices are missing.
|
||||
const FILTERS = [200, 400, 700, 1000, 1800, 2400, 2800, 4000];
|
||||
|
||||
// Raw S-meter → S units. The K3 answers 0-21 across S0…S9+60; S9 is taken at
|
||||
// raw 9 and each step above it as 6 dB. PROVISIONAL, like the rest of the
|
||||
@@ -281,6 +284,15 @@ export function ElecraftPanel({ onReportRST }: { onReportRST?: (rst: string) =>
|
||||
<div className="flex flex-wrap items-center gap-1.5">
|
||||
<Toggle label="RIT" on={view.rit} off={off} onClick={() => SetKenwoodRIT(!view.rit).catch(setErrMsg)} />
|
||||
<Toggle label="XIT" on={view.xit} off={off} onClick={() => SetKenwoodXIT(!view.xit).catch(setErrMsg)} />
|
||||
{/* The offset itself. A lit RIT button says the feature is on and
|
||||
nothing about where it has put the receiver. */}
|
||||
{[-100, -10, 10, 100].map((d) => (
|
||||
<Toggle key={d} label={(d > 0 ? '+' : '') + d} on={false} off={off}
|
||||
onClick={() => NudgeKenwoodRIT(d).catch(setErrMsg)} />
|
||||
))}
|
||||
<span className="text-[11px] font-mono tabular-nums text-muted-foreground w-16">
|
||||
{view.rit_offset > 0 ? '+' : ''}{view.rit_offset || 0} Hz
|
||||
</span>
|
||||
<Toggle label={t('k3.clear')} on={false} off={off} onClick={() => ClearKenwoodRIT().catch(setErrMsg)} />
|
||||
{/* Antenna only when the radio answered AN — a K3 without the internal
|
||||
ATU has one socket and no switch to offer. */}
|
||||
|
||||
Vendored
+2
@@ -803,6 +803,8 @@ export function NetSetDefaults(arg1:string,arg2:string,arg3:string,arg4:string):
|
||||
|
||||
export function NetUpdateActive(arg1:qso.QSO):Promise<void>;
|
||||
|
||||
export function NudgeKenwoodRIT(arg1:number):Promise<void>;
|
||||
|
||||
export function OpenADIFFile():Promise<string>;
|
||||
|
||||
export function OpenAwardsFolder():Promise<void>;
|
||||
|
||||
@@ -1546,6 +1546,10 @@ export function NetUpdateActive(arg1) {
|
||||
return window['go']['main']['App']['NetUpdateActive'](arg1);
|
||||
}
|
||||
|
||||
export function NudgeKenwoodRIT(arg1) {
|
||||
return window['go']['main']['App']['NudgeKenwoodRIT'](arg1);
|
||||
}
|
||||
|
||||
export function OpenADIFFile() {
|
||||
return window['go']['main']['App']['OpenADIFFile']();
|
||||
}
|
||||
|
||||
@@ -1094,6 +1094,7 @@ export namespace cat {
|
||||
antenna: number;
|
||||
rit: boolean;
|
||||
xit: boolean;
|
||||
rit_offset: number;
|
||||
key_speed: number;
|
||||
meters_provisional: boolean;
|
||||
|
||||
@@ -1129,6 +1130,7 @@ export namespace cat {
|
||||
this.antenna = source["antenna"];
|
||||
this.rit = source["rit"];
|
||||
this.xit = source["xit"];
|
||||
this.rit_offset = source["rit_offset"];
|
||||
this.key_speed = source["key_speed"];
|
||||
this.meters_provisional = source["meters_provisional"];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user