Reported as "the TCI keyer is unusable, and it asks for a COM port TCI
does not need". The keying itself was never the problem: TCISendCW,
TCIStopCW and TCISetKeySpeed have been there since the backend landed,
and the F-keys and macros dispatch by engine. Three other things said
otherwise.
The dropdown said "TCI (coming soon)", which on its own is enough to
stop anybody selecting it.
The Station Control keyer card read GetWinkeyerStatus — the serial
manager alone. On the five engines that key over the CAT link that is
already open, that status is permanently disconnected with no port, so
the card showed a red light, "no port", and a Connect button whose only
possible outcome was a serial error.
And the card was HIDDEN on those engines: it appeared only when the
keyer was connected or a port was configured, neither of which is ever
true for CAT keying. An operator on TCI never saw it at all.
So GetKeyerStatus: the WinKeyer status plus which engine is keying and
whether it rides the CAT link, with Connected taken from the CAT backend
in that case. Decided in Go rather than in each panel, because "is the
keyer up" has one answer and two places were entitled to disagree about
it — App.tsx already computed its own.
"The relaunch after an update goes back to the helper that waited for OpsLog to close before starting the new version. Two rewrites tried to do without it and both left some operators with no window. Windows Defender may flag it — allow OpsLog in Defender if it does.",
"WSJT-X can now transmit through an Icom reached over Ethernet. Set its output to a virtual audio cable and choose that cable under Settings ▸ Audio — OpsLog streams it to the radio while WSJT-X holds PTT through the shared CAT."
"WSJT-X can now transmit through an Icom reached over Ethernet. Set its output to a virtual audio cable and choose that cable under Settings ▸ Audio — OpsLog streams it to the radio while WSJT-X holds PTT through the shared CAT.",
"The TCI keyer is no longer labelled \"coming soon\" — it works, and has since it landed. What was broken was the Station Control card: it looked only at the WinKeyer serial link, so an engine that keys over CAT showed a red light, \"no port\" and a Connect button that could only fail, and the card was hidden altogether when no port was set. It now says which link carries the keying."
],
"fr":[
"La relance après une mise à jour revient à l’assistant qui attendait la fermeture d’OpsLog avant de démarrer la nouvelle version. Deux réécritures ont essayé de s’en passer et laissaient certains opérateurs sans fenêtre. Windows Defender peut le signaler — dans ce cas, autorisez OpsLog dans Defender.",
"WSJT-X peut désormais émettre à travers un Icom joint en Ethernet. Réglez sa sortie sur un câble audio virtuel et choisissez ce câble dans Réglages ▸ Audio — OpsLog le diffuse vers la radio pendant que WSJT-X tient le PTT via le CAT partagé."
"WSJT-X peut désormais émettre à travers un Icom joint en Ethernet. Réglez sa sortie sur un câble audio virtuel et choisissez ce câble dans Réglages ▸ Audio — OpsLog le diffuse vers la radio pendant que WSJT-X tient le PTT via le CAT partagé.",
"Le keyer TCI ne porte plus la mention « bientôt » — il fonctionne, et depuis son arrivée. Ce qui était cassé, c’est la carte de Station Control : elle ne regardait que la liaison série WinKeyer, si bien qu’un moteur qui manipule par CAT affichait un voyant rouge, « aucun port » et un bouton Connecter qui ne pouvait qu’échouer — et la carte était même masquée faute de port. Elle indique désormais par quelle liaison passe la manipulation."
'station.valueNeedsLabels':'A URL above uses {value}, which sends the relay’s label — name every relay you switch that way, or its URL goes out with an empty value.',
'station.rigDown':'CAT is on but the radio is not answering',
'station.rigOff':'CAT is switched off','station.noPort':'no port configured',
'station.rigOff':'CAT is switched off','station.noPort':'no port configured','station.keyerViaCat':'via {engine} — no port needed',
'station.connect':'Connect','station.noVoiceMsg':'No message recorded — Settings ▸ Audio.',
'station.title':'Station Control','station.rotator':'Rotator','station.rotateTo':'Rotate to {az}°','station.rotatorNoRead':'No heading read','station.bands':'Bands','station.nudgeUp':'Up {n} kHz','station.nudgeDown':'Down {n} kHz','station.trackOn':'Tracking on','station.trackOff':'Tracking off','station.trackStepTip':'Re-tune only when the rig has moved this far','station.trackModeTip':'When the antenna is allowed to re-tune','station.trackAlways':'Every frequency change','station.trackStep':'Past a step','station.trackBand':'Band change only','station.trackAlwaysTip':'Follow every frequency change. Best resonance, but the motors run constantly — and on a SteppIR every move blocks transmit while the elements travel.','station.trackStepTipMode':'Re-tune only once the rig has moved further than the step. Follows a QSY, ignores tuning around.','station.trackBandTip':'Re-tune only when the band changes. The motors move a few times a day and are left alone within a band.','station.pattern':'Pattern','station.bi':'Bi','station.motorWidgetShow':'Motorised antenna · click to show','station.motorWidgetHide':'Motorised antenna — shown · click to hide','station.hideWidget':'Hide this widget','station.retract':'Retract elements','station.moving':'MOVING','station.elements':'Elements (mm)','station.read':'Read','station.readLengths':'Read current element lengths from the controller','station.noLengths':'Lengths unknown — click Read to fetch them from the controller.','station.element':'Element','station.reflector':'Reflector','station.driven':'Driven','station.director':'Dir','station.set':'Set','station.elementsHint':'Each press lengthens/shortens the element by 2 mm (like the physical console). Verify which element responds on your antenna.','station.setExactLen':'Click to type the exact current length (fixes the baseline if the auto-read is off).','station.atMax':'Controller refused — the element is likely at its maximum length for this band, so it can\'t extend further.','station.go':'Go','station.stop':'Stop','station.dragHint':'Drag the grip handle on the left of a panel to move it. Pick a column count to lay them out in a grid.','station.dragMove':'Drag to move this panel','station.colsAuto':'Auto','station.addDevice':'Add device','station.editDevice':'Edit device','station.empty':'No relay boards yet. Add a WebSwitch 1216H or a KMTronic 8-relay board to control your station power and accessories.','station.online':'Online','station.offline':'Offline','station.edit':'Edit','station.delete':'Delete','station.relay':'Relay','station.on':'ON','station.off':'OFF','station.type':'Device type','station.name':'Name','station.host':'Host / IP','station.hostHint':'LAN IP for local use. To reach the board from OUTSIDE, put a full URL here — e.g. https://relay.yourdomain.com — pointing at a reverse proxy (Nginx Proxy Manager…) that fronts the board’s HTTP port.','station.user':'Username','station.pass':'Password','station.optional':'optional','station.ftdiSerial':'FTDI serial number','station.detect':'Detect','station.ftdiHint':'The Denkovi board is driven via FTDI bit-bang (not the COM port). Pick its serial (e.g. DAE0006K). Needs the FTDI D2XX driver installed.','station.channels':'Relays','station.comPort':'COM port','station.noPorts':'No ports found','station.usbRelayHint':'Cheap USB-serial relay boards (CH340/LCUS) using the A0 command protocol. If yours does not switch, tell me its model / command set.','station.labels':'Relay labels','station.cancel':'Cancel','station.save':'Save','station.test':'Test connection','station.testOk':'Connected — {n} relays','station.testFail':'Not connected','station.detectNone':'No FTDI board found — check the cable and that the D2XX driver is installed.','station.detectFound':'{n} board(s) detected.',
'station.retractTip':'Home the elements into the hubs — the storage position, for a gale or a winter. The next time the antenna is tuned it comes back out on its own.',
@@ -285,7 +285,7 @@ const en: Dict = {
'wk.escClears':'ESC clears the callsign too (otherwise ESC only stops transmission)',
'wk.esm':'ESM — Enter Sends Message (CW)',
'wk.esmHint':'In CW with the keyer on, Enter fires a macro by QSO stage instead of logging: empty callsign → F1 (CQ); callsign entered → F2 (report) and focus jumps to RST; Enter in RST → F3 (TU), which logs if the macro contains <LOGQSO>.',
'wk.engWinkeyer':'WinKeyer (K1EL, serial)','wk.engSerial':'Serial port (DTR=CW / RTS=PTT)','wk.engIcom':'Icom CI-V (rig keyer)','wk.engYaesu':'Yaesu (rig keyer)','wk.yaesuHint':'Keying goes over the CAT link already configured in Settings → CAT — no second COM port. For the FTDX101 / FT-991A / FT-710 family. An FTDX10 does NOT accept it (DAKY included): on that one use the "Serial port (DTR=CW / RTS=PTT)" keyer on its other COM port (the standard one) with PC KEYING on DTR — confirmed working.','wk.catWarnYaesu':'The Yaesu keyer needs the Yaesu CAT backend — CAT is currently {backend}.','wk.engKenwood':'Kenwood / Elecraft (rig keyer)','wk.kenwoodHint':'Keying goes over the CAT link already configured in Settings → CAT (the KY command) — no second COM port. Ideal for an Elecraft K3/K4 whose single USB port is the CAT port.','wk.catWarnKenwood':'The Kenwood/Elecraft keyer needs the Kenwood/Elecraft CAT backend — CAT is currently {backend}.','wk.engFlex':'FlexRadio (CWX)','wk.engTci':'TCI (coming soon)',
'wk.engWinkeyer':'WinKeyer (K1EL, serial)','wk.engSerial':'Serial port (DTR=CW / RTS=PTT)','wk.engIcom':'Icom CI-V (rig keyer)','wk.engYaesu':'Yaesu (rig keyer)','wk.yaesuHint':'Keying goes over the CAT link already configured in Settings → CAT — no second COM port. For the FTDX101 / FT-991A / FT-710 family. An FTDX10 does NOT accept it (DAKY included): on that one use the "Serial port (DTR=CW / RTS=PTT)" keyer on its other COM port (the standard one) with PC KEYING on DTR — confirmed working.','wk.catWarnYaesu':'The Yaesu keyer needs the Yaesu CAT backend — CAT is currently {backend}.','wk.engKenwood':'Kenwood / Elecraft (rig keyer)','wk.kenwoodHint':'Keying goes over the CAT link already configured in Settings → CAT (the KY command) — no second COM port. Ideal for an Elecraft K3/K4 whose single USB port is the CAT port.','wk.catWarnKenwood':'The Kenwood/Elecraft keyer needs the Kenwood/Elecraft CAT backend — CAT is currently {backend}.','wk.engFlex':'FlexRadio (CWX)','wk.engTci':'TCI (SunSDR / Expert Electronics)',
'wk.icomNote':"Icom CI-V keys CW through the rig's own keyer over the existing CAT connection (command 0x17) — it reuses the CAT COM port set in Settings → CAT, so there's nothing else to wire up here. Put the rig in CW mode. Weight, ratio, sidetone, paddle mode… are configured on the radio; only the speed is set from here (the rig's KEY SPEED).",
'wk.flexNote':"FlexRadio keys CW through the radio's CWX keyer over the existing SmartSDR CAT connection — no WinKeyer or SmartCAT needed. It reuses the connection set in Settings → CAT, so there's nothing else to wire up here. Put a slice in CW mode. Only the speed is set from here; weight, sidetone and break-in are configured on the radio (break-in must be on for CW to actually transmit).",
'wk.catWarnIcom':'Your CAT backend is set to {backend}. Icom CI-V CW needs the CAT backend set to Icom and connected — change it under Settings → CAT interface, otherwise sending CW will fail.',
@@ -916,7 +916,7 @@ const fr: Dict = {
'station.valueNeedsLabels':'Une URL ci-dessus utilise {value}, qui envoie le libellé du relais — nomme chaque relais commuté ainsi, sinon son URL part avec une valeur vide.',
'station.title':'Contrôle station','station.rotator':'Rotator','station.rotateTo':'Tourner vers {az}°','station.rotatorNoRead':'Azimut non lu','station.bands':'Bandes','station.nudgeUp':'Monter de {n} kHz','station.nudgeDown':'Descendre de {n} kHz','station.trackOn':'Suivi actif','station.trackOff':'Suivi inactif','station.trackStepTip':'Ne réaccorder que si le rig a bougé d au moins ça','station.trackModeTip':"Quand l'antenne a le droit de se réaccorder",'station.trackAlways':'À chaque changement','station.trackStep':'Au-delà d un pas','station.trackBand':'Changement de bande','station.trackAlwaysTip':"Suivre chaque changement de fréquence. Résonance idéale, mais les moteurs tournent en permanence — et sur une SteppIR chaque déplacement bloque l'émission le temps du mouvement.",'station.trackStepTipMode':"Ne réaccorder qu'une fois le rig sorti du pas. Suit un QSY, ignore la recherche autour.",'station.trackBandTip':"Ne réaccorder qu'au changement de bande. Les moteurs bougent quelques fois par jour et restent tranquilles dans une bande.",'station.pattern':'Diagramme','station.bi':'Bi','station.motorWidgetShow':'Antenne motorisée · cliquer pour afficher','station.motorWidgetHide':'Antenne motorisée — affichée · cliquer pour masquer','station.hideWidget':'Masquer ce widget','station.retract':'Rétracter les éléments','station.moving':'EN MOUVEMENT','station.elements':'Éléments (mm)','station.read':'Lire','station.readLengths':'Lire les longueurs actuelles depuis le contrôleur','station.noLengths':'Longueurs inconnues — clique sur Lire pour les récupérer depuis le contrôleur.','station.element':'Élément','station.reflector':'Réflecteur','station.driven':'Radiateur','station.director':'Dir','station.set':'Régler','station.elementsHint':"Chaque appui allonge/raccourcit l'élément de 2 mm (comme le pupitre). Vérifie quel élément répond sur ton antenne.",'station.setExactLen':"Clique pour taper la longueur actuelle exacte (recale la base si la lecture auto est fausse).",'station.atMax':"Refusé par le contrôleur — l'élément est probablement en butée (longueur max pour cette bande), il ne peut plus s'allonger.",'station.go':'Aller','station.stop':'Stop','station.dragHint':'Glisse la poignée à gauche d un panneau pour le déplacer. Choisis un nombre de colonnes pour la disposition.','station.dragMove':'Glisser pour déplacer ce panneau','station.colsAuto':'Auto','station.addDevice':'Ajouter un appareil','station.editDevice':"Modifier l'appareil",'station.empty':"Aucune carte relais. Ajoute un WebSwitch 1216H ou une carte KMTronic 8 relais pour piloter l'alimentation et les accessoires de ta station.",'station.online':'En ligne','station.offline':'Hors ligne','station.edit':'Modifier','station.delete':'Supprimer','station.relay':'Relais','station.on':'ON','station.off':'OFF','station.type':"Type d'appareil",'station.name':'Nom','station.host':'Hôte / IP','station.hostHint':"IP du LAN en local. Pour joindre la carte depuis L'EXTÉRIEUR, saisis une URL complète ici — ex. https://relais.tondomaine.com — pointant vers un reverse proxy (Nginx Proxy Manager…) qui expose le port HTTP de la carte.",'station.user':"Nom d'utilisateur",'station.pass':'Mot de passe','station.optional':'optionnel','station.ftdiSerial':'Numéro de série FTDI','station.detect':'Détecter','station.ftdiHint':"La carte Denkovi se pilote en FTDI bit-bang (pas via le port COM). Choisis son numéro de série (ex. DAE0006K). Nécessite le driver FTDI D2XX installé.",'station.channels':'Relais','station.comPort':'Port COM','station.noPorts':'Aucun port','station.usbRelayHint':"Cartes USB-série bon marché (CH340/LCUS) protocole A0. Si la tienne ne commute pas, donne-moi le modèle / jeu de commandes.",'station.labels':'Libellés des relais','station.cancel':'Annuler','station.save':'Enregistrer','station.test':'Tester la connexion','station.testOk':'Connecté — {n} relais','station.testFail':'Non connecté','station.detectNone':'Aucune carte FTDI trouvée — vérifie le câble et que le driver D2XX est installé.','station.detectFound':'{n} carte(s) détectée(s).',
'station.retractTip':'Rentrer les éléments dans les moyeux — la position de rangement, pour un coup de vent ou pour l’hiver. Au prochain accord, l’antenne ressort d’elle-même.',
@@ -934,7 +934,7 @@ const fr: Dict = {
'wk.escClears':"ÉCHAP efface aussi l'indicatif (sinon ÉCHAP arrête seulement la transmission)",
'wk.esm':'ESM — Entrée envoie le message (CW)',
'wk.esmHint':"En CW avec le keyer actif, Entrée envoie un macro selon l'étape du QSO au lieu de loguer : indicatif vide → F1 (CQ) ; indicatif saisi → F2 (report) et le focus passe au RST ; Entrée dans le RST → F3 (TU), qui logue si le macro contient <LOGQSO>.",
'wk.engWinkeyer':'WinKeyer (K1EL, série)','wk.engSerial':'Port série (DTR=CW / RTS=PTT)','wk.engIcom':'Icom CI-V (keyer de la radio)','wk.engYaesu':'Yaesu (keyer de la radio)','wk.yaesuHint':"La manipulation passe par la liaison CAT déjà configurée dans Réglages → CAT — sans second port COM. Pour la famille FTDX101 / FT-991A / FT-710. Un FTDX10 ne l'accepte PAS (DAKY compris) : sur celui-ci, utilisez le keyer « Port série (DTR=CW / RTS=PTT) » sur son autre port COM (le standard) avec PC KEYING sur DTR — confirmé fonctionnel.",'wk.catWarnYaesu':'Le keyer Yaesu nécessite le backend CAT Yaesu — le CAT est actuellement : {backend}.','wk.engKenwood':'Kenwood / Elecraft (keyer de la radio)','wk.kenwoodHint':"La manipulation passe par la liaison CAT déjà configurée dans Réglages → CAT (la commande KY) — sans second port COM. Idéal pour un Elecraft K3/K4 dont l'unique port USB est le port CAT.",'wk.catWarnKenwood':'Le keyer Kenwood/Elecraft nécessite le backend CAT Kenwood/Elecraft — le CAT est actuellement : {backend}.','wk.engFlex':'FlexRadio (CWX)','wk.engTci':'TCI (bientôt)',
'wk.engWinkeyer':'WinKeyer (K1EL, série)','wk.engSerial':'Port série (DTR=CW / RTS=PTT)','wk.engIcom':'Icom CI-V (keyer de la radio)','wk.engYaesu':'Yaesu (keyer de la radio)','wk.yaesuHint':"La manipulation passe par la liaison CAT déjà configurée dans Réglages → CAT — sans second port COM. Pour la famille FTDX101 / FT-991A / FT-710. Un FTDX10 ne l'accepte PAS (DAKY compris) : sur celui-ci, utilisez le keyer « Port série (DTR=CW / RTS=PTT) » sur son autre port COM (le standard) avec PC KEYING sur DTR — confirmé fonctionnel.",'wk.catWarnYaesu':'Le keyer Yaesu nécessite le backend CAT Yaesu — le CAT est actuellement : {backend}.','wk.engKenwood':'Kenwood / Elecraft (keyer de la radio)','wk.kenwoodHint':"La manipulation passe par la liaison CAT déjà configurée dans Réglages → CAT (la commande KY) — sans second port COM. Idéal pour un Elecraft K3/K4 dont l'unique port USB est le port CAT.",'wk.catWarnKenwood':'Le keyer Kenwood/Elecraft nécessite le backend CAT Kenwood/Elecraft — le CAT est actuellement : {backend}.','wk.engFlex':'FlexRadio (CWX)','wk.engTci':'TCI (SunSDR / Expert Electronics)',
'wk.icomNote':"L'Icom CI-V manipule la CW via le keyer interne de la radio sur la connexion CAT existante (commande 0x17) — il réutilise le port COM CAT défini dans Réglages → CAT, rien d'autre à câbler ici. Mets la radio en mode CW. Poids, ratio, sidetone, mode paddle… se règlent sur la radio ; seule la vitesse est définie ici (KEY SPEED de la radio).",
'wk.flexNote':"FlexRadio manipule la CW via le keyer CWX de la radio sur la connexion SmartSDR CAT existante — pas besoin de WinKeyer ni de SmartCAT. Il réutilise la connexion définie dans Réglages → CAT, rien d'autre à câbler ici. Mets une slice en mode CW. Seule la vitesse est définie ici ; poids, sidetone et break-in se règlent sur la radio (le break-in doit être activé pour que la CW parte vraiment).",
'wk.catWarnIcom':"Ton backend CAT est réglé sur {backend}. La CW Icom CI-V nécessite le backend CAT réglé sur Icom et connecté — change-le dans Réglages → Interface CAT, sinon l'envoi CW échouera.",
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.