Compare commits

..
2 Commits
5 changed files with 101 additions and 33 deletions
+41 -15
View File
@@ -42,7 +42,10 @@ Développé par **F4BPO**.
district (`/8`, `/W6`), plus les dérogations DXpédition de ClubLog par dates. district (`/8`, `/W6`), plus les dérogations DXpédition de ClubLog par dates.
- **QSO récents**, matrice **déjà contactés** (par créneau bande/mode), - **QSO récents**, matrice **déjà contactés** (par créneau bande/mode),
re-résolution en masse depuis cty/QRZ/ClubLog, envoi en masse vers les services re-résolution en masse depuis cty/QRZ/ClubLog, envoi en masse vers les services
QSL. QSL. Un **compteur de sélection** en direct, une bascule **Tout sélectionner /
Tout désélectionner**, et une limite d'affichage qui garde le journal complet
rapide **mais qui saute dès qu'un filtre est actif** (toutes les correspondances
sont montrées, pas seulement la première page).
- **Constructeur de filtres QSO avancé** (champ / opérateur / valeur, ET / OU, - **Constructeur de filtres QSO avancé** (champ / opérateur / valeur, ET / OU,
préréglages enregistrés) avec **export ADIF** des lignes filtrées ou préréglages enregistrés) avec **export ADIF** des lignes filtrées ou
sélectionnées. sélectionnées.
@@ -67,7 +70,9 @@ Développé par **F4BPO**.
légendés) et le(s) **lobe(s) du faisceau d'antenne** tracés depuis l'azimut du légendés) et le(s) **lobe(s) du faisceau d'antenne** tracés depuis l'azimut du
rotor. rotor.
- **Compas de rotor** (azimutal équidistant, clic pour tourner) piloté par - **Compas de rotor** (azimutal équidistant, clic pour tourner) piloté par
PstRotator. **PstRotator** (UDP), un **Rotator Genius 4O3A** (TCP natif) ou un **microHAM
ARCO** contrôlé nativement — sans PstRotator — via le **réseau** ou l'**USB**
avec son protocole Yaesu GS-232A.
- **Support Ultrabeam** (Normal / inversé 180° / bidirectionnel) : la direction - **Support Ultrabeam** (Normal / inversé 180° / bidirectionnel) : la direction
rayonnée est en vert et le **boom mécanique** en gris, à la fois sur le compas rayonnée est en vert et le **boom mécanique** en gris, à la fois sur le compas
et sur la carte, pour toujours savoir où pointe l'antenne. et sur la carte, pour toujours savoir où pointe l'antenne.
@@ -81,7 +86,9 @@ Développé par **F4BPO**.
Cluster et le volet cluster de la vue principale, avec bascule affichage/masquage. Cluster et le volet cluster de la vue principale, avec bascule affichage/masquage.
- **Statut** par spot (nouveau / nouvelle bande / nouveau créneau / contacté), - **Statut** par spot (nouveau / nouvelle bande / nouveau créneau / contacté),
clic pour accorder la radio, et une **bandmap** multi-bandes (bandes façon clic pour accorder la radio, et une **bandmap** multi-bandes (bandes façon
panadapter). panadapter). En option, tous les **modes numériques comptent comme un seul**
(style DXCC) pour le coloriage nouveau/nouveau-créneau et les badges de la
matrice des déjà-contactés (Réglages → Général).
- Les spots **POTA** sont étiquetés avec leur référence de parc (via - Les spots **POTA** sont étiquetés avec leur référence de parc (via
`api.pota.app`). `api.pota.app`).
- **Alertes de spots** (façon Log4OM) : règles sur indicatif / pays / bande / - **Alertes de spots** (façon Log4OM) : règles sur indicatif / pays / bande /
@@ -97,7 +104,8 @@ connexion rapide non bloquante — une radio éteinte ne fige jamais l'applicati
supportée par OmniRig. supportée par OmniRig.
- **FlexRadio (SmartSDR)** via l'API TCP de la radio — fréquence / mode / split - **FlexRadio (SmartSDR)** via l'API TCP de la radio — fréquence / mode / split
de la slice en temps réel, découverte UDP, et **spots panadapter** (les spots de la slice en temps réel, découverte UDP, et **spots panadapter** (les spots
du cluster poussés sur l'écran Flex, clic remplir l'indicatif). du cluster poussés sur l'écran Flex ; un clic remplit l'indicatif et **accorde
la radio sur la bonne fréquence ET le bon mode**).
- **Icom CI-V** — natif, via le port **USB** de la radio *ou* par internet via le - **Icom CI-V** — natif, via le port **USB** de la radio *ou* par internet via le
**serveur LAN intégré** de la radio (voir *Icom à distance* ci-dessous). Ni **serveur LAN intégré** de la radio (voir *Icom à distance* ci-dessous). Ni
RS-BA1 ni Remote Utility nécessaires. RS-BA1 ni Remote Utility nécessaires.
@@ -114,12 +122,17 @@ Affiché uniquement quand le backend CAT est une FlexRadio :
- **Émission :** puissance RF, puissance d'accord, TUNE, MOX, processeur de - **Émission :** puissance RF, puissance d'accord, TUNE, MOX, processeur de
parole (NOR/DX/DX+), VOX (+ niveau + délai), moniteur (+ niveau), gain micro. parole (NOR/DX/DX+), VOX (+ niveau + délai), moniteur (+ niveau), gain micro.
- **Réception (slice active) :** mode/seuil AGC, niveau audio, NB / NR / ANF. - **Réception (slice active) :** sélecteurs d'**antenne** RX/TX et une bascule
**DAX** (audio d'émission via DAX, pour WSJT-X & co), mode/seuil AGC, niveau
audio, NB / WNB / NR / ANF, et — sur les radios **SmartSDR v4** (séries 8000 /
Aurora) — les filtres DSP supplémentaires **NRL, NRS, NRF** (avec niveau) plus
**RNN** (réduction de bruit par IA) et **ANFT** (notch automatique FFT),
affichés automatiquement si la radio les supporte. **RIT / XIT** avec accord
molette / ±.
- **Coupleur d'antenne (ATU) :** accord / bypass / mémoires. - **Coupleur d'antenne (ATU) :** accord / bypass / mémoires.
- **Amplificateur :** la carte de commande suit l'ampli configuré - **Amplificateur :** la carte de commande suit l'ampli configuré, avec une liste
**PowerGenius XL** (operate/standby, mode ventilateur, défaut) ou déroulante pour le choisir quand **plusieurs amplificateurs** sont configurés
**SPE Expert** (operate/standby, Marche/Arrêt, niveau Low/Mid/High, barre de (p. ex. deux SPE en parallèle). Voir *Amplis & commutateurs* ci-dessous.
puissance de sortie, bande & température).
- **Mesures en direct** via le flux UDP VITA-49 : S-mètre (unités S), puissance - **Mesures en direct** via le flux UDP VITA-49 : S-mètre (unités S), puissance
directe (W), ROS, ALC, température PA, tension, plus les mesures de l'ampli. directe (W), ROS, ALC, température PA, tension, plus les mesures de l'ampli.
@@ -178,14 +191,23 @@ avec le panadapter en flux, et Marche/Arrêt manuel. (L'audio est hors périmèt
## Amplis & commutateurs ## Amplis & commutateurs
- **Amplificateurs** (Réglages → Amplificateur — la carte de commande apparaît - **Amplificateurs** — configurez **un ou plusieurs** amplis (Réglages →
sur l'onglet FlexRadio, ou seule quand ni Flex ni Icom n'est actif) : Amplificateur est une liste ; p. ex. deux SPE en parallèle pour plus de
puissance). La carte de chaque ampli apparaît sur l'onglet FlexRadio et dans
**Station Control**, avec une liste déroulante pour choisir lequel afficher ; la
barre de statut du bas porte **une pastille cliquable par ampli** (vert =
OPERATE, orange = STANDBY, rouge = hors ligne). Supportés :
- **PowerGenius XL** (4O3A) en TCP direct — operate/standby, sélecteur de mode - **PowerGenius XL** (4O3A) en TCP direct — operate/standby, sélecteur de mode
ventilateur et affichage des défauts. ventilateur et affichage des défauts.
- **SPE Expert** (1.3K-FA / 1.5K-FA / 2K-FA) via **USB** (COM virtuel) ou le - **SPE Expert** (1.3K-FA / 1.5K-FA / 2K-FA) via **USB** (COM virtuel) ou le
**réseau** (pont RS232-Ethernet) — operate/standby, Marche/Arrêt, niveau de **réseau** (pont RS232-Ethernet) — operate/standby, Marche/Arrêt, niveau de
sortie Low / Mid / High, une barre de puissance et le statut en direct (bande, sortie Low / Mid / High, une barre de puissance et le statut en direct (bande,
ROS, courant PA, température, avertissements/alarmes). ROS, courant PA, température, avertissements/alarmes).
- **ACOM** (500S / 600S / 700S / 1200S / 2020S) via **USB** ou le **réseau**
(pont RS232-Ethernet) — operate/standby/arrêt et télémétrie en direct
(puissance directe & réfléchie, ROS, température PA, bande, ventilateur,
défauts). La mise en marche fonctionne via un câble série reliant les lignes
DTR/RTS.
- Commutateur d'antenne **Antenna Genius** (4O3A) via TCP/GSCP — un widget de - Commutateur d'antenne **Antenna Genius** (4O3A) via TCP/GSCP — un widget de
commutation A/B ancré. commutation A/B ancré.
- Panneau **Station Control** (ancrable, widgets réordonnables par glisser) : le - Panneau **Station Control** (ancrable, widgets réordonnables par glisser) : le
@@ -235,10 +257,11 @@ avec le panadapter en flux, et Marche/Arrêt manuel. (L'audio est hors périmèt
## Statut opérateur en direct (événements spéciaux) ## Statut opérateur en direct (événements spéciaux)
Pour un indicatif d'événement spécial multi-op sur un journal MySQL partagé (ex. Pour un indicatif d'événement spécial multi-op sur un journal MySQL partagé (ex.
**TM74TFR**) : Réglages → Général → *Publier le statut opérateur en direct*. **TM74TFR**), la publication est **automatique** — aucun réglage à activer.
Chaque instance OpsLog envoie un battement de cœur de son activité (indicatif de Chaque instance OpsLog envoie un battement de cœur de son activité (indicatif de
l'opérateur, bande, fréquence, mode) dans une table `live_status` toutes les l'opérateur, bande, fréquence, mode) dans une table `live_status` toutes les
~15 s. Un petit rendu PHP ~15 s, et repasse *hors antenne* automatiquement 5 min après le dernier QSO
logué. Un petit rendu PHP
([`docs/livestatus/tm74-status.php`](docs/livestatus/tm74-status.php)) sur votre ([`docs/livestatus/tm74-status.php`](docs/livestatus/tm74-status.php)) sur votre
propre serveur web lit cette table et produit une page/image en direct que vous propre serveur web lit cette table et produit une page/image en direct que vous
pouvez intégrer sur la bio **QRZ.com** de la station pouvez intégrer sur la bio **QRZ.com** de la station
@@ -248,8 +271,11 @@ ce n'est pas un serveur web.
## Net control ## Net control
- **Log de net dirigé** (Outils → Net) : un roster global (`nets.json`) plus une - **Log de net dirigé** (Outils → Net) : un roster global (`nets.json`) plus une
session active en mémoire — pointez les stations présentes, puis loguez tout le session active en mémoire — pointez les stations présentes, puis loguez-les une
net d'un coup en utilisant la fréquence CAT. par une ou tout le net d'un coup (**Logger tout le monde**) en utilisant la
fréquence CAT. **Glisser-déposer** entre les deux listes (roster → on air démarre
un QSO, on air → roster l'enregistre), et après chaque log la station on air
suivante est sélectionnée automatiquement pour enchaîner les contacts.
## Apparence & langue ## Apparence & langue
+40 -16
View File
@@ -40,7 +40,10 @@ Developed by **F4BPO**.
with `/MM` `/AM` `/B` (beacon) and call-area (`/8`, `/W6`) handling, plus with `/MM` `/AM` `/B` (beacon) and call-area (`/8`, `/W6`) handling, plus
ClubLog DXpedition date overrides. ClubLog DXpedition date overrides.
- **Recent QSOs**, **Worked-before** matrix (per band/mode slot), bulk re-resolve - **Recent QSOs**, **Worked-before** matrix (per band/mode slot), bulk re-resolve
from cty/QRZ/ClubLog, bulk send to QSL services. from cty/QRZ/ClubLog, bulk send to QSL services. A live **selection count**, a
**Select all / Unselect all** toggle, and a row limit that keeps the full log
fast **but is lifted while a filter is active** (every match is shown, not just
the first page).
- **Advanced QSO filter builder** (field / operator / value, AND / OR, saved - **Advanced QSO filter builder** (field / operator / value, AND / OR, saved
presets) with filtered- and selected-row **ADIF export**. presets) with filtered- and selected-row **ADIF export**.
- **Find duplicates** (Tools) — groups QSOs by same call + band + mode (optionally - **Find duplicates** (Tools) — groups QSOs by same call + band + mode (optionally
@@ -59,7 +62,10 @@ Developed by **F4BPO**.
- **Great-circle map** with short/long-path distance & azimuth, selectable - **Great-circle map** with short/long-path distance & azimuth, selectable
basemaps (Light / Voyager / Street / Satellite, all key-free and labelled) and basemaps (Light / Voyager / Street / Satellite, all key-free and labelled) and
the **antenna beam lobe(s)** drawn from the rotor azimuth. the **antenna beam lobe(s)** drawn from the rotor azimuth.
- **Rotor compass** (azimuthal-equidistant, click-to-turn) driven by PstRotator. - **Rotor compass** (azimuthal-equidistant, click-to-turn) driven by
**PstRotator** (UDP), a **4O3A Rotator Genius** (native TCP) or a **microHAM
ARCO** controlled natively — no PstRotator needed — over the **LAN** or **USB**
using its Yaesu GS-232A protocol.
- **Ultrabeam** support (Normal / 180° reverse / Bidirectional): the radiating - **Ultrabeam** support (Normal / 180° reverse / Bidirectional): the radiating
direction is shown in green and the **mechanical boom** in grey, on both the direction is shown in green and the **mechanical boom** in grey, on both the
compass and the map, so you never lose track of where the antenna points. compass and the map, so you never lose track of where the antenna points.
@@ -71,7 +77,9 @@ Developed by **F4BPO**.
mode / status / source) shared by the Cluster tab and the Main-view cluster mode / status / source) shared by the Cluster tab and the Main-view cluster
pane, with a show/hide toggle. pane, with a show/hide toggle.
- Per-spot **status** (new / new-band / new-slot / worked), click-to-tune the - Per-spot **status** (new / new-band / new-slot / worked), click-to-tune the
rig, and a multi-band **Band Map** (panadapter-style strips). rig, and a multi-band **Band Map** (panadapter-style strips). Optionally, all
**digital modes count as one** (DXCC-style) for the new/new-slot colouring and
the worked-before matrix badges (Settings → General).
- **POTA** spots are tagged with their park reference (via `api.pota.app`). - **POTA** spots are tagged with their park reference (via `api.pota.app`).
- **Spot alerts** (Log4OM-style): rules on call / country / band / mode / - **Spot alerts** (Log4OM-style): rules on call / country / band / mode /
spotter, with sound, visual and e-mail notification (Tools → *Alert spotter, with sound, visual and e-mail notification (Tools → *Alert
@@ -85,7 +93,8 @@ non-blocking connect so a powered-off radio never freezes the app:
- **OmniRig** (Rig 1/2, hot-swap) — works with any OmniRig-supported rig. - **OmniRig** (Rig 1/2, hot-swap) — works with any OmniRig-supported rig.
- **FlexRadio (SmartSDR)** over the radio's TCP API — real-time slice freq / - **FlexRadio (SmartSDR)** over the radio's TCP API — real-time slice freq /
mode / split, UDP discovery, and **panadapter spots** (cluster spots pushed to mode / split, UDP discovery, and **panadapter spots** (cluster spots pushed to
the Flex display, click fill the call). the Flex display; a click fills the call and **tunes the rig to the right
frequency AND mode**).
- **Icom CI-V** — native, over the radio's **USB** port *or* over the internet - **Icom CI-V** — native, over the radio's **USB** port *or* over the internet
via the radio's **built-in LAN server** (see *Remote Icom* below). No RS-BA1 or via the radio's **built-in LAN server** (see *Remote Icom* below). No RS-BA1 or
Remote Utility needed. Remote Utility needed.
@@ -102,12 +111,16 @@ Shown only when the CAT backend is a FlexRadio:
- **Transmit:** RF power, tune power, TUNE, MOX, speech processor (NOR/DX/DX+), - **Transmit:** RF power, tune power, TUNE, MOX, speech processor (NOR/DX/DX+),
VOX (+ level + delay), monitor (+ level), mic gain. VOX (+ level + delay), monitor (+ level), mic gain.
- **Receive (active slice):** AGC mode/threshold, audio level, NB / NR / ANF. - **Receive (active slice):** RX/TX **antenna** selectors and a **DAX** toggle
(TX audio through DAX, for WSJT-X & co), AGC mode/threshold, audio level,
NB / WNB / NR / ANF, and — on **SmartSDR v4** radios (8000 / Aurora series) —
the extra DSP tools **NRL, NRS, NRF** (with level) plus **RNN** (AI noise
reduction) and **ANFT** (FFT auto-notch), shown automatically when the radio
supports them. **RIT / XIT** with wheel / ± tuning.
- **Antenna tuner (ATU):** tune / bypass / memories. - **Antenna tuner (ATU):** tune / bypass / memories.
- **Amplifier:** the amp card follows whichever amplifier is configured - **Amplifier:** the amp card follows whichever amplifier is configured, with a
**PowerGenius XL** (operate/standby, fan mode, fault) or **SPE Expert** dropdown to pick it when **several amplifiers** are set up (e.g. two SPEs run
(operate/standby, ON/OFF, Low/Mid/High level, output-power bar, band & in parallel). See *Amplifiers & switches* below.
temperature).
- **Live meters** over the UDP VITA-49 stream: S-meter (S-units), forward power - **Live meters** over the UDP VITA-49 stream: S-meter (S-units), forward power
(W), SWR, ALC, PA temperature, voltage, plus the amplifier's meters. (W), SWR, ALC, PA temperature, voltage, plus the amplifier's meters.
@@ -158,14 +171,21 @@ as Mumble.)
## Amplifiers & switches ## Amplifiers & switches
- **Amplifiers** (Settings → Amplifier — the control card appears on the - **Amplifiers** — configure **one or several** amps (Settings → Amplifier is a
FlexRadio tab, or on its own when neither Flex nor Icom is active): list; e.g. two SPEs run in parallel for more power). Each amp's control card
appears on the FlexRadio tab and in **Station Control**, with a dropdown to
choose which one it shows; the bottom status bar carries **one clickable chip
per amp** (green = OPERATE, orange = STANDBY, red = offline). Supported:
- **PowerGenius XL** (4O3A) over direct TCP — operate/standby, fan-mode - **PowerGenius XL** (4O3A) over direct TCP — operate/standby, fan-mode
selector and fault display. selector and fault display.
- **SPE Expert** (1.3K-FA / 1.5K-FA / 2K-FA) over **USB** (virtual COM) or the - **SPE Expert** (1.3K-FA / 1.5K-FA / 2K-FA) over **USB** (virtual COM) or the
**network** (RS232-to-Ethernet bridge) — operate/standby, ON/OFF, **network** (RS232-to-Ethernet bridge) — operate/standby, ON/OFF,
Low / Mid / High output level, an output-power bar and live status (band, Low / Mid / High output level, an output-power bar and live status (band,
SWR, PA current, temperature, warnings/alarms). SWR, PA current, temperature, warnings/alarms).
- **ACOM** (500S / 600S / 700S / 1200S / 2020S) over **USB** or the **network**
(RS232-to-Ethernet bridge) — operate/standby/off and live telemetry (forward
& reflected power, SWR, PA temperature, band, fan, faults). Power-ON works
over a serial cable that wires the DTR/RTS lines.
- **Antenna Genius** (4O3A) antenna switch over TCP/GSCP — a docked A/B - **Antenna Genius** (4O3A) antenna switch over TCP/GSCP — a docked A/B
antenna-switch widget. antenna-switch widget.
- **Station Control** panel (dockable, drag-to-reorder widgets): the **rotator**, - **Station Control** panel (dockable, drag-to-reorder widgets): the **rotator**,
@@ -208,10 +228,11 @@ as Mumble.)
## Multi-operator live status (special events) ## Multi-operator live status (special events)
For a multi-op special-event call on a shared MySQL logbook (e.g. **TM74TFR**): For a multi-op special-event call on a shared MySQL logbook (e.g. **TM74TFR**),
Settings → General → *Publish live operator status*. Each OpsLog instance publishing is **automatic** — no setting to turn on. Each OpsLog instance
heartbeats its current activity (operator call, band, frequency, mode) into a heartbeats its current activity (operator call, band, frequency, mode) into a
`live_status` table every ~15 s. A small PHP renderer `live_status` table every ~15 s, and drops back to *off air* automatically 5 min
after the last logged QSO. A small PHP renderer
([`docs/livestatus/tm74-status.php`](docs/livestatus/tm74-status.php)) on your ([`docs/livestatus/tm74-status.php`](docs/livestatus/tm74-status.php)) on your
own web server reads that table and produces a live page/image you can embed on own web server reads that table and produces a live page/image you can embed on
the station's **QRZ.com** bio (`<img src="…/tm74-status.php?img=1">`). OpsLog the station's **QRZ.com** bio (`<img src="…/tm74-status.php?img=1">`). OpsLog
@@ -220,8 +241,11 @@ only writes to the DB — it is not a web server.
## Net control ## Net control
- **Directed-net logging** (Tools → Net): a global roster (`nets.json`) plus an - **Directed-net logging** (Tools → Net): a global roster (`nets.json`) plus an
in-memory active session — check stations in, then log the whole net at once in-memory active session — check stations in, then log them individually or the
using the CAT frequency. whole net at once (**Log everyone**) using the CAT frequency. **Drag & drop**
between the two lists (roster → on-air starts a QSO, on-air → roster logs it),
and after each log the next on-air station is selected automatically so you can
chain contacts.
## Appearance & language ## Appearance & language
+5 -1
View File
@@ -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,
}) })
} }
+10
View File
@@ -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",
+5 -1
View File
@@ -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 != "" {