fix: clicking an OpsLog spot on the Flex panadapter now sets the mode too — cluster spots get a mode inferred (comment/band plan) and SendSpot converts it to a real Flex mode (SSB->USB/LSB, FT8->DIGU), so SmartSDR actually switches mode on the click; changelog 0.20.10
This commit is contained in:
@@ -6484,11 +6484,15 @@ func (a *App) clusterEventWorker() {
|
|||||||
}
|
}
|
||||||
// Fire any matching alert rules (sound / visual / e-mail).
|
// Fire any matching alert rules (sound / visual / e-mail).
|
||||||
a.evaluateAlerts(s)
|
a.evaluateAlerts(s)
|
||||||
// Mirror the spot onto the FlexRadio panadapter when enabled.
|
// Mirror the spot onto the FlexRadio panadapter when enabled. Infer the
|
||||||
|
// mode (from the comment, else the band plan) so clicking the spot on the
|
||||||
|
// panadapter tunes AND switches mode — a DX cluster line carries no mode,
|
||||||
|
// so without this the radio only moved frequency.
|
||||||
if a.catFlexSpots && a.cat != nil {
|
if a.catFlexSpots && a.cat != nil {
|
||||||
a.cat.SendSpot(cat.SpotInfo{
|
a.cat.SendSpot(cat.SpotInfo{
|
||||||
FreqHz: s.FreqHz,
|
FreqHz: s.FreqHz,
|
||||||
Callsign: s.DXCall,
|
Callsign: s.DXCall,
|
||||||
|
Mode: alerts.InferMode(s.Comment, s.FreqHz),
|
||||||
Comment: s.Comment,
|
Comment: s.Comment,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "0.20.10",
|
||||||
|
"date": "2026-07-22",
|
||||||
|
"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."
|
||||||
|
],
|
||||||
|
"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."
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "0.20.9",
|
"version": "0.20.9",
|
||||||
"date": "2026-07-22",
|
"date": "2026-07-22",
|
||||||
|
|||||||
@@ -1162,7 +1162,11 @@ func (f *Flex) SendSpot(s SpotInfo) error {
|
|||||||
}
|
}
|
||||||
cmd := fmt.Sprintf("spot add rx_freq=%.6f callsign=%s color=%s source=OpsLog lifetime_seconds=%d trigger_action=Tune timestamp=%d",
|
cmd := fmt.Sprintf("spot add rx_freq=%.6f callsign=%s color=%s source=OpsLog lifetime_seconds=%d trigger_action=Tune timestamp=%d",
|
||||||
float64(s.FreqHz)/1e6, call, color, life, time.Now().Unix())
|
float64(s.FreqHz)/1e6, call, color, life, time.Now().Unix())
|
||||||
if m := flexEncode(s.Mode); m != "" {
|
// Convert to a real Flex mode (USB/LSB/CW/DIGU/…): SmartSDR only switches the
|
||||||
|
// slice mode on a spot click when mode= is one of ITS mode names — "SSB" or a
|
||||||
|
// bare cluster label is ignored, so the mode wouldn't change. adifModeToFlex
|
||||||
|
// also resolves SSB→USB/LSB from the spot frequency.
|
||||||
|
if m := flexEncode(adifModeToFlex(s.Mode, s.FreqHz)); m != "" {
|
||||||
cmd += " mode=" + m
|
cmd += " mode=" + m
|
||||||
}
|
}
|
||||||
if c := flexEncode(s.Comment); c != "" {
|
if c := flexEncode(s.Comment); c != "" {
|
||||||
|
|||||||
Reference in New Issue
Block a user