Skip to content

Commit d9964b2

Browse files
authored
Merge pull request #66 from int2001/multiradio
Support also Radios with "strange" CW-Modes
2 parents b1d0148 + bb1c4f1 commit d9964b2

File tree

3 files changed

+66
-7
lines changed

3 files changed

+66
-7
lines changed

main.js

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ if (!gotTheLock) {
252252
s_mainWindow.hide();
253253
}
254254
});
255-
if (process.platform === 'darwin') {
255+
if (app.isPackaged && (process.platform === 'darwin')) {
256256
app.dock.hide();
257257
}
258258
})
@@ -515,11 +515,52 @@ function startserver() {
515515
}
516516
}
517517

518+
519+
async function get_modes() {
520+
return new Promise((resolve) => {
521+
ipcMain.once('get_info_result', (event, modes) => {
522+
resolve(modes);
523+
});
524+
s_mainWindow.webContents.send('get_info', 'rig.get_modes');
525+
});
526+
}
527+
528+
function getClosestMode(requestedMode, availableModes) {
529+
if (availableModes.includes(requestedMode)) { // Check perfect matches
530+
return requestedMode;
531+
}
532+
533+
const modeFallbacks = {
534+
'CW': ['CW-L', 'CW-R', 'CW', 'LSB', 'USB'],
535+
'RTTY': ['RTTY', 'RTTY-R'],
536+
};
537+
538+
if (modeFallbacks[requestedMode]) {
539+
for (let variant of modeFallbacks[requestedMode]) {
540+
if (availableModes.includes(variant)) {
541+
return variant;
542+
}
543+
}
544+
}
545+
546+
const found = availableModes.find(mode =>
547+
mode.toUpperCase().startsWith(requestedMode.toUpperCase())
548+
);
549+
if (found) return found;
550+
return null;
551+
}
552+
518553
async function settrx(qrg, mode = '') {
554+
let avail_modes={};
555+
try {
556+
avail_modes=await get_modes();
557+
} catch(e) {
558+
avail_modes=[];
559+
}
519560
let to={};
520561
to.qrg=qrg;
521562
if (mode == 'cw') {
522-
to.mode='CW';
563+
to.mode=getClosestMode(mode,avail_modes);
523564
} else {
524565
if ((to.qrg) < 7999000) {
525566
to.mode='LSB';

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "Gateway for connecting WSJT-* and FLRig to Wavelog",
55
"keywords": [],
66
"main": "./main.js",
7-
"version": "1.1.8",
7+
"version": "1.1.9",
88
"author": "DJ7NT",
99
"scripts": {
1010
"start": "electron-forge start",

renderer.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ $(document).ready(function() {
116116
obj.ani=false;
117117
resizeme(obj);
118118
});
119+
120+
ipcRenderer.on('get_info', async (event, arg) => {
121+
const result = await getInfo(arg);
122+
ipcRenderer.send('get_info_result', result);
123+
});
119124
});
120125

121126
async function load_config() {
@@ -196,10 +201,23 @@ async function getInfo(which) {
196201
}
197202
);
198203
const data = await response.text();
199-
var parser = new DOMParser();
200-
var xmlDoc = parser.parseFromString(data, "text/xml");
201-
var qrgplain = xmlDoc.getElementsByTagName("value")[0].textContent;
202-
return qrgplain;
204+
const parser = new DOMParser();
205+
const xmlDoc = parser.parseFromString(data, "application/xml");
206+
207+
const valueNode = xmlDoc.querySelector("methodResponse > params > param > value");
208+
209+
if (!valueNode) {
210+
return null;
211+
}
212+
213+
const arrayNode = valueNode.querySelector("array > data");
214+
if (arrayNode) {
215+
const items = Array.from(arrayNode.querySelectorAll("value string, value"))
216+
.map(node => node.textContent.trim());
217+
return items;
218+
} else {
219+
return valueNode.textContent.trim();
220+
}
203221
} catch (e) {
204222
return '';
205223
}

0 commit comments

Comments
 (0)