diff --git a/changelog.json b/changelog.json index 6f5d53e..ee9c8c1 100644 --- a/changelog.json +++ b/changelog.json @@ -5,12 +5,12 @@ "en": [ "Each radio carries its own MY_RIG (Settings → CAT), written on every QSO made with it — ahead of the per-band station in Operating conditions, which says what you planned to use rather than which radio is keying. Left empty, nothing changes.", "Worked-before matrix: a dot in the corner of a cell now means the callsign you are working has already been worked on that slot, whatever colour the entity status gave the cell. Its two colours (worked / confirmed with this callsign) are in Appearance with the other matrix colours.", - "Icom spectrum scope: the IC-7851 (and any radio that wants the main/sub selector on its scope commands) now works over CI-V — the command shape is worked out from the radio’s own answer instead of a list of models." + "Icom spectrum scope: the command shape (with or without the main/sub selector) is now worked out from the radio’s own answers instead of a list of models. A radio that has scope control but no waveform stream over CI-V — the IC-7851 — says so in the panel rather than showing a black rectangle." ], "fr": [ "Chaque radio porte son propre MY_RIG (Réglages → CAT), inscrit sur chaque QSO fait avec elle — avant la station par bande des Conditions de trafic, qui dit ce qui était prévu et non quelle radio émet. Laissé vide, rien ne change.", "Matrice des contacts : un point dans le coin d'une case indique que l'indicatif en cours a déjà été contacté sur ce créneau, quelle que soit la couleur donnée par le statut de l'entité. Ses deux couleurs (contacté / confirmé avec cet indicatif) se règlent dans Apparence avec les autres couleurs de la matrice.", - "Scope Icom : l'IC-7851 (et toute radio qui attend le sélecteur main/sub sur les commandes de scope) fonctionne maintenant en CI-V — la forme de la commande est déduite de la réponse de la radio au lieu d'une liste de modèles." + "Scope Icom : la forme des commandes (avec ou sans le sélecteur main/sub) est déduite des réponses de la radio au lieu d'une liste de modèles. Une radio qui pilote son scope mais ne l'envoie pas en CI-V — l'IC-7851 — l'indique dans le panneau au lieu d'afficher un rectangle noir." ] }, { diff --git a/frontend/src/components/IcomPanel.tsx b/frontend/src/components/IcomPanel.tsx index bdcd6f4..c4066b8 100644 --- a/frontend/src/components/IcomPanel.tsx +++ b/frontend/src/components/IcomPanel.tsx @@ -292,6 +292,9 @@ function ScopePanadapter() { const wfRef = useRef(null); // waterfall const peakRef = useRef(160); // running amplitude ceiling for auto-scale const holdRef = useRef([]); // 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() { - {on && ( + {on && unsupported && ( +
{t('icmp.scopeNoStream')}
+ )} + {on && !unsupported && (