From 35d95bbb14a4e80155f3b7a33bbde34d23b31450 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Tue, 8 Feb 2022 15:27:34 +0100 Subject: [PATCH] 500hz mode, protocol improvements.... ...and a lot of different changes. Also deactivated single mode transmission. This needs to be optimised another day...Time is the missing ressource... --- gui/daemon.js | 14 +- gui/main.js | 35 +- gui/preload-main.js | 789 ++++++++++++++++++++++---------------------- gui/sock.js | 20 +- gui/src/index.html | 23 +- tnc/codec2.py | 4 +- tnc/daemon.py | 21 +- tnc/data_handler.py | 321 +++++++++++------- tnc/main.py | 7 +- tnc/rig.py | 17 +- tnc/sock.py | 144 ++------ tnc/static.py | 7 + 12 files changed, 709 insertions(+), 693 deletions(-) diff --git a/gui/daemon.js b/gui/daemon.js index 82f01399..909ef0c7 100644 --- a/gui/daemon.js +++ b/gui/daemon.js @@ -32,7 +32,7 @@ function connectDAEMON() { //client.setTimeout(5000); } -daemon.on('connect', function(data) { +daemon.on('connect', function(err) { console.log('DAEMON connection established') let Data = { daemon_connection: daemon.readyState, @@ -41,8 +41,10 @@ daemon.on('connect', function(data) { }) -daemon.on('error', function(data) { +daemon.on('error', function(err) { console.log('DAEMON connection error'); + console.log(err) + daemon.destroy(); setTimeout(connectDAEMON, 2000) let Data = { daemon_connection: daemon.readyState, @@ -64,7 +66,8 @@ client.on('close', function(data) { daemon.on('end', function(data) { console.log('DAEMON connection ended'); - setTimeout(connectDAEMON, 2000) + daemon.destroy(); + setTimeout(connectDAEMON, 500) let Data = { daemon_connection: daemon.readyState, }; @@ -198,7 +201,7 @@ exports.getDaemonState = function() { // START TNC // ` `== multi line string -exports.startTNC = function(mycall, mygrid, rx_audio, tx_audio, radiocontrol, devicename, deviceport, pttprotocol, pttport, serialspeed, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port, enable_fft, enable_scatter) { +exports.startTNC = function(mycall, mygrid, rx_audio, tx_audio, radiocontrol, devicename, deviceport, pttprotocol, pttport, serialspeed, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port, enable_fft, enable_scatter, low_bandwith_mode) { var json_command = JSON.stringify({ type: 'set', command: 'start_tnc', @@ -219,7 +222,8 @@ exports.startTNC = function(mycall, mygrid, rx_audio, tx_audio, radiocontrol, de rigctld_port: rigctld_port, rigctld_ip: rigctld_ip, enable_scatter: enable_scatter, - enable_fft: enable_fft + enable_fft: enable_fft, + low_bandwith_mode : low_bandwith_mode }] }) diff --git a/gui/main.js b/gui/main.js index 81004672..c9063920 100644 --- a/gui/main.js +++ b/gui/main.js @@ -2,15 +2,15 @@ const { app, BrowserWindow, ipcMain -} = require('electron') -const path = require('path') -const fs = require('fs') +} = require('electron'); +const path = require('path'); +const fs = require('fs'); const os = require('os'); app.setName("FreeDATA"); -var appDataFolder = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Application Support' : process.env.HOME + "/.config") +var appDataFolder = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Application Support' : process.env.HOME + "/.config"); var configFolder = path.join(appDataFolder, "FreeDATA"); -var configPath = path.join(configFolder, 'config.json') +var configPath = path.join(configFolder, 'config.json'); // create config folder if not exists if (!fs.existsSync(configFolder)) { @@ -44,6 +44,7 @@ var configContent = ` "rigctld_ip" : "127.0.0.1", "enable_scatter" : "False", "enable_fft" : "False", + "low_bandwith_mode" : "False" } `; @@ -67,7 +68,7 @@ var configContent = ` } `; if (!fs.existsSync(chatDB)) { - fs.writeFileSync(chatDB, configContent) + fs.writeFileSync(chatDB, configContent); } @@ -134,8 +135,8 @@ function createWindow() { } }) - chat.loadFile('src/chat-module.html') - chat.setMenuBarVisibility(false) + chat.loadFile('src/chat-module.html'); + chat.setMenuBarVisibility(false); // Emitted when the window is closed. @@ -158,13 +159,13 @@ function createWindow() { // https://stackoverflow.com/questions/44258831/only-hide-the-window-when-closing-it-electron chat.on('close', function(evt) { evt.preventDefault(); - chat.hide() + chat.hide(); }); } app.whenReady().then(() => { - createWindow() + createWindow(); // start daemon by checking os // https://stackoverflow.com/a/5775120 @@ -173,8 +174,8 @@ app.whenReady().then(() => { if(os.platform()=='linux' || os.platform()=='darwin'){ daemonProcess = exec('./tnc/daemon', function callback(err, stdout, stderr) { if (err) { - console.log(os.platform()) - console.error(err) + console.log(os.platform()); + console.error(err); console.error("Can't start daemon binary"); console.error("--> this is only working with the app bundle and a precompiled binaries"); return; @@ -186,8 +187,8 @@ app.whenReady().then(() => { if(os.platform()=='win32' || os.platform()=='win64'){ daemonProcess = exec('./tnc/daemon.exe', function callback(err, stdout, stderr) { if (err) { - console.log(os.platform()) - console.error(err) + console.log(os.platform()); + console.error(err); console.error("Can't start daemon binary"); console.error("--> this is only working with the app bundle and a precompiled binaries"); return; @@ -200,7 +201,7 @@ app.whenReady().then(() => { app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { - createWindow() + createWindow(); } }) }) @@ -210,14 +211,14 @@ app.on('window-all-closed', () => { daemonProcess.kill('SIGINT'); if (process.platform !== 'darwin') { - app.quit() + app.quit(); } }) // IPC HANDLER ipcMain.on('request-show-chat-window', (event, arg) => { - chat.show() + chat.show(); }); diff --git a/gui/preload-main.js b/gui/preload-main.js index 0f7e276a..6814972d 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -1,7 +1,7 @@ -const path = require('path') +const path = require('path'); const { ipcRenderer -} = require('electron') +} = require('electron'); const sock = require('./sock.js'); const daemon = require('./daemon.js'); const fs = require('fs'); @@ -18,16 +18,16 @@ const split_char = '\0;' // https://stackoverflow.com/a/26227660 -var appDataFolder = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Application Support' : process.env.HOME + "/.config") +var appDataFolder = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Application Support' : process.env.HOME + "/.config"); var configFolder = path.join(appDataFolder, "FreeDATA"); -var configPath = path.join(configFolder, 'config.json') +var configPath = path.join(configFolder, 'config.json'); const config = require(configPath); // START INTERVALL COMMAND EXECUTION FOR STATES -//setInterval(daemon.getDaemonState, 1000) -//setInterval(sock.getTncState, 150) -setInterval(sock.getRxBuffer, 1000) -setInterval(sock.getMsgRxBuffer, 1000) +//setInterval(daemon.getDaemonState, 1000); +//setInterval(sock.getTncState, 150); +setInterval(sock.getRxBuffer, 1000); +setInterval(sock.getMsgRxBuffer, 1000); // WINDOW LISTENER window.addEventListener('DOMContentLoaded', () => { @@ -45,63 +45,68 @@ window.addEventListener('DOMContentLoaded', () => { // https://getbootstrap.com/docs/5.1/components/tooltips/ var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { - return new bootstrap.Tooltip(tooltipTriggerEl) + return new bootstrap.Tooltip(tooltipTriggerEl); }) // LOAD SETTINGS - document.getElementById("tnc_adress").value = config.tnc_host - document.getElementById("tnc_port").value = config.tnc_port - document.getElementById("myCall").value = config.mycall - document.getElementById("myGrid").value = config.mygrid + document.getElementById("tnc_adress").value = config.tnc_host; + document.getElementById("tnc_port").value = config.tnc_port; + document.getElementById("myCall").value = config.mycall; + document.getElementById("myGrid").value = config.mygrid; - document.getElementById('hamlib_deviceid').value = config.deviceid - document.getElementById('hamlib_serialspeed').value = config.serialspeed - document.getElementById('hamlib_ptt_protocol').value = config.pttprotocol + document.getElementById('hamlib_deviceid').value = config.deviceid; + document.getElementById('hamlib_serialspeed').value = config.serialspeed; + document.getElementById('hamlib_ptt_protocol').value = config.pttprotocol; - document.getElementById("hamlib_rigctld_ip").value = config.rigctld_ip - document.getElementById("hamlib_rigctld_port").value = config.rigctld_port + document.getElementById("hamlib_rigctld_ip").value = config.rigctld_ip; + document.getElementById("hamlib_rigctld_port").value = config.rigctld_port; - document.getElementById("hamlib_deviceid_rigctl").value = config.deviceid_rigctl - document.getElementById("hamlib_serialspeed_rigctl").value = config.serialspeed_rigctl - document.getElementById("hamlib_ptt_protocol_rigctl").value = config.pttprotocol_rigctl + document.getElementById("hamlib_deviceid_rigctl").value = config.deviceid_rigctl; + document.getElementById("hamlib_serialspeed_rigctl").value = config.serialspeed_rigctl; + document.getElementById("hamlib_ptt_protocol_rigctl").value = config.pttprotocol_rigctl; - document.getElementById('hamlib_serialspeed_advanced').value = config.serialspeed - document.getElementById('hamlib_ptt_protocol_advanced').value = config.pttprotocol - document.getElementById('hamlib_databits_advanced').value = config.data_bits - document.getElementById('hamlib_stopbits_advanced').value = config.stop_bits - document.getElementById('hamlib_handshake_advanced').value = config.handshake + document.getElementById('hamlib_serialspeed_advanced').value = config.serialspeed; + document.getElementById('hamlib_ptt_protocol_advanced').value = config.pttprotocol; + document.getElementById('hamlib_databits_advanced').value = config.data_bits; + document.getElementById('hamlib_stopbits_advanced').value = config.stop_bits; + document.getElementById('hamlib_handshake_advanced').value = config.handshake; - document.getElementById("beaconInterval").value = config.beacon_interval + document.getElementById("beaconInterval").value = config.beacon_interval; - document.getElementById("beaconInterval").value = config.enable_scatter - document.getElementById("beaconInterval").value = config.enable_fft - + document.getElementById("scatterSwitch").value = config.enable_scatter; + document.getElementById("fftSwitch").value = config.enable_fft; + document.getElementById("500HzModeSwitch").value = config.low_bandwith_mode; + if(config.enable_scatter == 'True'){ - document.getElementById("scatterSwitch").checked = true + document.getElementById("scatterSwitch").checked = true; } else { - document.getElementById("scatterSwitch").checked = false + document.getElementById("scatterSwitch").checked = false; } if(config.enable_fft == 'True'){ - document.getElementById("fftSwitch").checked = true + document.getElementById("fftSwitch").checked = true; } else { - document.getElementById("fftSwitch").checked = false + document.getElementById("fftSwitch").checked = false; } - + + if(config.low_bandwith_mode == 'True'){ + document.getElementById("500HzModeSwitch").checked = true; + } else { + document.getElementById("500HzModeSwitch").checked = false; + } - if (config.spectrum == 'waterfall') { - document.getElementById("waterfall-scatter-switch1").checked = true - document.getElementById("waterfall-scatter-switch2").checked = false + document.getElementById("waterfall-scatter-switch1").checked = true; + document.getElementById("waterfall-scatter-switch2").checked = false; document.getElementById("scatter").style.visibility = 'hidden'; document.getElementById("waterfall").style.visibility = 'visible'; document.getElementById("waterfall").style.height = '100%'; } else { - document.getElementById("waterfall-scatter-switch1").checked = false - document.getElementById("waterfall-scatter-switch2").checked = true + document.getElementById("waterfall-scatter-switch1").checked = false; + document.getElementById("waterfall-scatter-switch2").checked = true; document.getElementById("scatter").style.visibility = 'visible'; document.getElementById("waterfall").style.visibility = 'hidden'; document.getElementById("waterfall").style.height = '0px'; @@ -110,10 +115,10 @@ window.addEventListener('DOMContentLoaded', () => { // radio control element if (config.radiocontrol == 'direct') { - document.getElementById("radio-control-switch0").checked = false - document.getElementById("radio-control-switch1").checked = true - document.getElementById("radio-control-switch2").checked = false - document.getElementById("radio-control-switch3").checked = false + document.getElementById("radio-control-switch0").checked = false; + document.getElementById("radio-control-switch1").checked = true; + document.getElementById("radio-control-switch2").checked = false; + document.getElementById("radio-control-switch3").checked = false; document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; @@ -127,10 +132,10 @@ window.addEventListener('DOMContentLoaded', () => { } else if (config.radiocontrol == 'rigctl') { - document.getElementById("radio-control-switch0").checked = false - document.getElementById("radio-control-switch1").checked = false - document.getElementById("radio-control-switch2").checked = true - document.getElementById("radio-control-switch3").checked = false + document.getElementById("radio-control-switch0").checked = false; + document.getElementById("radio-control-switch1").checked = false; + document.getElementById("radio-control-switch2").checked = true; + document.getElementById("radio-control-switch3").checked = false; document.getElementById("radio-control-direct").style.visibility = 'hidden'; document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; @@ -143,10 +148,10 @@ window.addEventListener('DOMContentLoaded', () => { } else if (config.radiocontrol == 'rigctld') { - document.getElementById("radio-control-switch0").checked = false - document.getElementById("radio-control-switch1").checked = false - document.getElementById("radio-control-switch2").checked = false - document.getElementById("radio-control-switch3").checked = true + document.getElementById("radio-control-switch0").checked = false; + document.getElementById("radio-control-switch1").checked = false; + document.getElementById("radio-control-switch2").checked = false; + document.getElementById("radio-control-switch3").checked = true; document.getElementById("radio-control-direct").style.visibility = 'hidden'; document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; @@ -159,10 +164,10 @@ window.addEventListener('DOMContentLoaded', () => { } else { - document.getElementById("radio-control-switch0").checked = true - document.getElementById("radio-control-switch1").checked = false - document.getElementById("radio-control-switch2").checked = false - document.getElementById("radio-control-switch3").checked = false + document.getElementById("radio-control-switch0").checked = true; + document.getElementById("radio-control-switch1").checked = false; + document.getElementById("radio-control-switch2").checked = false; + document.getElementById("radio-control-switch3").checked = false; document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; @@ -177,12 +182,12 @@ window.addEventListener('DOMContentLoaded', () => { // remote tnc if (config.tnclocation == 'remote') { - document.getElementById("local-remote-switch1").checked = false - document.getElementById("local-remote-switch2").checked = true + document.getElementById("local-remote-switch1").checked = false; + document.getElementById("local-remote-switch2").checked = true; document.getElementById("remote-tnc-field").style.visibility = 'visible'; } else { - document.getElementById("local-remote-switch1").checked = true - document.getElementById("local-remote-switch2").checked = false + document.getElementById("local-remote-switch1").checked = true; + document.getElementById("local-remote-switch2").checked = false; document.getElementById("remote-tnc-field").style.visibility = 'hidden'; } @@ -220,7 +225,7 @@ window.addEventListener('DOMContentLoaded', () => { document.getElementById("radio-control-direct").style.display = 'block'; document.getElementById("radio-control-direct").style.visibility = 'visible'; document.getElementById("radio-control-direct").style.height = '100%'; - config.radiocontrol = 'direct' + config.radiocontrol = 'direct'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); @@ -234,7 +239,7 @@ window.addEventListener('DOMContentLoaded', () => { document.getElementById("radio-control-rigctl").style.display = 'block'; document.getElementById("radio-control-rigctl").style.visibility = 'visible'; document.getElementById("radio-control-rigctl").style.height = '100%'; - config.radiocontrol = 'rigctl' + config.radiocontrol = 'rigctl'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); @@ -248,7 +253,7 @@ window.addEventListener('DOMContentLoaded', () => { document.getElementById("radio-control-rigctld").style.display = 'block'; document.getElementById("radio-control-rigctld").style.visibility = 'visible'; document.getElementById("radio-control-rigctld").style.height = '100%'; - config.radiocontrol = 'rigctld' + config.radiocontrol = 'rigctld'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); @@ -259,7 +264,7 @@ window.addEventListener('DOMContentLoaded', () => { document.getElementById("scatter").style.visibility = 'hidden'; document.getElementById("waterfall").style.visibility = 'visible'; document.getElementById("waterfall").style.height = '100%'; - config.spectrum = 'waterfall' + config.spectrum = 'waterfall'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); // scatter @@ -267,107 +272,108 @@ window.addEventListener('DOMContentLoaded', () => { document.getElementById("scatter").style.visibility = 'visible'; document.getElementById("waterfall").style.visibility = 'hidden'; document.getElementById("waterfall").style.height = '0px'; - config.spectrum = 'scatter' + config.spectrum = 'scatter'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); + + // on click remote tnc toggle view document.getElementById("local-remote-switch1").addEventListener("click", () => { - document.getElementById("local-remote-switch1").checked = true - document.getElementById("local-remote-switch2").checked = false + document.getElementById("local-remote-switch1").checked = true; + document.getElementById("local-remote-switch2").checked = false; document.getElementById("remote-tnc-field").style.visibility = 'hidden'; - config.tnclocation = 'localhost' + config.tnclocation = 'localhost'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); document.getElementById("local-remote-switch2").addEventListener("click", () => { - document.getElementById("local-remote-switch1").checked = false - document.getElementById("local-remote-switch2").checked = true + document.getElementById("local-remote-switch1").checked = false; + document.getElementById("local-remote-switch2").checked = true; document.getElementById("remote-tnc-field").style.visibility = 'visible'; - config.tnclocation = 'remote' + config.tnclocation = 'remote'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); // on change port and host document.getElementById("tnc_adress").addEventListener("change", () => { - console.log(document.getElementById("tnc_adress").value) - config.tnc_host = document.getElementById("tnc_adress").value - config.daemon_host = document.getElementById("tnc_adress").value + console.log(document.getElementById("tnc_adress").value); + config.tnc_host = document.getElementById("tnc_adress").value; + config.daemon_host = document.getElementById("tnc_adress").value; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); // on change ping callsign document.getElementById("dxCall").addEventListener("change", () => { - document.getElementById("dataModalDxCall").value = document.getElementById("dxCall").value + document.getElementById("dataModalDxCall").value = document.getElementById("dxCall").value; }); // on change ping callsign document.getElementById("dataModalDxCall").addEventListener("change", () => { - document.getElementById("dxCall").value = document.getElementById("dataModalDxCall").value + document.getElementById("dxCall").value = document.getElementById("dataModalDxCall").value; }); document.getElementById("tnc_port").addEventListener("change", () => { - config.tnc_port = document.getElementById("tnc_port").value - config.daemon_port = parseInt(document.getElementById("tnc_port").value) + 1 + config.tnc_port = document.getElementById("tnc_port").value; + config.daemon_port = parseInt(document.getElementById("tnc_port").value) + 1; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); // saveMyCall button clicked document.getElementById("saveMyCall").addEventListener("click", () => { - callsign = document.getElementById("myCall").value - config.mycall = callsign.toUpperCase() + callsign = document.getElementById("myCall").value; + config.mycall = callsign.toUpperCase(); fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); - daemon.saveMyCall(callsign) + daemon.saveMyCall(callsign); }); // saveMyGrid button clicked document.getElementById("saveMyGrid").addEventListener("click", () => { - grid = document.getElementById("myGrid").value - config.mygrid = grid + grid = document.getElementById("myGrid").value; + config.mygrid = grid; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); - daemon.saveMyGrid(grid) + daemon.saveMyGrid(grid); }); // startPing button clicked document.getElementById("sendPing").addEventListener("click", () => { - var dxcallsign = document.getElementById("dxCall").value - dxcallsign = dxcallsign.toUpperCase() - sock.sendPing(dxcallsign) + var dxcallsign = document.getElementById("dxCall").value; + dxcallsign = dxcallsign.toUpperCase(); + sock.sendPing(dxcallsign); }); // dataModalstartPing button clicked document.getElementById("dataModalSendPing").addEventListener("click", () => { - var dxcallsign = document.getElementById("dataModalDxCall").value - dxcallsign = dxcallsign.toUpperCase() - sock.sendPing(dxcallsign) + var dxcallsign = document.getElementById("dataModalDxCall").value; + dxcallsign = dxcallsign.toUpperCase(); + sock.sendPing(dxcallsign); }); - // sendCQ button clicked document.getElementById("sendCQ").addEventListener("click", () => { - sock.sendCQ() + sock.sendCQ(); }); // Start beacon button clicked document.getElementById("startBeacon").addEventListener("click", () => { - interval = document.getElementById("beaconInterval").value - config.beacon_interval = interval + interval = document.getElementById("beaconInterval").value; + config.beacon_interval = interval; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); - sock.startBeacon(interval) + sock.startBeacon(interval); }); // sendscatter Switch clicked document.getElementById("scatterSwitch").addEventListener("click", () => { - console.log(document.getElementById("scatterSwitch").checked) + console.log(document.getElementById("scatterSwitch").checked); if(document.getElementById("scatterSwitch").checked == true){ - config.enable_scatter = "True" + config.enable_scatter = "True"; } else { - config.enable_scatter = "False" + config.enable_scatter = "False"; } fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); @@ -375,13 +381,22 @@ window.addEventListener('DOMContentLoaded', () => { // sendfft Switch clicked document.getElementById("fftSwitch").addEventListener("click", () => { if(document.getElementById("fftSwitch").checked == true){ - config.enable_fft = "True" + config.enable_fft = "True"; } else { - config.enable_fft = "False" + config.enable_fft = "False"; } fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); + // enable 500z Switch clicked + document.getElementById("500HzModeSwitch").addEventListener("click", () => { + if(document.getElementById("500HzModeSwitch").checked == true){ + config.low_bandwith_mode = "True"; + } else { + config.low_bandwith_mode = "False"; + } + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + }); @@ -390,52 +405,59 @@ window.addEventListener('DOMContentLoaded', () => { // Stop beacon button clicked document.getElementById("stopBeacon").addEventListener("click", () => { - sock.stopBeacon() + sock.stopBeacon(); }); // startTNC button clicked document.getElementById("startTNC").addEventListener("click", () => { - var deviceid_rigctl = document.getElementById("hamlib_deviceid_rigctl").value - var deviceport_rigctl = document.getElementById("hamlib_deviceport_rigctl").value - var serialspeed_rigctl = document.getElementById("hamlib_serialspeed_rigctl").value - var pttprotocol_rigctl = document.getElementById("hamlib_ptt_protocol_rigctl").value + var deviceid_rigctl = document.getElementById("hamlib_deviceid_rigctl").value; + var deviceport_rigctl = document.getElementById("hamlib_deviceport_rigctl").value; + var serialspeed_rigctl = document.getElementById("hamlib_serialspeed_rigctl").value; + var pttprotocol_rigctl = document.getElementById("hamlib_ptt_protocol_rigctl").value; - var rigctld_ip = document.getElementById("hamlib_rigctld_ip").value - var rigctld_port = document.getElementById("hamlib_rigctld_port").value + var rigctld_ip = document.getElementById("hamlib_rigctld_ip").value; + var rigctld_port = document.getElementById("hamlib_rigctld_port").value; - var deviceid = document.getElementById("hamlib_deviceid").value - var deviceport = document.getElementById("hamlib_deviceport").value - var serialspeed = document.getElementById("hamlib_serialspeed").value - var pttprotocol = document.getElementById("hamlib_ptt_protocol").value + var deviceid = document.getElementById("hamlib_deviceid").value; + var deviceport = document.getElementById("hamlib_deviceport").value; + var serialspeed = document.getElementById("hamlib_serialspeed").value; + var pttprotocol = document.getElementById("hamlib_ptt_protocol").value; - var mycall = document.getElementById("myCall").value - mycall = mycall.toUpperCase() + var mycall = document.getElementById("myCall").value; + mycall = mycall.toUpperCase(); - var mygrid = document.getElementById("myGrid").value - var rx_audio = document.getElementById("audio_input_selectbox").value - var tx_audio = document.getElementById("audio_output_selectbox").value + var mygrid = document.getElementById("myGrid").value; - var pttport = document.getElementById("hamlib_ptt_port_advanced").value - var data_bits = document.getElementById('hamlib_databits_advanced').value - var stop_bits = document.getElementById('hamlib_stopbits_advanced').value - var handshake = document.getElementById('hamlib_handshake_advanced').value + var rx_audio = document.getElementById("audio_input_selectbox").value; + var tx_audio = document.getElementById("audio_output_selectbox").value; + + var pttport = document.getElementById("hamlib_ptt_port_advanced").value; + var data_bits = document.getElementById('hamlib_databits_advanced').value; + var stop_bits = document.getElementById('hamlib_stopbits_advanced').value; + var handshake = document.getElementById('hamlib_handshake_advanced').value; if (document.getElementById("scatterSwitch").checked == true){ - var enable_scatter = "True" + var enable_scatter = "True"; } else { - var enable_scatter = "False" + var enable_scatter = "False"; } if (document.getElementById("fftSwitch").checked == true){ - var enable_fft = "True" + var enable_fft = "True"; } else { - var enable_fft = "False" + var enable_fft = "False"; } - + if (document.getElementById("500HzModeSwitch").checked == true){ + var low_bandwith_mode = "True"; + } else { + var low_bandwith_mode = "False"; + } + + // loop through audio device list and select for(i = 0; i < document.getElementById("audio_input_selectbox").length; i++) { @@ -443,7 +465,7 @@ window.addEventListener('DOMContentLoaded', () => { if (device.value == rx_audio) { console.log(device.text); - config.rx_audio = device.text + config.rx_audio = device.text; } } @@ -453,29 +475,52 @@ window.addEventListener('DOMContentLoaded', () => { if (device.value == tx_audio) { console.log(device.text); - config.tx_audio = device.text + config.tx_audio = device.text; } } + + + // overriding settings for rigctl / direct + if (document.getElementById("radio-control-switch2").checked){ + var radiocontrol = 'rigctl'; + var deviceid = document.getElementById("hamlib_deviceid_rigctl").value; + var deviceport = document.getElementById("hamlib_deviceport_rigctl").value; + var serialspeed = document.getElementById("hamlib_serialspeed_rigctl").value; + var pttprotocol = document.getElementById("hamlib_ptt_protocol_rigctl").value; - config.radiocontrol = radiocontrol - config.mycall = mycall - config.mygrid = mygrid - config.deviceid = deviceid - config.deviceport = deviceport - config.serialspeed = serialspeed - config.pttprotocol = pttprotocol - config.pttport = pttport - config.data_bits = data_bits - config.stop_bits = stop_bits - config.handshake = handshake - config.deviceid_rigctl = deviceid_rigctl - config.serialspeed_rigctl = serialspeed_rigctl - config.pttprotocol_rigctl = pttprotocol_rigctl - config.rigctld_port = rigctld_port - config.rigctld_ip = rigctld_ip - config.deviceport_rigctl = deviceport_rigctl - config.enable_scatter = enable_scatter - config.enable_fft = enable_fft + } else if (document.getElementById("radio-control-switch3").checked) { + var radiocontrol = 'rigctld'; + + } else if (document.getElementById("radio-control-switch1").checked) { + var radiocontrol = 'direct'; + + } else { + var radiocontrol = 'disabled'; + } + + + + + config.radiocontrol = radiocontrol; + config.mycall = mycall; + config.mygrid = mygrid; + config.deviceid = deviceid; + config.deviceport = deviceport; + config.serialspeed = serialspeed; + config.pttprotocol = pttprotocol; + config.pttport = pttport; + config.data_bits = data_bits; + config.stop_bits = stop_bits; + config.handshake = handshake; + config.deviceid_rigctl = deviceid_rigctl; + config.serialspeed_rigctl = serialspeed_rigctl; + config.pttprotocol_rigctl = pttprotocol_rigctl; + config.rigctld_port = rigctld_port; + config.rigctld_ip = rigctld_ip; + config.deviceport_rigctl = deviceport_rigctl; + config.enable_scatter = enable_scatter; + config.enable_fft = enable_fft; + config.low_bandwith_mode = low_bandwith_mode; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); @@ -493,25 +538,9 @@ window.addEventListener('DOMContentLoaded', () => { var collapseFourthRow = new bootstrap.Collapse(document.getElementById('collapseFourthRow'), {toggle: false}) collapseFourthRow.show() */ - // overriding settings for rigctl / direct - if (document.getElementById("radio-control-switch2").checked){ - var radiocontrol = 'rigctl' - var deviceid = document.getElementById("hamlib_deviceid_rigctl").value - var deviceport = document.getElementById("hamlib_deviceport_rigctl").value - var serialspeed = document.getElementById("hamlib_serialspeed_rigctl").value - var pttprotocol = document.getElementById("hamlib_ptt_protocol_rigctl").value - - } else if (document.getElementById("radio-control-switch3").checked) { - var radiocontrol = 'rigctld' - } else if (document.getElementById("radio-control-switch1").checked) { - var radiocontrol = 'direct' - - } else { - var radiocontrol = 'disabled' - } - daemon.startTNC(mycall, mygrid, rx_audio, tx_audio, radiocontrol, deviceid, deviceport, pttprotocol, pttport, serialspeed, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port, enable_fft, enable_scatter) + daemon.startTNC(mycall, mygrid, rx_audio, tx_audio, radiocontrol, deviceid, deviceport, pttprotocol, pttport, serialspeed, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port, enable_fft, enable_scatter, low_bandwith_mode); }) @@ -519,7 +548,7 @@ window.addEventListener('DOMContentLoaded', () => { // stopTNC button clicked document.getElementById("stopTNC").addEventListener("click", () => { - daemon.stopTNC() + daemon.stopTNC(); // collapse settings screen @@ -562,35 +591,35 @@ window.addEventListener('DOMContentLoaded', () => { document.getElementById("testHamlib").addEventListener("click", () => { - var data_bits = document.getElementById("hamlib_databits_advanced").value - var stop_bits = document.getElementById("hamlib_stopbits_advanced").value - var handshake = document.getElementById("hamlib_handshake_advanced").value - var pttport = document.getElementById("hamlib_ptt_port_advanced").value + var data_bits = document.getElementById("hamlib_databits_advanced").value; + var stop_bits = document.getElementById("hamlib_stopbits_advanced").value; + var handshake = document.getElementById("hamlib_handshake_advanced").value; + var pttport = document.getElementById("hamlib_ptt_port_advanced").value; - var rigctld_ip = document.getElementById("hamlib_rigctld_ip").value - var rigctld_port = document.getElementById("hamlib_rigctld_port").value + var rigctld_ip = document.getElementById("hamlib_rigctld_ip").value; + var rigctld_port = document.getElementById("hamlib_rigctld_port").value; - var deviceid = document.getElementById("hamlib_deviceid").value - var deviceport = document.getElementById("hamlib_deviceport").value - var serialspeed = document.getElementById("hamlib_serialspeed").value - var pttprotocol = document.getElementById("hamlib_ptt_protocol").value + var deviceid = document.getElementById("hamlib_deviceid").value; + var deviceport = document.getElementById("hamlib_deviceport").value; + var serialspeed = document.getElementById("hamlib_serialspeed").value; + var pttprotocol = document.getElementById("hamlib_ptt_protocol").value; // overriding settings for rigctl / direct if (document.getElementById("radio-control-switch2").checked){ - var radiocontrol = 'rigctl' - var deviceid = document.getElementById("hamlib_deviceid_rigctl").value - var deviceport = document.getElementById("hamlib_deviceport_rigctl").value - var serialspeed = document.getElementById("hamlib_serialspeed_rigctl").value - var pttprotocol = document.getElementById("hamlib_ptt_protocol_rigctl").value + var radiocontrol = 'rigctl'; + var deviceid = document.getElementById("hamlib_deviceid_rigctl").value; + var deviceport = document.getElementById("hamlib_deviceport_rigctl").value; + var serialspeed = document.getElementById("hamlib_serialspeed_rigctl").value; + var pttprotocol = document.getElementById("hamlib_ptt_protocol_rigctl").value; } else if (document.getElementById("radio-control-switch3").checked) { - var radiocontrol = 'rigctld' + var radiocontrol = 'rigctld'; } else if (document.getElementById("radio-control-switch1").checked) { - var radiocontrol = 'direct' + var radiocontrol = 'direct'; } else { - var radiocontrol = 'disabled' + var radiocontrol = 'disabled'; } @@ -617,10 +646,8 @@ window.addEventListener('DOMContentLoaded', () => { reader.onload = function(e) { // binary data - var data = e.target.result - console.log(data) - - + var data = e.target.result; + console.log(data); let Data = { @@ -762,18 +789,19 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { }; if (typeof(arg.scatter) == 'undefined') { - var scatterSize = 0 + var scatterSize = 0; } else { - var scatterSize = arg.scatter.length + var scatterSize = arg.scatter.length; } if (global.data != newdata && scatterSize > 0) { try { global.myChart.destroy(); } catch (e) { // myChart not yet created + console.log(e); } - global.data = newdata + global.data = newdata; var ctx = document.getElementById('scatter').getContext('2d'); @@ -790,123 +818,123 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { } else if (arg.ptt_state == 'False') { document.getElementById("ptt_state").className = "btn btn-success"; } else { - document.getElementById("ptt_state").className = "btn btn-secondary" + document.getElementById("ptt_state").className = "btn btn-secondary"; } // BUSY STATE if (arg.busy_state == 'BUSY') { document.getElementById("busy_state").className = "btn btn-danger"; - document.getElementById("startTransmission").disabled = true - //document.getElementById("stopTransmission").disabled = false + document.getElementById("startTransmission").disabled = true; + //document.getElementById("stopTransmission").disabled = false; } else if (arg.busy_state == 'IDLE') { document.getElementById("busy_state").className = "btn btn-success"; } else { - document.getElementById("busy_state").className = "btn btn-secondary" - document.getElementById("startTransmission").disabled = true - //document.getElementById("stopTransmission").disabled = false + document.getElementById("busy_state").className = "btn btn-secondary"; + document.getElementById("startTransmission").disabled = true; + //document.getElementById("stopTransmission").disabled = false; } // ARQ STATE if (arg.arq_state == 'True') { document.getElementById("arq_state").className = "btn btn-warning"; - document.getElementById("startTransmission").disabled = true - //document.getElementById("stopTransmission").disabled = false + document.getElementById("startTransmission").disabled = true; + //document.getElementById("stopTransmission").disabled = false; } else if (arg.arq_state == 'False') { document.getElementById("arq_state").className = "btn btn-secondary"; - document.getElementById("startTransmission").disabled = false - //document.getElementById("stopTransmission").disabled = true + document.getElementById("startTransmission").disabled = false; + //document.getElementById("stopTransmission").disabled = true; } else { - document.getElementById("arq_state").className = "btn btn-secondary" - document.getElementById("startTransmission").disabled = true - //document.getElementById("stopTransmission").disabled = false + document.getElementById("arq_state").className = "btn btn-secondary"; + document.getElementById("startTransmission").disabled = true; + //document.getElementById("stopTransmission").disabled = false; } // BEACON STATE if (arg.beacon_state == 'True') { - document.getElementById("startBeacon").className = "btn btn-success spinner-grow" - document.getElementById("startBeacon").disabled = true - document.getElementById("beaconInterval").disabled = true - document.getElementById("stopBeacon").disabled = false + document.getElementById("startBeacon").className = "btn btn-success spinner-grow"; + document.getElementById("startBeacon").disabled = true; + document.getElementById("beaconInterval").disabled = true; + document.getElementById("stopBeacon").disabled = false; } else if (arg.beacon_state == 'False') { - document.getElementById("startBeacon").className = "btn btn-success" - document.getElementById("startBeacon").disabled = false - document.getElementById("beaconInterval").disabled = false - document.getElementById("stopBeacon").disabled = true + document.getElementById("startBeacon").className = "btn btn-success"; + document.getElementById("startBeacon").disabled = false; + document.getElementById("beaconInterval").disabled = false; + document.getElementById("stopBeacon").disabled = true; } else { - document.getElementById("startBeacon").className = "btn btn-success" - document.getElementById("startBeacon").disabled = false - document.getElementById("stopBeacon").disabled = true - document.getElementById("beaconInterval").disabled = false + document.getElementById("startBeacon").className = "btn btn-success"; + document.getElementById("startBeacon").disabled = false; + document.getElementById("stopBeacon").disabled = true; + document.getElementById("beaconInterval").disabled = false; } // RMS - document.getElementById("rms_level").setAttribute("aria-valuenow", arg.rms_level) - document.getElementById("rms_level").setAttribute("style", "width:" + arg.rms_level + "%;") + document.getElementById("rms_level").setAttribute("aria-valuenow", arg.rms_level); + document.getElementById("rms_level").setAttribute("style", "width:" + arg.rms_level + "%;"); // SET FREQUENCY - document.getElementById("frequency").innerHTML = arg.frequency + document.getElementById("frequency").innerHTML = arg.frequency; // SET MODE - document.getElementById("mode").innerHTML = arg.mode + document.getElementById("mode").innerHTML = arg.mode; // SET BANDWITH - document.getElementById("bandwith").innerHTML = arg.bandwith + document.getElementById("bandwith").innerHTML = arg.bandwith; // SET BYTES PER MINUTE if (typeof(arg.arq_bytes_per_minute) == 'undefined') { - var arq_bytes_per_minute = 0 + var arq_bytes_per_minute = 0; } else { - var arq_bytes_per_minute = arg.arq_bytes_per_minute + var arq_bytes_per_minute = arg.arq_bytes_per_minute; } - document.getElementById("bytes_per_min").innerHTML = arq_bytes_per_minute + document.getElementById("bytes_per_min").innerHTML = arq_bytes_per_minute; // SET BYTES PER MINUTE COMPRESSED if (typeof(arg.arq_bytes_per_minute) == 'undefined') { - var arq_bytes_per_minute_compressed = 0 + var arq_bytes_per_minute_compressed = 0; } else { - var arq_bytes_per_minute_compressed = Math.round(arg.arq_bytes_per_minute * arg.arq_compression_factor) + var arq_bytes_per_minute_compressed = Math.round(arg.arq_bytes_per_minute * arg.arq_compression_factor); } - document.getElementById("bytes_per_min_compressed").innerHTML = arq_bytes_per_minute_compressed + document.getElementById("bytes_per_min_compressed").innerHTML = arq_bytes_per_minute_compressed; // SET TOTAL BYTES if (typeof(arg.total_bytes) == 'undefined') { - var total_bytes = 0 + var total_bytes = 0; } else { - var total_bytes = arg.total_bytes + var total_bytes = arg.total_bytes; } - document.getElementById("total_bytes").innerHTML = total_bytes - document.getElementById("transmission_progress").setAttribute("aria-valuenow", arg.arq_transmission_percent) - document.getElementById("transmission_progress").setAttribute("style", "width:" + arg.arq_transmission_percent + "%;") + document.getElementById("total_bytes").innerHTML = total_bytes; + document.getElementById("transmission_progress").setAttribute("aria-valuenow", arg.arq_transmission_percent); + document.getElementById("transmission_progress").setAttribute("style", "width:" + arg.arq_transmission_percent + "%;"); // UPDATE HEARD STATIONS var tbl = document.getElementById("heardstations"); - document.getElementById("heardstations").innerHTML = '' + document.getElementById("heardstations").innerHTML = ''; if (typeof(arg.stations) == 'undefined') { - var heardStationsLength = 0 + var heardStationsLength = 0; } else { - var heardStationsLength = arg.stations.length + var heardStationsLength = arg.stations.length; } for (i = 0; i < heardStationsLength; i++) { // first we update the PING window if (arg.stations[i]['dxcallsign'] == document.getElementById("dxCall").value) { - var dxGrid = arg.stations[i]['dxgrid'] - var myGrid = document.getElementById("myGrid").value + var dxGrid = arg.stations[i]['dxgrid']; + var myGrid = document.getElementById("myGrid").value; try { var dist = parseInt(distance(myGrid, dxGrid)) + ' km'; - document.getElementById("pingDistance").innerHTML = dist - document.getElementById("dataModalPingDistance").innerHTML = dist + document.getElementById("pingDistance").innerHTML = dist; + document.getElementById("dataModalPingDistance").innerHTML = dist; } catch { - document.getElementById("pingDistance").innerHTML = '---' - document.getElementById("dataModalPingDistance").innerHTML = '---' + document.getElementById("pingDistance").innerHTML = '---'; + document.getElementById("dataModalPingDistance").innerHTML = '---'; } - document.getElementById("pingDB").innerHTML = arg.stations[i]['snr'] - document.getElementById("dataModalPingDB").innerHTML = arg.stations[i]['snr'] + document.getElementById("pingDB").innerHTML = arg.stations[i]['snr']; + document.getElementById("dataModalPingDB").innerHTML = arg.stations[i]['snr']; } // now we update the heard stations list @@ -914,7 +942,7 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { //https://stackoverflow.com/q/51421470 //https://stackoverflow.com/a/847196 - timestampRaw = arg.stations[i]['timestamp'] + timestampRaw = arg.stations[i]['timestamp']; var date = new Date(timestampRaw * 1000); var hours = date.getHours(); var minutes = "0" + date.getMinutes(); @@ -923,23 +951,23 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { var timestamp = document.createElement("td"); var timestampText = document.createElement('span'); - timestampText.innerText = datetime + timestampText.innerText = datetime; timestamp.appendChild(timestampText); var frequency = document.createElement("td"); var frequencyText = document.createElement('span'); - frequencyText.innerText = arg.stations[i]['frequency'] + frequencyText.innerText = arg.stations[i]['frequency']; frequency.appendChild(frequencyText); var dxCall = document.createElement("td"); var dxCallText = document.createElement('span'); - dxCallText.innerText = arg.stations[i]['dxcallsign'] + dxCallText.innerText = arg.stations[i]['dxcallsign']; dxCall.appendChild(dxCallText); var dxGrid = document.createElement("td"); var dxGridText = document.createElement('span'); - dxGridText.innerText = arg.stations[i]['dxgrid'] + dxGridText.innerText = arg.stations[i]['dxgrid']; dxGrid.appendChild(dxGridText); var gridDistance = document.createElement("td"); @@ -948,14 +976,14 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { try { gridDistanceText.innerText = parseInt(distance(document.getElementById("myGrid").value, arg.stations[i]['dxgrid'])) + ' km'; } catch { - gridDistanceText.innerText = '---' + gridDistanceText.innerText = '---'; } gridDistance.appendChild(gridDistanceText); var dataType = document.createElement("td"); var dataTypeText = document.createElement('span'); if(arg.stations[i]['datatype'] == 'DATA-CHANNEL'){ - dataTypeText.innerText = 'DATA-C' + dataTypeText.innerText = 'DATA-C'; dataType.appendChild(dataTypeText); } @@ -982,12 +1010,12 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { var snr = document.createElement("td"); var snrText = document.createElement('span'); - snrText.innerText = arg.stations[i]['snr'] + snrText.innerText = arg.stations[i]['snr']; snr.appendChild(snrText); var offset = document.createElement("td"); var offsetText = document.createElement('span'); - offsetText.innerText = arg.stations[i]['offset'] + offsetText.innerText = arg.stations[i]['offset']; offset.appendChild(offsetText); row.appendChild(timestamp); @@ -1005,94 +1033,93 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { // DISPLAY INFO TOASTS if (typeof(arg.info) == 'undefined') { - var infoLength = 0 + var infoLength = 0; } else { - var infoLength = arg.info.length + var infoLength = arg.info.length; } for (i = 0; i < infoLength; i++) { // SENDING CQ TOAST if (arg.info[i] == "CQ;SENDING"){ - var toastCQsending = document.getElementById('toastCQsending') - var toast = bootstrap.Toast.getOrCreateInstance(toastCQsending) // Returns a Bootstrap toast instance - toast.show() + var toastCQsending = document.getElementById('toastCQsending'); + var toast = bootstrap.Toast.getOrCreateInstance(toastCQsending); // Returns a Bootstrap toast instance + toast.show(); } // RECEIVING CQ TOAST if (arg.info[i] == "CQ;RECEIVING"){ - var toastCQreceiving = document.getElementById('toastCQreceiving') - var toast = bootstrap.Toast.getOrCreateInstance(toastCQreceiving) // Returns a Bootstrap toast instance - toast.show() + var toastCQreceiving = document.getElementById('toastCQreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastCQreceiving); // Returns a Bootstrap toast instance + toast.show(); } // RECEIVING BEACON TOAST if (arg.info[i] == "BEACON;RECEIVING"){ - var toastBEACONreceiving = document.getElementById('toastBEACONreceiving') - var toast = bootstrap.Toast.getOrCreateInstance(toastBEACONreceiving) // Returns a Bootstrap toast instance - toast.show() + var toastBEACONreceiving = document.getElementById('toastBEACONreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastBEACONreceiving); // Returns a Bootstrap toast instance + toast.show(); } // SENDING PING TOAST if (arg.info[i] == "PING;SENDING"){ - var toastPINGsending = document.getElementById('toastPINGsending') - var toast = bootstrap.Toast.getOrCreateInstance(toastPINGsending) // Returns a Bootstrap toast instance - toast.show() + var toastPINGsending = document.getElementById('toastPINGsending'); + var toast = bootstrap.Toast.getOrCreateInstance(toastPINGsending); // Returns a Bootstrap toast instance + toast.show(); } // RECEIVING PING TOAST if (arg.info[i] == "PING;RECEIVING"){ - var toastPINGreceiving = document.getElementById('toastPINGreceiving') - var toast = bootstrap.Toast.getOrCreateInstance(toastPINGreceiving) // Returns a Bootstrap toast instance - toast.show() + var toastPINGreceiving = document.getElementById('toastPINGreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastPINGreceiving); // Returns a Bootstrap toast instance + toast.show(); } // RECEIVING PING ACK TOAST if (arg.info[i] == "PING;RECEIVEDACK"){ - var toastPINGreceivedACK = document.getElementById('toastPINGreceivedACK') - var toast = bootstrap.Toast.getOrCreateInstance(toastPINGreceivedACK) // Returns a Bootstrap toast instance - toast.show() + var toastPINGreceivedACK = document.getElementById('toastPINGreceivedACK'); + var toast = bootstrap.Toast.getOrCreateInstance(toastPINGreceivedACK); // Returns a Bootstrap toast instance + toast.show(); } // DATACHANNEL OPENING TOAST if (arg.info[i] == "DATACHANNEL;OPENING"){ - var toastDATACHANNELopening = document.getElementById('toastDATACHANNELopening') - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELopening) // Returns a Bootstrap toast instance - toast.show() + var toastDATACHANNELopening = document.getElementById('toastDATACHANNELopening'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELopening); // Returns a Bootstrap toast instance + toast.show(); } // DATACHANNEL OPEN TOAST if (arg.info[i] == "DATACHANNEL;OPEN"){ - var toastDATACHANNELopen = document.getElementById('toastDATACHANNELopen') - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELopen) // Returns a Bootstrap toast instance - toast.show() + var toastDATACHANNELopen = document.getElementById('toastDATACHANNELopen'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELopen); // Returns a Bootstrap toast instance + toast.show(); } // DATACHANNEL RECEIVEDOPENER TOAST if (arg.info[i] == "DATACHANNEL;RECEIVEDOPENER"){ - var toastDATACHANNELreceivedopener = document.getElementById('toastDATACHANNELreceivedopener') - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener) // Returns a Bootstrap toast instance - toast.show() + var toastDATACHANNELreceivedopener = document.getElementById('toastDATACHANNELreceivedopener'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener); // Returns a Bootstrap toast instance + toast.show(); } // TRANSMISSION STOPPED if (arg.info[i] == "TRANSMISSION;STOPPED"){ - var toastDATACHANNELreceivedopener = document.getElementById('toastTRANSMISSIONstopped') - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener) // Returns a Bootstrap toast instance - toast.show() + var toastDATACHANNELreceivedopener = document.getElementById('toastTRANSMISSIONstopped'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELreceivedopener); // Returns a Bootstrap toast instance + toast.show(); } - - + // DATACHANNEL FAILED TOAST if (arg.info[i] == "DATACHANNEL;FAILED"){ - var toastDATACHANNELfailed = document.getElementById('toastDATACHANNELfailed') - var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELfailed) // Returns a Bootstrap toast instance - toast.show() + var toastDATACHANNELfailed = document.getElementById('toastDATACHANNELfailed'); + var toast = bootstrap.Toast.getOrCreateInstance(toastDATACHANNELfailed); // Returns a Bootstrap toast instance + toast.show(); } // ARQ RECEIVING TOAST if (arg.info[i] == "ARQ;RECEIVING"){ document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped progress-bar-animated bg-primary"; - var toastARQreceiving = document.getElementById('toastARQreceiving') - var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceiving) // Returns a Bootstrap toast instance - toast.show() + var toastARQreceiving = document.getElementById('toastARQreceiving'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceiving); // Returns a Bootstrap toast instance + toast.show(); } // ARQ RECEIVING SUCCESS TOAST console.log(arg.info[i]) @@ -1100,54 +1127,45 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-success"; - var toastARQreceivingsuccess = document.getElementById('toastARQreceivingsuccess') - var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingsuccess) // Returns a Bootstrap toast instance - toast.show() + var toastARQreceivingsuccess = document.getElementById('toastARQreceivingsuccess'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingsuccess); // Returns a Bootstrap toast instance + toast.show(); } // ARQ RECEIVING FAILED TOAST if (arg.info[i] == "ARQ;RECEIVING;FAILED"){ document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-danger"; - var toastARQreceivingfailed = document.getElementById('toastARQreceivingfailed') - var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingfailed) // Returns a Bootstrap toast instance - toast.show() + var toastARQreceivingfailed = document.getElementById('toastARQreceivingfailed'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQreceivingfailed); // Returns a Bootstrap toast instance + toast.show(); } // ARQ TRANSMITTING TOAST if (arg.info[i] == "ARQ;TRANSMITTING"){ document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped progress-bar-animated bg-primary"; - var toastARQtransmitting = document.getElementById('toastARQtransmitting') - var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmitting) // Returns a Bootstrap toast instance - toast.show() + var toastARQtransmitting = document.getElementById('toastARQtransmitting'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmitting); // Returns a Bootstrap toast instance + toast.show(); } // ARQ TRANSMITTING SUCCESS TOAST if (arg.info[i] == "ARQ;TRANSMITTING;SUCCESS"){ document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-success"; - var toastARQtransmittingsuccess = document.getElementById('toastARQtransmittingsuccess') - var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingsuccess) // Returns a Bootstrap toast instance - toast.show() + var toastARQtransmittingsuccess = document.getElementById('toastARQtransmittingsuccess'); + var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingsuccess); // Returns a Bootstrap toast instance + toast.show(); } // ARQ TRANSMITTING FAILED TOAST if (arg.info[i] == "ARQ;TRANSMITTING;FAILED"){ document.getElementById("transmission_progress").className = "progress-bar progress-bar-striped bg-danger"; - var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingfailed) // Returns a Bootstrap toast instance - toast.show() - } - - - - - - - - - + var toast = bootstrap.Toast.getOrCreateInstance(toastARQtransmittingfailed); // Returns a Bootstrap toast instance + toast.show(); + } } }); @@ -1164,9 +1182,10 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { document.getElementById("progressbar_cpu").setAttribute("style", "width:" + arg.cpu_usage + "%;") document.getElementById("progressbar_cpu_value").innerHTML = arg.cpu_usage + "%" */ + /* document.getElementById("ram_load").innerHTML = arg.ram_usage + "%" document.getElementById("cpu_load").innerHTML = arg.cpu_usage + "%" - + */ // OPERATING SYSTEM //document.getElementById("operating_system").innerHTML = "OS " + os.type() @@ -1189,7 +1208,7 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { // UPDATE AUDIO INPUT if (arg.tnc_running_state == "stopped") { if (document.getElementById("audio_input_selectbox").length != arg.input_devices.length) { - document.getElementById("audio_input_selectbox").innerHTML = "" + document.getElementById("audio_input_selectbox").innerHTML = ""; for (i = 0; i < arg.input_devices.length; i++) { var option = document.createElement("option"); option.text = arg.input_devices[i]['name']; @@ -1206,7 +1225,7 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { // UPDATE AUDIO OUTPUT if (arg.tnc_running_state == "stopped") { if (document.getElementById("audio_output_selectbox").length != arg.output_devices.length) { - document.getElementById("audio_output_selectbox").innerHTML = "" + document.getElementById("audio_output_selectbox").innerHTML = ""; for (i = 0; i < arg.output_devices.length; i++) { var option = document.createElement("option"); option.text = arg.output_devices[i]['name']; @@ -1223,7 +1242,7 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { // UPDATE SERIAL DEVICES if (arg.tnc_running_state == "stopped") { if (document.getElementById("hamlib_deviceport").length != arg.serial_devices.length) { - document.getElementById("hamlib_deviceport").innerHTML = "" + document.getElementById("hamlib_deviceport").innerHTML = ""; for (i = 0; i < arg.serial_devices.length; i++) { var option = document.createElement("option"); option.text = arg.serial_devices[i]['description']; @@ -1239,7 +1258,7 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { // advanced settings if (document.getElementById("hamlib_deviceport_advanced").length != arg.serial_devices.length) { - document.getElementById("hamlib_deviceport_advanced").innerHTML = "" + document.getElementById("hamlib_deviceport_advanced").innerHTML = ""; for (i = 0; i < arg.serial_devices.length; i++) { var option = document.createElement("option"); option.text = arg.serial_devices[i]['description']; @@ -1254,7 +1273,7 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { // rigctl settings if (document.getElementById("hamlib_deviceport_rigctl").length != arg.serial_devices.length) { - document.getElementById("hamlib_deviceport_rigctl").innerHTML = "" + document.getElementById("hamlib_deviceport_rigctl").innerHTML = ""; for (i = 0; i < arg.serial_devices.length; i++) { var option = document.createElement("option"); option.text = arg.serial_devices[i]['description']; @@ -1272,7 +1291,7 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { if (arg.tnc_running_state == "stopped") { if (document.getElementById("hamlib_ptt_port_advanced").length != arg.serial_devices.length) { - document.getElementById("hamlib_ptt_port_advanced").innerHTML = "" + document.getElementById("hamlib_ptt_port_advanced").innerHTML = ""; for (i = 0; i < arg.serial_devices.length; i++) { var option = document.createElement("option"); option.text = arg.serial_devices[i]['description']; @@ -1290,61 +1309,51 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { // TNC RUNNING STATE //document.getElementById("tnc_running_state").innerHTML = arg.tnc_running_state; if (arg.tnc_running_state == "running") { - document.getElementById('hamlib_deviceid').disabled = true - document.getElementById('hamlib_deviceport').disabled = true - document.getElementById('advancedHamlibSettingsButton').disabled = true - document.getElementById('testHamlib').disabled = true - document.getElementById('hamlib_ptt_protocol').disabled = true - document.getElementById('audio_input_selectbox').disabled = true - document.getElementById('audio_output_selectbox').disabled = true - document.getElementById('stopTNC').disabled = false - document.getElementById('startTNC').disabled = true - //document.getElementById('myCall').disabled = false - document.getElementById('dxCall').disabled = false - //document.getElementById('saveMyCall').disabled = false - //document.getElementById('myGrid').disabled = false - //document.getElementById('saveMyGrid').disabled = false - document.getElementById("hamlib_serialspeed").disabled = true - //document.getElementById("startTransmission").disabled = false - document.getElementById("openDataModule").disabled = false + document.getElementById('hamlib_deviceid').disabled = true; + document.getElementById('hamlib_deviceport').disabled = true; + document.getElementById('advancedHamlibSettingsButton').disabled = true; + document.getElementById('testHamlib').disabled = true; + document.getElementById('hamlib_ptt_protocol').disabled = true; + document.getElementById('audio_input_selectbox').disabled = true; + document.getElementById('audio_output_selectbox').disabled = true; + document.getElementById('stopTNC').disabled = false; + document.getElementById('startTNC').disabled = true; + document.getElementById('dxCall').disabled = false; + document.getElementById("hamlib_serialspeed").disabled = true; + document.getElementById("openDataModule").disabled = false; // collapse settings screen var collapseFirstRow = new bootstrap.Collapse(document.getElementById('collapseFirstRow'), {toggle: false}) - collapseFirstRow.hide() + collapseFirstRow.hide(); var collapseSecondRow = new bootstrap.Collapse(document.getElementById('collapseSecondRow'), {toggle: false}) - collapseSecondRow.hide() + collapseSecondRow.hide(); var collapseThirdRow = new bootstrap.Collapse(document.getElementById('collapseThirdRow'), {toggle: false}) - collapseThirdRow.show() + collapseThirdRow.show(); var collapseFourthRow = new bootstrap.Collapse(document.getElementById('collapseFourthRow'), {toggle: false}) - collapseFourthRow.show() + collapseFourthRow.show(); } else { - document.getElementById('hamlib_deviceid').disabled = false - document.getElementById('hamlib_deviceport').disabled = false - document.getElementById('advancedHamlibSettingsButton').disabled = false - document.getElementById('testHamlib').disabled = false - document.getElementById('hamlib_ptt_protocol').disabled = false - document.getElementById('audio_input_selectbox').disabled = false - document.getElementById('audio_output_selectbox').disabled = false - document.getElementById('stopTNC').disabled = true - document.getElementById('startTNC').disabled = false - //document.getElementById('myCall').disabled = true - document.getElementById('dxCall').disabled = true - //document.getElementById('saveMyCall').disabled = true - //document.getElementById('myGrid').disabled = true - //document.getElementById('saveMyGrid').disabled = true - document.getElementById("hamlib_serialspeed").disabled = false - //document.getElementById("startTransmission").disabled = true - document.getElementById("openDataModule").disabled = true + document.getElementById('hamlib_deviceid').disabled = false; + document.getElementById('hamlib_deviceport').disabled = false; + document.getElementById('advancedHamlibSettingsButton').disabled = false; + document.getElementById('testHamlib').disabled = false; + document.getElementById('hamlib_ptt_protocol').disabled = false; + document.getElementById('audio_input_selectbox').disabled = false; + document.getElementById('audio_output_selectbox').disabled = false; + document.getElementById('stopTNC').disabled = true; + document.getElementById('startTNC').disabled = false; + document.getElementById('dxCall').disabled = true; + document.getElementById("hamlib_serialspeed").disabled = false; + document.getElementById("openDataModule").disabled = true; // collapse settings screen var collapseFirstRow = new bootstrap.Collapse(document.getElementById('collapseFirstRow'), {toggle: false}) - collapseFirstRow.show() + collapseFirstRow.show(); var collapseSecondRow = new bootstrap.Collapse(document.getElementById('collapseSecondRow'), {toggle: false}) - collapseSecondRow.show() + collapseSecondRow.show(); var collapseThirdRow = new bootstrap.Collapse(document.getElementById('collapseThirdRow'), {toggle: false}) - collapseThirdRow.hide() + collapseThirdRow.hide(); var collapseFourthRow = new bootstrap.Collapse(document.getElementById('collapseFourthRow'), {toggle: false}) - collapseFourthRow.hide() + collapseFourthRow.hide(); } }); @@ -1352,7 +1361,7 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { // ACTION UPDATE HAMLIB TEST ipcRenderer.on('action-update-hamlib-test', (event, arg) => { - console.log(arg.hamlib_result) + console.log(arg.hamlib_result); if (arg.hamlib_result == 'SUCCESS') { document.getElementById("testHamlib").className = "btn btn-sm btn-success"; // BUTTON HAS BEEN REMOVED @@ -1399,10 +1408,10 @@ ipcRenderer.on('action-update-daemon-connection', (event, arg) => { ipcRenderer.on('action-update-rx-buffer', (event, arg) => { - var data = arg.data["data"] + var data = arg.data["data"]; var tbl = document.getElementById("rx-data"); - document.getElementById("rx-data").innerHTML = '' + document.getElementById("rx-data").innerHTML = ''; for (i = 0; i < arg.data.length; i++) { @@ -1415,7 +1424,7 @@ ipcRenderer.on('action-update-rx-buffer', (event, arg) => { document.getElementById("pingDistance").innerHTML = arg.stations[i]['DXGRID'] } */ - document.getElementById("pingDB").innerHTML = arg.stations[i]['snr'] + document.getElementById("pingDB").innerHTML = arg.stations[i]['snr']; } @@ -1436,12 +1445,12 @@ ipcRenderer.on('action-update-rx-buffer', (event, arg) => { var timestamp = document.createElement("td"); var timestampText = document.createElement('span'); - timestampText.innerText = datetime + timestampText.innerText = datetime; timestamp.appendChild(timestampText); var dxCall = document.createElement("td"); var dxCallText = document.createElement('span'); - dxCallText.innerText = arg.data[i]['dxcallsign'] + dxCallText.innerText = arg.data[i]['dxcallsign']; dxCall.appendChild(dxCallText); /* @@ -1451,23 +1460,19 @@ ipcRenderer.on('action-update-rx-buffer', (event, arg) => { dxGrid.appendChild(dxGridText); */ - console.log(arg.data) + console.log(arg.data); - var encoded_data = atob(arg.data[i]['data']) - var splitted_data = encoded_data.split(split_char) - console.log(splitted_data) + var encoded_data = atob(arg.data[i]['data']); + var splitted_data = encoded_data.split(split_char); + console.log(splitted_data); - - - - var fileName = document.createElement("td"); var fileNameText = document.createElement('span'); - //var fileNameString = arg.data[i]['data'][0]['fn'] - var fileNameString = splitted_data[1] + //var fileNameString = arg.data[i]['data'][0]['fn']; + var fileNameString = splitted_data[1]; - fileNameText.innerText = fileNameString + fileNameText.innerText = fileNameString; fileName.appendChild(fileNameText); row.appendChild(timestamp); @@ -1477,12 +1482,12 @@ ipcRenderer.on('action-update-rx-buffer', (event, arg) => { tbl.appendChild(row); // https://stackoverflow.com/a/26227660 - var appDataFolder = process.env.HOME - console.log("appDataFolder:" + appDataFolder) + var appDataFolder = process.env.HOME; + console.log("appDataFolder:" + appDataFolder); var applicationFolder = path.join(appDataFolder, "FreeDATA"); - console.log(applicationFolder) + console.log(applicationFolder); var receivedFilesFolder = path.join(applicationFolder, "receivedFiles"); - console.log("receivedFilesFolder: " + receivedFilesFolder) + console.log("receivedFilesFolder: " + receivedFilesFolder); // Creates receivedFiles folder if not exists // https://stackoverflow.com/a/13544465 fs.mkdir(receivedFilesFolder, { @@ -1498,9 +1503,9 @@ ipcRenderer.on('action-update-rx-buffer', (event, arg) => { // https://www.codeblocq.com/2016/04/Convert-a-base64-string-to-a-file-in-Node/ ////var base64Data = base64String.split(';base64,').pop() //write data to file - var base64Data = splitted_data[4] + var base64Data = splitted_data[4]; var receivedFile = path.join(receivedFilesFolder, fileNameString); - console.log(receivedFile) + console.log(receivedFile); require("fs").writeFile(receivedFile, base64Data, 'binary', function(err) { //require("fs").writeFile(receivedFile, base64Data, 'base64', function(err) { @@ -1512,23 +1517,23 @@ ipcRenderer.on('action-update-rx-buffer', (event, arg) => { ipcRenderer.on('run-tnc-command', (event, arg) => { if (arg.command == 'save_my_call') { - sock.saveMyCall(arg.callsign) + sock.saveMyCall(arg.callsign); } if (arg.command == 'save_my_grid') { - sock.saveMyGrid(arg.grid) + sock.saveMyGrid(arg.grid); } if (arg.command == 'ping') { - sock.sendPing(arg.dxcallsign) + sock.sendPing(arg.dxcallsign); } if (arg.command == 'send_file') { - sock.sendFile(arg.dxcallsign, arg.mode, arg.frames, arg.filename, arg.filetype, arg.data, arg.checksum) + sock.sendFile(arg.dxcallsign, arg.mode, arg.frames, arg.filename, arg.filetype, arg.data, arg.checksum); } if (arg.command == 'send_message') { - sock.sendMessage(arg.dxcallsign, arg.mode, arg.frames, arg.data, arg.checksum) + sock.sendMessage(arg.dxcallsign, arg.mode, arg.frames, arg.data, arg.checksum); } if (arg.command == 'stop_transmission') { - sock.stopTransmission() + sock.stopTransmission(); } }); diff --git a/gui/sock.js b/gui/sock.js index a643d0b6..96aa125f 100644 --- a/gui/sock.js +++ b/gui/sock.js @@ -57,8 +57,8 @@ client.on('error', function(data) { }; ipcRenderer.send('request-update-tnc-state', Data); - - setTimeout(connectTNC, 2000) + client.destroy(); + setTimeout(connectTNC, 500) // setTimeout( function() { exports.connectTNC(tnc_host, tnc_port); }, 2000 ); }); @@ -72,32 +72,26 @@ client.on('close', function(data) { client.on('end', function(data) { console.log('TNC connection ended'); - //setTimeout(connectTNC, 2000) - setTimeout(connectTNC, 0) - // setTimeout( function() { exports.connectTNC(tnc_host, tnc_port); }, 2000 ); + client.destroy(); + setTimeout(connectTNC, 500) }); -//exports.writeTncCommand = function(command){ writeTncCommand = function(command) { //console.log(command) // we use the writingCommand function to update our TCPIP state because we are calling this function a lot // if socket openend, we are able to run commands if (client.readyState == 'open') { - //uiMain.setTNCconnection('open') client.write(command + '\n'); } if (client.readyState == 'closed') { - //uiMain.setTNCconnection('closed') - //console.log("CLOSED!!!!!") + console.log("CLOSED!") } if (client.readyState == 'opening') { - //uiMain.setTNCconnection('opening') - //console.log("OPENING!!!!!") console.log('connecting to TNC...') } } @@ -238,12 +232,12 @@ client.on('data', function(socketdata) { if(splitted_data[0] == 'f'){ dataArray.push(data['data-array'][i]) - //dataArray.push(splitted_data) + } if(splitted_data[0] == 'm'){ messageArray.push(data['data-array'][i]) - //messageArray.push(splitted_data) + } } catch (e) { diff --git a/gui/src/index.html b/gui/src/index.html index c4602486..a6ab0617 100644 --- a/gui/src/index.html +++ b/gui/src/index.html @@ -722,13 +722,16 @@ - +
+ + +
-