Skip to content

Commit 91e56b4

Browse files
committed
Added support for Hamlib
1 parent aedcffe commit 91e56b4

File tree

3 files changed

+112
-49
lines changed

3 files changed

+112
-49
lines changed

index.html

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -185,41 +185,41 @@
185185
</div>
186186
<div class="row">
187187
<div class="col">
188-
<div class="mb-3 col-mb3">
188+
<div class="mb-3">
189189
<label for="wavelog_radioname">Radio Name</label>
190-
<input type="text" class="form-control form-control-sm" name="wavelog_radioname"
191-
id="wavelog_radioname" value="" />
190+
<input type="text" class="form-control form-control-sm" name="wavelog_radioname" id="wavelog_radioname" value="" />
192191
</div>
193192
</div>
194193
<div class="col">
195-
<div class="mb-2 col-mb-2"></div>
194+
<div class="mb-3">
195+
<label for="flrig_host">Rig Host</label>
196+
<input type="text" class="form-control form-control-sm" name="flrig_host" id="flrig_host" value="" />
197+
</div>
196198
</div>
197199
<div class="col">
198-
<div class="mb-1 col-mb-1">
199-
<label for="wavelog_pmode" class="text-center">Set MODE via FLRig</label>
200-
<input type="checkbox" value="1" class="form-control form-control-sm" name="wavelog_pmode" id="wavelog_pmode" title="Try to set Mode automatically" value="" />
200+
<div class="mb-3">
201+
<label for="flrig_port">Rig Port</label>
202+
<input type="number" class="form-control form-control-sm" name="flrig_port" id="flrig_port" value="" />
201203
</div>
202204
</div>
203205
</div>
204206
<div class="row">
205207
<div class="col">
206-
<div class="mb-3 col-mb-3">
207-
<label for="flrig_host">FLRig Host</label>
208-
<input type="text" class="form-control form-control-sm" name="flrig_host"
209-
id="flrig_host" value="" />
208+
<div class="mb-3">
209+
<label for="flrig_ena" style="text-align: center">FLRig<br>Enabled</label>
210+
<input type="checkbox" value="1" class="form-control form-control-sm" name="flrig_ena" id="flrig_ena" />
210211
</div>
211212
</div>
212213
<div class="col">
213-
<div class="mb-2 col-mb-2">
214-
<label for="flrig_port">FLRig Port</label>
215-
<input type="number" class="form-control form-control-sm" name="flrig_port"
216-
id="flrig_port" value="" />
214+
<div class="mb-3">
215+
<label for="hamlib_ena" style="text-align: center">Hamlib Enabled</label>
216+
<input type="checkbox" value="1" class="form-control form-control-sm" name="hamlib_ena" id="hamlib_ena" />
217217
</div>
218218
</div>
219219
<div class="col">
220-
<div class="mb-1 col-mb-1">
221-
<label for="flrig_ena">FLRig Enabled</label>
222-
<input type="checkbox" value="1" class="form-control form-control-sm" name="flrig_ena" id="flrig_ena" value="" />
220+
<div class="mb-3">
221+
<label for="wavelog_pmode" style="text-align: center">Set MODE via FLRig</label>
222+
<input type="checkbox" value="1" class="form-control form-control-sm" name="wavelog_pmode" id="wavelog_pmode" title="Try to set Mode automatically" />
223223
</div>
224224
</div>
225225
</div>

main.js

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const path = require('node:path');
33
const {ipcMain} = require('electron')
44
const http = require('http');
55
const xml = require("xml2js");
6+
const net = require('net');
67

78
let s_mainWindow;
89
let msgbacklog=[];
@@ -332,29 +333,43 @@ async function settrx(qrg) {
332333
} else {
333334
to.mode='USB';
334335
}
335-
postData= '<?xml version="1.0"?>';
336-
postData+='<methodCall><methodName>main.set_frequency</methodName><params><param><value><double>' + to.qrg + '</double></value></param></params></methodCall>';
337-
var options = {
338-
method: 'POST',
339-
headers: {
340-
'User-Agent': 'SW2WL_v' + app.getVersion(),
341-
'Content-Length': postData.length
342-
}
343-
};
344-
let url="http://"+defaultcfg.flrig_host+':'+defaultcfg.flrig_port+'/';
345-
x=await httpPost(url,options,postData);
346-
347-
if (defaultcfg.wavelog_pmode) {
336+
if (defaultcfg.flrig_ena) {
348337
postData= '<?xml version="1.0"?>';
349-
postData+='<methodCall><methodName>rig.set_modeA</methodName><params><param><value>' + to.mode + '</value></param></params></methodCall>';
338+
postData+='<methodCall><methodName>main.set_frequency</methodName><params><param><value><double>' + to.qrg + '</double></value></param></params></methodCall>';
350339
var options = {
351340
method: 'POST',
352341
headers: {
353342
'User-Agent': 'SW2WL_v' + app.getVersion(),
354343
'Content-Length': postData.length
355344
}
356345
};
346+
let url="http://"+defaultcfg.flrig_host+':'+defaultcfg.flrig_port+'/';
357347
x=await httpPost(url,options,postData);
348+
349+
if (defaultcfg.wavelog_pmode) {
350+
postData= '<?xml version="1.0"?>';
351+
postData+='<methodCall><methodName>rig.set_modeA</methodName><params><param><value>' + to.mode + '</value></param></params></methodCall>';
352+
var options = {
353+
method: 'POST',
354+
headers: {
355+
'User-Agent': 'SW2WL_v' + app.getVersion(),
356+
'Content-Length': postData.length
357+
}
358+
};
359+
x=await httpPost(url,options,postData);
360+
}
361+
}
362+
if (defaultcfg.hamlib_ena) {
363+
const client = net.createConnection({ host: defaultcfg.flrig_host, port: defaultcfg.flrig_port }, () => {
364+
client.write("F " + to.qrg + "\n");
365+
if (defaultcfg.wavelog_pmode) {
366+
client.write("M " + to.mode + "\n-1");
367+
}
368+
client.end();
369+
});
370+
371+
client.on("error", (err) => {});
372+
client.on("close", () => {});
358373
}
359374

360375
return true;

renderer.js

Lines changed: 65 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
var cfg={};
1111

1212
const {ipcRenderer} = require('electron')
13+
const net = require('net');
1314

1415
const bt_save=select("#save");
1516
const bt_quit=select("#quit");
@@ -28,8 +29,23 @@ $(document).ready(function() {
2829
$("#flrig_host").val(cfg.flrig_host);
2930
$("#flrig_port").val(cfg.flrig_port);
3031
$("#flrig_ena").prop("checked", cfg.flrig_ena);
32+
$("#hamlib_ena").prop("checked", cfg.hamlib_ena);
3133
$("#wavelog_pmode").prop("checked", cfg.wavelog_pmode);
3234

35+
$("#flrig_ena").change(function () {
36+
if ($(this).prop("checked")) {
37+
$("#hamlib_ena").prop("checked", false);
38+
$("#flrig_port").val('12345');
39+
}
40+
});
41+
42+
$("#hamlib_ena").change(function () {
43+
if ($(this).prop("checked")) {
44+
$("#flrig_ena").prop("checked", false);
45+
$("#flrig_port").val('4532');
46+
}
47+
});
48+
3349
bt_save.addEventListener('click', () => {
3450
cfg.wavelog_url=$("#wavelog_url").val().trim();
3551
cfg.wavelog_key=$("#wavelog_key").val().trim();
@@ -38,6 +54,7 @@ $(document).ready(function() {
3854
cfg.flrig_host=$("#flrig_host").val().trim();
3955
cfg.flrig_port=$("#flrig_port").val().trim();
4056
cfg.flrig_ena=$("#flrig_ena").is(':checked');
57+
cfg.hamlib_ena=$("#hamlib_ena").is(':checked');
4158
cfg.wavelog_pmode=$("#wavelog_pmode").is(':checked');
4259
x=ipcRenderer.sendSync("set_config", cfg);
4360
console.log(x);
@@ -88,6 +105,10 @@ $(document).ready(function() {
88105
getsettrx();
89106
});
90107

108+
$("#hamlib_ena").on( "click",function() {
109+
getsettrx();
110+
});
111+
91112
setInterval(updateUtcTime, 1000);
92113
window.onload = updateUtcTime;
93114

@@ -151,26 +172,53 @@ async function get_trx() {
151172
}
152173

153174
async function getInfo(which) {
154-
const response = await fetch(
155-
"http://"+$("#flrig_host").val()+':'+$("#flrig_port").val(), {
156-
method: 'POST',
157-
// mode: 'no-cors',
158-
headers: {
159-
'Accept': 'application/json, application/xml, text/plain, text/html, *.*',
160-
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
161-
},
162-
body: '<?xml version="1.0"?><methodCall><methodName>'+which+'</methodName></methodCall>'
163-
}
164-
);
165-
const data = await response.text();
166-
var parser = new DOMParser();
167-
var xmlDoc = parser.parseFromString(data, "text/xml");
168-
var qrgplain = xmlDoc.getElementsByTagName("value")[0].textContent;
169-
return qrgplain;
175+
if (cfg.flrig_ena){
176+
const response = await fetch(
177+
"http://"+$("#flrig_host").val()+':'+$("#flrig_port").val(), {
178+
method: 'POST',
179+
// mode: 'no-cors',
180+
headers: {
181+
'Accept': 'application/json, application/xml, text/plain, text/html, *.*',
182+
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
183+
},
184+
body: '<?xml version="1.0"?><methodCall><methodName>'+which+'</methodName></methodCall>'
185+
}
186+
);
187+
const data = await response.text();
188+
var parser = new DOMParser();
189+
var xmlDoc = parser.parseFromString(data, "text/xml");
190+
var qrgplain = xmlDoc.getElementsByTagName("value")[0].textContent;
191+
return qrgplain;
192+
}
193+
if (cfg.hamlib_ena) {
194+
var commands = {"rig.get_vfo": "f", "rig.get_mode": "m", "rig.get_ptt": 0, "rig.get_power": 0, "rig.get_split": 0, "rig.get_vfoB": 0, "rig.get_modeB": 0};
195+
196+
const host = $("#flrig_host").val();
197+
const port = parseInt($("#flrig_port").val(), 10);
198+
199+
return new Promise((resolve, reject) => {
200+
if (commands[which]) {
201+
const client = net.createConnection({ host, port }, () => client.write(commands[which]));
202+
client.on('data', (data) => {
203+
data = data.toString()
204+
if(data.startsWith("RPRT")){
205+
reject();
206+
} else {
207+
resolve(data.split('\n')[0]);
208+
}
209+
client.end();
210+
});
211+
client.on('error', (err) => reject());
212+
client.on("close", () => {});
213+
} else {
214+
resolve(undefined);
215+
}
216+
});
217+
}
170218
}
171219

172220
async function getsettrx() {
173-
if ($("#flrig_ena").is(':checked')) {
221+
if ($("#flrig_ena").is(':checked') || $("#hamlib_ena").is(':checked')) {
174222
x=await get_trx();
175223
setTimeout(() => {
176224
getsettrx();

0 commit comments

Comments
 (0)