fix(icom): say when a radio has no scope stream instead of drawing nothing
The CI-V trace settles it: the IC-7851 answers 27 10 01 with FB and 27 14 00 with its mode, but refuses 27 11 in BOTH shapes — it controls its scope over CI-V and never streams it. Its last firmware is from 2016, older than the waveform stream itself; Hamlib's caps claim otherwise, the radio is the authority. Rejected both ways is a permanent answer, so it is remembered and reported: the panadapter says the radio does not send its scope, which is the one thing a black rectangle could not say.
This commit is contained in:
@@ -292,6 +292,9 @@ function ScopePanadapter() {
|
||||
const wfRef = useRef<HTMLCanvasElement>(null); // waterfall
|
||||
const peakRef = useRef(160); // running amplitude ceiling for auto-scale
|
||||
const holdRef = useRef<number[]>([]); // per-bin peak-hold line
|
||||
// Some radios control their scope over CI-V but never stream it (IC-7851).
|
||||
// Saying so beats a black rectangle, which reads as a bug in OpsLog.
|
||||
const [unsupported, setUnsupported] = useState(false);
|
||||
const spanRef = useRef({ low: 0, high: 0 }); // latest sweep edges, for click-to-tune
|
||||
const vfoRef = useRef(0); // latest VFO frequency, for wheel-tune
|
||||
const centerRef = useRef(0); // scope centre we last set (for pan ◀/▶)
|
||||
@@ -333,6 +336,7 @@ function ScopePanadapter() {
|
||||
if (!alive) return;
|
||||
try {
|
||||
const sw = await IcomScopeData();
|
||||
if (sw?.unsupported) setUnsupported(true);
|
||||
if (sw && sw.seq !== lastSeq && sw.amp && sw.amp.length) {
|
||||
lastSeq = sw.seq;
|
||||
setFixed(sw.fixed);
|
||||
@@ -543,7 +547,10 @@ function ScopePanadapter() {
|
||||
<Chip label={on ? 'ON' : 'OFF'} on={on} onClick={toggle} />
|
||||
</div>
|
||||
</div>
|
||||
{on && (
|
||||
{on && unsupported && (
|
||||
<div className="px-3 py-2 text-xs text-muted-foreground">{t('icmp.scopeNoStream')}</div>
|
||||
)}
|
||||
{on && !unsupported && (
|
||||
<div className="p-3">
|
||||
<div className="rounded-xl overflow-hidden ring-1 ring-info/20 shadow-lg shadow-sky-500/5 bg-[#05070e]">
|
||||
<canvas ref={canvasRef} onDoubleClick={onDblClick}
|
||||
|
||||
@@ -127,6 +127,7 @@ const en: Dict = {
|
||||
'mx.tipCallConf': 'This callsign confirmed', 'mx.tipCallWork': 'This callsign worked (not confirmed)',
|
||||
'mx.tipDxConf': 'Entity confirmed (other callsign)', 'mx.tipDxWork': 'Entity worked (other callsign)',
|
||||
'mx.tipNone': 'Never worked', 'mx.tipClick': 'click to list the QSOs',
|
||||
'icmp.scopeNoStream': 'This radio does not send its scope over CI-V — its own screen still works.',
|
||||
'mx.markWork': 'This callsign worked', 'mx.markConf': 'This callsign confirmed',
|
||||
'mx.tipThisCall': 'already worked with this callsign',
|
||||
'mx.tipThisCallConf': 'already confirmed with this callsign',
|
||||
@@ -616,6 +617,7 @@ const fr: Dict = {
|
||||
'mx.tipCallConf': 'Cet indicatif est confirmé', 'mx.tipCallWork': 'Cet indicatif est contacté (non confirmé)',
|
||||
'mx.tipDxConf': 'Entité confirmée (autre indicatif)', 'mx.tipDxWork': 'Entité contactée (autre indicatif)',
|
||||
'mx.tipNone': 'Jamais contacté', 'mx.tipClick': 'cliquer pour lister les QSO',
|
||||
'icmp.scopeNoStream': "Cette radio n'envoie pas son scope en CI-V — son propre écran fonctionne toujours.",
|
||||
'mx.markWork': 'Cet indicatif contacté', 'mx.markConf': 'Cet indicatif confirmé',
|
||||
'mx.tipThisCall': 'déjà contacté avec cet indicatif',
|
||||
'mx.tipThisCallConf': 'déjà confirmé avec cet indicatif',
|
||||
|
||||
@@ -1196,6 +1196,7 @@ export namespace cat {
|
||||
low_hz: number;
|
||||
high_hz: number;
|
||||
fixed: boolean;
|
||||
unsupported: boolean;
|
||||
|
||||
static createFrom(source: any = {}) {
|
||||
return new ScopeSweep(source);
|
||||
@@ -1208,6 +1209,7 @@ export namespace cat {
|
||||
this.low_hz = source["low_hz"];
|
||||
this.high_hz = source["high_hz"];
|
||||
this.fixed = source["fixed"];
|
||||
this.unsupported = source["unsupported"];
|
||||
}
|
||||
}
|
||||
export class TCIPanelState {
|
||||
|
||||
Reference in New Issue
Block a user