From d128dabc1989d7508bfe574540799542d108ead3 Mon Sep 17 00:00:00 2001 From: rouggy Date: Thu, 23 Jul 2026 14:21:08 +0200 Subject: [PATCH] fix: IC-7300 (single-scope Icom) blank spectrum scope in center/VFO mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The multi-frame waveform header (USB path) read the second frequency field as an absolute high edge, but in center mode it is a span — so high < low and the panadapter had no valid range to map the trace onto (blank scope). It now applies the same center+span vs low+high disambiguation the IC-7610 single- frame path already used. FIXED mode was unaffected. Also stamps changelog 0.20.10 with today's date. --- changelog.json | 8 +++++--- internal/cat/icomserial.go | 20 +++++++++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/changelog.json b/changelog.json index 9c5d113..571cabf 100644 --- a/changelog.json +++ b/changelog.json @@ -1,7 +1,7 @@ [ { "version": "0.20.10", - "date": "2026-07-22", + "date": "2026-07-23", "en": [ "Clicking an OpsLog spot on the FlexRadio panadapter now switches the mode too, not just the frequency: cluster spots (which carry no mode) get one inferred from the comment or the band plan, and every spot's mode is sent to the radio as a real SmartSDR mode (SSB resolves to USB/LSB by frequency), so the click tunes AND sets the mode.", "Station Control is now a clean dashboard of fixed-width panels that wrap to fill the window. Each panel has a grip handle on its left edge — drag it to move the panel anywhere, and the order is remembered. Relay buttons are compact. The amplifier panel is now the exact same card as the FlexRadio panel's (OPERATE/STANDBY, ON/OFF, power level, output-power bar and live FWD/drain-current/temperature meters), and if you run several amplifiers they all appear — one card each, no dropdown.", @@ -13,7 +13,8 @@ "FlexRadio meter scales now match SmartSDR: MIC (level) tops out at 0 dB and COMP (compression) tops out at -25 dB (was -20).", "New Help → 'Send log to F4BPO' (shown only when you have an SMTP server configured in Settings → E-mail): e-mails OpsLog's diagnostic logs (current session, previous session and any crash log) straight to the developer, so a problem you hit in the field can be looked at without hunting for the log files by hand.", "Bulk edit can now set the frequency: pick 'Frequency (MHz)', enter e.g. 7.155, and every selected QSO gets that frequency with its band recomputed to match. Handy for fixing a run that was logged on a stale/default frequency (e.g. 7.000) after CAT control dropped. Out-of-band values are rejected so a typo can't corrupt the batch.", - "Fixed the Cluster spot list appearing to 'freeze' at the UTC midnight rollover: the Time column was sorted as plain text, so a spot at 0001Z sorted below 2359Z and new spots after 0000Z dropped to the bottom of the list instead of the top — it looked like the cluster had stopped. The column now sorts by actual arrival time, which crosses midnight correctly." + "Fixed the Cluster spot list appearing to 'freeze' at the UTC midnight rollover: the Time column was sorted as plain text, so a spot at 0001Z sorted below 2359Z and new spots after 0000Z dropped to the bottom of the list instead of the top — it looked like the cluster had stopped. The column now sorts by actual arrival time, which crosses midnight correctly.", + "Fixed the spectrum scope being blank on the IC-7300 (and other single-scope Icoms) when the scope was in center / VFO-following mode: the multi-frame waveform header read the second frequency field as an absolute high edge, but in center mode it is a span, so the display got an invalid range and drew nothing. It now interprets center+span vs low+high edges the same way the IC-7610 path already did. FIXED mode was unaffected." ], "fr": [ "Cliquer sur un spot OpsLog du panadapter FlexRadio change maintenant aussi le mode, plus seulement la fréquence : les spots cluster (qui n'ont pas de mode) en reçoivent un déduit du commentaire ou du plan de bande, et le mode de chaque spot est envoyé à la radio comme un vrai mode SmartSDR (SSB devient USB/LSB selon la fréquence), donc le clic accorde ET règle le mode.", @@ -26,7 +27,8 @@ "Les échelles des meters FlexRadio collent maintenant à SmartSDR : MIC (niveau) plafonne à 0 dB et COMP (compression) à -25 dB (au lieu de -20).", "Nouveau Aide → « Envoyer le journal à F4BPO » (affiché seulement si un serveur SMTP est configuré dans Réglages → E-mail) : envoie par e-mail les journaux de diagnostic d'OpsLog (session en cours, session précédente et éventuel journal de crash) directement au développeur, pour qu'un problème rencontré sur le terrain puisse être examiné sans avoir à chercher les fichiers de journal à la main.", "L'édition groupée permet maintenant de définir la fréquence : choisis « Fréquence (MHz) », saisis p. ex. 7.155, et chaque QSO sélectionné reçoit cette fréquence avec sa bande recalculée en conséquence. Pratique pour corriger une série loguée sur une fréquence par défaut/figée (p. ex. 7.000) après une perte du CAT. Les valeurs hors bande sont refusées pour qu'une faute de frappe ne corrompe pas le lot.", - "Correction de la liste des spots Cluster qui semblait « se figer » au passage de minuit UTC : la colonne Heure était triée comme du texte, donc un spot à 0001Z se retrouvait sous 2359Z et les nouveaux spots après 0000Z tombaient en bas de la liste au lieu du haut — on aurait dit que le cluster s'était arrêté. La colonne trie désormais selon l'heure d'arrivée réelle, qui franchit minuit correctement." + "Correction de la liste des spots Cluster qui semblait « se figer » au passage de minuit UTC : la colonne Heure était triée comme du texte, donc un spot à 0001Z se retrouvait sous 2359Z et les nouveaux spots après 0000Z tombaient en bas de la liste au lieu du haut — on aurait dit que le cluster s'était arrêté. La colonne trie désormais selon l'heure d'arrivée réelle, qui franchit minuit correctement.", + "Correction du scope spectral vide sur l'IC-7300 (et autres Icom mono-scope) quand le scope était en mode centre / suivi du VFO : l'en-tête de forme d'onde multi-trames lisait le second champ de fréquence comme un bord haut absolu, alors qu'en mode centre c'est un span — l'affichage recevait donc une plage invalide et ne dessinait rien. Il interprète maintenant centre+span vs bords bas+haut comme le faisait déjà le chemin de l'IC-7610. Le mode FIXED n'était pas affecté." ] }, { diff --git a/internal/cat/icomserial.go b/internal/cat/icomserial.go index 2336ebd..5f675d4 100644 --- a/internal/cat/icomserial.go +++ b/internal/cat/icomserial.go @@ -661,9 +661,23 @@ func (b *IcomSerial) scopeLoop(spec chan civ.Decoded, done chan struct{}) { if seq == 1 { // header frame — begins a new sweep, no waveform data regions = make(map[byte][]byte) total = tot - if len(region) >= 11 { // [info][low 5][high 5] - low := civ.BCDToFreq(region[1:6]) - high := civ.BCDToFreq(region[6:11]) + if len(region) >= 11 { // [info][freq1 5-BCD][freq2 5-BCD] + // Same center/fixed disambiguation as the single-frame (net) path: + // FIXED sends [low-edge][high-edge] (both absolute), CENTER sends + // [center][span]. Tell them apart by magnitude — a second value + // BIGGER than the first is a real high edge; a smaller one is a + // span. Without this, an IC-7300 in center (VFO-following) mode set + // high = span (e.g. 100 kHz), so high < low and the panadapter had + // no valid range to map the trace onto → blank scope. FIXED mode + // parsed fine, which is why only center mode was broken. + v1 := civ.BCDToFreq(region[1:6]) + v2 := civ.BCDToFreq(region[6:11]) + var low, high int64 + if v2 > v1 { + low, high = v1, v2 // absolute low/high edges (fixed) + } else { + low, high = v1-v2/2, v1+v2/2 // centre + span (centre-on-VFO) + } b.scopeMu.Lock() b.scopeLow, b.scopeHigh = low, high b.scopeMu.Unlock()