diff --git a/.github/workflows/build_multiplatform.yml b/.github/workflows/build_multiplatform.yml index bccc54c1..4f2b8cfa 100644 --- a/.github/workflows/build_multiplatform.yml +++ b/.github/workflows/build_multiplatform.yml @@ -173,6 +173,7 @@ jobs: # Produce a binary artifact and place it in the mounted volume run: | + git clone https://github.com/drowe67/codec2.git cd codec2 git checkout master @@ -206,18 +207,21 @@ jobs: generator: Unix Makefiles daemon_binary_name: freedata-daemon tnc_binary_name: freedata-tnc + electron_parameters: "-p always" - os: macos-11 zip_name: macos_tnc generator: Unix Makefiles daemon_binary_name: freedata-daemon tnc_binary_name: freedata-tnc + electron_parameters: "-p always" - os: windows-latest zip_name: windows_tnc generator: Visual Studio 16 2019 daemon_binary_name: freedata-daemon.exe tnc_binary_name: freedata-tnc.exe + electron_parameters: "-p always --x64 --ia32" steps: - name: Checkout code for ${{ matrix.platform.name }} uses: actions/checkout@v3 @@ -395,7 +399,7 @@ jobs: # If the commit is tagged with a version (e.g. "v1.0.0"), # release the app after building release: ${{ startsWith(github.ref, 'refs/tags/v') }} - args: "-p always" + args: ${{ matrix.electron_parameters }} - name: LIST ALL FILES run: ls -R diff --git a/gui/main.js b/gui/main.js index 74dcaf78..dab66fc9 100644 --- a/gui/main.js +++ b/gui/main.js @@ -49,22 +49,30 @@ const configDefaultSettings = '{\ "daemon_port": "3001",\ "mycall": "AA0AA-0",\ "mygrid": "JN40aa",\ - "deviceid": "RIG_MODEL_DUMMY_NOVFO",\ - "deviceport": "/dev/ttyACM1",\ - "serialspeed_direct": "9600",\ + "radiocontrol" : "disabled",\ + "hamlib_deviceid": "RIG_MODEL_DUMMY_NOVFO",\ + "enable_hamlib_deviceport" : "False",\ + "hamlib_deviceport": "/dev/ttyACM1",\ + "enable_hamlib_stop_bits" : "False",\ + "hamlib_stop_bits" : "1",\ + "enable_hamlib_data_bits" : "False",\ + "hamlib_data_bits" : "8",\ + "enable_hamlib_handshake" : "False",\ + "hamlib_handshake" : "None",\ + "enable_hamlib_serialspeed" : "False",\ + "hamlib_serialspeed" : "9600",\ + "enable_hamlib_pttprotocol" : "False",\ + "hamlib_pttprotocol" : "USB",\ + "enable_hamlib_pttport" : "False",\ + "hamlib_pttport": "/dev/ttyACM1",\ + "hamlib_dcd": "None",\ + "hamlbib_serialspeed_ptt": "9600",\ + "hamlib_rigctld_port" : "4532",\ + "hamlib_rigctld_ip" : "127.0.0.1",\ + "hamlib_rigctld_path" : "",\ + "hamlib_rigctld_server_port" : "4532",\ "spectrum": "waterfall",\ "tnclocation": "localhost",\ - "stop_bits_direct" : "1",\ - "data_bits_direct" : "8",\ - "handshake_direct" : "None",\ - "radiocontrol" : "disabled",\ - "deviceport_rigctl" : "3",\ - "deviceid_rigctl" : "3",\ - "serialspeed_rigctl" : "9600",\ - "pttprotocol_direct" : "USB",\ - "pttprotocol_rigctl" : "USB",\ - "rigctld_port" : "4532",\ - "rigctld_ip" : "127.0.0.1",\ "enable_scatter" : "False",\ "enable_fft" : "False",\ "enable_fsk" : "False",\ @@ -379,7 +387,7 @@ app.on('window-all-closed', () => { // IPC HANDLER -ipcMain.on('request-show-chat-window', (event, arg) => { +ipcMain.on('request-show-chat-window', () => { chat.show(); }); @@ -437,10 +445,19 @@ ipcMain.on('request-update-transmission-status', (event, arg) => { chat.webContents.send('action-update-transmission-status', arg); }); -ipcMain.on('request-open-tnc-log', (event) => { +ipcMain.on('request-open-tnc-log', () => { logViewer.show(); }); +//file selector +ipcMain.on('get-file-path',(event,data)=>{ + dialog.showOpenDialog({defaultPath: path.join(__dirname, '../'), + buttonLabel: 'Select rigctld', properties: ['openFile']}).then(filePaths => { + win.webContents.send('return-file-paths', {path: filePaths,}) + + }); +}); + //folder selector ipcMain.on('get-folder-path',(event,data)=>{ dialog.showOpenDialog({defaultPath: path.join(__dirname, '../'), @@ -757,3 +774,121 @@ function close_all() { } +// RUN RIGCTLD +ipcMain.on('request-start-rigctld',(event, data)=>{ + + + try{ + exec(data.path, data.parameters); + } catch (e) { + console.log(e); + } + + + + /* + const rigctld = exec(data.path, data.parameters); + rigctld.stdout.on("data", data => { + console.log(`stdout: ${data}`); + }); + */ + + +}); + + +// STOP RIGCTLD +ipcMain.on('request-stop-rigctld',(event,data)=>{ + mainLog.warn('closing rigctld'); + try { + + if(os.platform()=='win32' || os.platform()=='win64'){ + exec('Taskkill', ['/IM', 'rigctld.exe', '/F']) + } + + if(os.platform()=='linux'){ + + exec('pkill', ['-9', 'rigctld']) + + } + + if(os.platform()=='darwin'){ + + exec('pkill', ['-9', 'rigctld']) + + } + } catch (e) { + mainLog.error(e) + } +}); + + + +// CHECK RIGCTLD +ipcMain.on('request-check-rigctld',(data)=>{ + try { + + if(os.platform()=='win32' || os.platform()=='win64'){ + var state = exec('tasklist', ['/svc', '/FI', 'ImageName eq rigctld*']) + state.on('close', function(code) { + if(code == 0){ + let Data = { + state: "running", + }; + win.webContents.send('action-check-rigctld', Data); + + } else { + let Data = { + state: "unknown", + }; + win.webContents.send('action-check-rigctld', Data); + + } + }); + } + + if(os.platform()=='linux'){ + + var state = exec('pgrep', ['rigctld']) + state.on('close', function(code) { + if(code == 0){ + let Data = { + state: "running", + }; + win.webContents.send('action-check-rigctld', Data); + + } else { + let Data = { + state: "unknown", + }; + win.webContents.send('action-check-rigctld', Data); + + } + }); + + } + + if(os.platform()=='darwin'){ + + var state = exec('pgrep', ['rigctld']) + state.on('close', function(code) { + if(code == 0){ + let Data = { + state: "running", + }; + win.webContents.send('action-check-rigctld', Data); + + } else { + let Data = { + state: "unknown", + }; + win.webContents.send('action-check-rigctld', Data); + + } + }); + + } + } catch (e) { + mainLog.error(e) + } +}); \ No newline at end of file diff --git a/gui/package.json b/gui/package.json index 86f6e817..d6e732ea 100644 --- a/gui/package.json +++ b/gui/package.json @@ -77,6 +77,10 @@ "icon": "src/img/icon.png", "target": [ "nsis" + ], + "arch": [ + "x64", + "ia32" ] }, "linux": { @@ -84,6 +88,9 @@ "target": [ "AppImage" ], + "arch": [ + "x64" + ], "category": "Development" }, "publish": { diff --git a/gui/preload-main.js b/gui/preload-main.js index c0c0d697..c0c52235 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -1,5 +1,6 @@ const path = require('path'); const {ipcRenderer} = require('electron'); +const exec = require('child_process').spawn; const sock = require('./sock.js'); const daemon = require('./daemon.js'); const fs = require('fs'); @@ -62,13 +63,6 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () */ - // DISABLE HAMLIB DIRECT AND RIGCTL ON WINDOWS - if(os.platform()=='win32' || os.platform()=='win64'){ - - document.getElementById("radio-control-switch1").style.disabled = true; - //document.getElementById("radio-control-switch2").style.disabled = true; - } - // ENABLE TOOLTIPS EVERYWHERE // https://getbootstrap.com/docs/5.1/components/tooltips/ var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) @@ -90,31 +84,45 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () document.getElementById("myCallSSID").value = ssid; document.getElementById("myGrid").value = config.mygrid; - - document.getElementById('hamlib_deviceid').value = config.deviceid; - document.getElementById('hamlib_serialspeed').value = config.serialspeed_direct; - document.getElementById('hamlib_ptt_protocol').value = config.pttprotocol_direct; - 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_serialspeed_advanced').value = config.serialspeed_direct; - document.getElementById('hamlib_ptt_protocol_advanced').value = config.pttprotocol_direct; - document.getElementById('hamlib_databits_advanced').value = config.data_bits_direct; - document.getElementById('hamlib_stopbits_advanced').value = config.stop_bits_direct; - document.getElementById('hamlib_handshake_advanced').value = config.handshake_direct; + // hamlib settings + document.getElementById('hamlib_deviceid').value = config.hamlib_deviceid; + +set_setting_switch("enable_hamlib_deviceport", "hamlib_deviceport", config.enable_hamlib_deviceport) +set_setting_switch("enable_hamlib_ptt_port", "hamlib_ptt_port", config.enable_hamlib_ptt_port) + + document.getElementById('hamlib_serialspeed').value = config.hamlib_serialspeed; + set_setting_switch("enable_hamlib_serialspeed", "hamlib_serialspeed", config.enable_hamlib_serialspeed) + + document.getElementById('hamlib_pttprotocol').value = config.hamlib_pttprotocol; + set_setting_switch("enable_hamlib_pttprotocol", "hamlib_pttprotocol", config.enable_hamlib_pttprotocol) + + document.getElementById('hamlib_databits').value = config.hamlib_data_bits; + set_setting_switch("enable_hamlib_databits", "hamlib_databits", config.enable_hamlib_databits) + + document.getElementById('hamlib_stopbits').value = config.hamlib_stop_bits; + set_setting_switch("enable_hamlib_stopbits", "hamlib_stopbits", config.enable_hamlib_stopbits) + + document.getElementById('hamlib_handshake').value = config.hamlib_handshake; + set_setting_switch("enable_hamlib_handshake", "hamlib_handshake", config.enable_hamlib_handshake) + + document.getElementById('hamlib_dcd').value = config.hamlib_dcd; + set_setting_switch("enable_hamlib_dcd", "hamlib_dcd", config.enable_hamlib_dcd) + + + document.getElementById("hamlib_rigctld_ip").value = config.hamlib_rigctld_ip; + document.getElementById("hamlib_rigctld_port").value = config.hamlib_rigctld_port; + document.getElementById("hamlib_rigctld_path").value = config.hamlib_rigctld_path; + document.getElementById("hamlib_rigctld_server_port").value = config.hamlib_rigctld_server_port; + + document.getElementById("beaconInterval").value = config.beacon_interval; document.getElementById("scatterSwitch").value = config.enable_scatter; document.getElementById("fftSwitch").value = config.enable_fft; - //document.getElementById("500HzModeSwitch").value = config.low_bandwidth_mode; - //document.getElementById("fskModeSwitch").value = config.enable_fsk; - //document.getElementById("respondCQSwitch").value = config.respond_to_cq; + + document.getElementById("received_files_folder").value = config.received_files_folder; @@ -193,70 +201,59 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () } // radio control element - if (config.radiocontrol == 'direct') { + if (config.radiocontrol == 'rigctld') { - 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-switch-disabled").checked = false; + document.getElementById("radio-control-switch-radio").checked = true; + document.getElementById("radio-control-switch-connect").checked = false; + document.getElementById("radio-control-switch-network").checked = false; - //document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; - document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; - //document.getElementById("radio-control-rigctl").style.display = 'none'; + document.getElementById("radio-control-disabled").style.visibility = 'hidden'; + document.getElementById("radio-control-disabled").style.display = 'none'; + + document.getElementById("radio-control-radio").style.visibility = 'visible'; + document.getElementById("radio-control-radio").style.display = '100%'; + + document.getElementById("radio-control-connection").style.visibility = 'hidden'; + document.getElementById("radio-control-connection").style.display = 'none'; + + document.getElementById("radio-control-ptt").style.visibility = 'hidden'; + document.getElementById("radio-control-ptt").style.display = 'none'; + + document.getElementById("radio-control-network").style.visibility = 'hidden'; + document.getElementById("radio-control-network").style.display = 'none'; + + document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; document.getElementById("radio-control-rigctld").style.display = 'none'; - document.getElementById("radio-control-direct").style.display = 'block'; - document.getElementById("radio-control-direct").style.visibility = 'visible'; - document.getElementById("radio-control-direct").style.height = '100%'; - - /* - } 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-direct").style.visibility = 'hidden'; - document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; - document.getElementById("radio-control-direct").style.display = 'none'; - document.getElementById("radio-control-rigctld").style.display = 'none'; - - document.getElementById("radio-control-rigctl").style.display = 'block'; - document.getElementById("radio-control-rigctl").style.visibility = 'visible'; - document.getElementById("radio-control-rigctl").style.height = '100%'; -*/ - } 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-direct").style.visibility = 'hidden'; - //document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; - document.getElementById("radio-control-direct").style.display = 'none'; - //document.getElementById("radio-control-rigctl").style.display = 'none'; - - document.getElementById("radio-control-rigctld").style.display = 'block'; - document.getElementById("radio-control-rigctld").style.visibility = 'visible'; - document.getElementById("radio-control-rigctld").style.height = '100%'; - + document.getElementById("radio-control-rigctld-info").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld-info").style.display = 'none'; } 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-switch-disabled").checked = true; + document.getElementById("radio-control-switch-radio").checked = false; + document.getElementById("radio-control-switch-connect").checked = false; + document.getElementById("radio-control-switch-network").checked = false; + document.getElementById("radio-control-switch-rigctld").checked = false; + document.getElementById("radio-control-switch-rigctld-info").checked = false; - //document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; - document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; - //document.getElementById("radio-control-rigctl").style.display = 'none'; - document.getElementById("radio-control-rigctld").style.display = 'none'; + document.getElementById("radio-control-connection").style.visibility = 'hidden'; + document.getElementById("radio-control-connection").style.display = 'none'; - document.getElementById("radio-control-direct").style.display = 'block'; - document.getElementById("radio-control-direct").style.visibility = 'visible'; - document.getElementById("radio-control-direct").style.height = '100%'; + document.getElementById("radio-control-ptt").style.visibility = 'hidden'; + document.getElementById("radio-control-ptt").style.display = 'none'; + + document.getElementById("radio-control-network").style.display = 'none'; + document.getElementById("radio-control-network").style.visibility = 'hidden'; + + document.getElementById("radio-control-radio").style.display = 'none'; + document.getElementById("radio-control-radio").style.visibility = 'hidden'; + + document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld").style.display = 'none'; + + document.getElementById("radio-control-rigctld-info").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld-info").style.display = 'none'; } @@ -281,63 +278,379 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () // on click radio control toggle view // disabled - document.getElementById("radio-control-switch0").addEventListener("click", () => { - //document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; - document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; - //document.getElementById("radio-control-rigctl").style.display = 'none'; - document.getElementById("radio-control-rigctld").style.display = 'none'; + document.getElementById("radio-control-switch-disabled").addEventListener("click", () => { + + document.getElementById("hamlib_info_field").innerHTML = 'Set hamlib related settings.'; + + document.getElementById("radio-control-disabled").style.display = 'block'; + document.getElementById("radio-control-disabled").style.visibility = 'visible'; + + document.getElementById("radio-control-radio").style.display = 'none'; + document.getElementById("radio-control-radio").style.visibility = 'hidden'; + + document.getElementById("radio-control-connection").style.visibility = 'hidden'; + document.getElementById("radio-control-connection").style.display = 'none'; + + document.getElementById("radio-control-ptt").style.visibility = 'hidden'; + document.getElementById("radio-control-ptt").style.display = 'none'; + + document.getElementById("radio-control-network").style.display = 'none'; + document.getElementById("radio-control-network").style.visibility = 'hidden'; + + document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld").style.display = 'none'; + + document.getElementById("radio-control-rigctld-info").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld-info").style.display = 'none'; - 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 = 'disabled' fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); - // direct - document.getElementById("radio-control-switch1").addEventListener("click", () => { - //document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; - document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; - //document.getElementById("radio-control-rigctl").style.display = 'none'; - document.getElementById("radio-control-rigctld").style.display = 'none'; + // radio settings event listener + document.getElementById("radio-control-switch-radio").addEventListener("click", () => { - 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'; + document.getElementById("hamlib_info_field").innerHTML = 'Select your radio by searching for the name or ID.'; + + document.getElementById("radio-control-disabled").style.display = 'none'; + document.getElementById("radio-control-disabled").style.visibility = 'hidden'; + + document.getElementById("radio-control-radio").style.display = 'block'; + document.getElementById("radio-control-radio").style.visibility = 'visible'; + + document.getElementById("radio-control-connection").style.visibility = 'hidden'; + document.getElementById("radio-control-connection").style.display = 'none'; + + document.getElementById("radio-control-ptt").style.visibility = 'hidden'; + document.getElementById("radio-control-ptt").style.display = 'none'; + + document.getElementById("radio-control-network").style.display = 'none'; + document.getElementById("radio-control-network").style.visibility = 'hidden'; + + document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld").style.display = 'none'; + + document.getElementById("radio-control-rigctld-info").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld-info").style.display = 'none'; + + config.radiocontrol = 'rigctld'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); - /* - // rigctl - document.getElementById("radio-control-switch2").addEventListener("click", () => { - document.getElementById("radio-control-direct").style.visibility = 'hidden'; - document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; - document.getElementById("radio-control-direct").style.display = 'none'; - document.getElementById("radio-control-rigctld").style.display = 'none'; - //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'; + // radio settings 'connection' event listener + document.getElementById("radio-control-switch-connect").addEventListener("click", () => { + + document.getElementById("hamlib_info_field").innerHTML = 'Setup the connection between rigctld and your radio'; + + document.getElementById("radio-control-disabled").style.display = 'none'; + document.getElementById("radio-control-disabled").style.visibility = 'hidden'; + + document.getElementById("radio-control-radio").style.display = 'none'; + document.getElementById("radio-control-radio").style.visibility = 'hidden'; + + document.getElementById("radio-control-connection").style.visibility = 'visible'; + document.getElementById("radio-control-connection").style.display = 'block'; + + document.getElementById("radio-control-ptt").style.visibility = 'hidden'; + document.getElementById("radio-control-ptt").style.display = 'none'; + + document.getElementById("radio-control-network").style.display = 'none'; + document.getElementById("radio-control-network").style.visibility = 'hidden'; + + document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld").style.display = 'none'; + + document.getElementById("radio-control-rigctld-info").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld-info").style.display = 'none'; + + config.radiocontrol = 'rigctld'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); - */ - // rigctld - document.getElementById("radio-control-switch3").addEventListener("click", () => { - document.getElementById("radio-control-direct").style.visibility = 'hidden'; - //document.getElementById("radio-control-rigctl").style.visibility = 'hidden'; - document.getElementById("radio-control-direct").style.display = 'none'; - //document.getElementById("radio-control-rigctl").style.display = 'none'; - document.getElementById("radio-control-rigctld").style.display = 'block'; - document.getElementById("radio-control-rigctld").style.visibility = 'visible'; - document.getElementById("radio-control-rigctld").style.height = '100%'; + // radio settings 'ptt' event listener + document.getElementById("radio-control-switch-ptt").addEventListener("click", () => { + + document.getElementById("hamlib_info_field").innerHTML = 'Set your PTT related settings.'; + + document.getElementById("radio-control-disabled").style.display = 'none'; + document.getElementById("radio-control-disabled").style.visibility = 'hidden'; + + document.getElementById("radio-control-radio").style.display = 'none'; + document.getElementById("radio-control-radio").style.visibility = 'hidden'; + + document.getElementById("radio-control-connection").style.visibility = 'hidden'; + document.getElementById("radio-control-connection").style.display = 'none'; + + document.getElementById("radio-control-ptt").style.visibility = 'visible'; + document.getElementById("radio-control-ptt").style.display = 'block'; + + document.getElementById("radio-control-network").style.display = 'none'; + document.getElementById("radio-control-network").style.visibility = 'hidden'; + + document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld").style.display = 'none'; + + document.getElementById("radio-control-rigctld-info").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld-info").style.display = 'none'; + + config.radiocontrol = 'rigctld'; + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + }); + + + // // radio settings 'network' event listener + document.getElementById("radio-control-switch-network").addEventListener("click", () => { + + document.getElementById("hamlib_info_field").innerHTML = 'Set the ip and port of a rigctld session'; + + document.getElementById("radio-control-disabled").style.display = 'none'; + document.getElementById("radio-control-disabled").style.visibility = 'hidden'; + + document.getElementById("radio-control-radio").style.display = 'none'; + document.getElementById("radio-control-radio").style.visibility = 'hidden'; + + document.getElementById("radio-control-connection").style.visibility = 'hidden'; + document.getElementById("radio-control-connection").style.display = 'none'; + + document.getElementById("radio-control-ptt").style.visibility = 'hidden'; + document.getElementById("radio-control-ptt").style.display = 'none'; + + document.getElementById("radio-control-network").style.display = 'block'; + document.getElementById("radio-control-network").style.visibility = 'visible'; + + document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld").style.display = 'none'; + + document.getElementById("radio-control-rigctld-info").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld-info").style.display = 'none'; + config.radiocontrol = 'rigctld'; fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); }); + // // radio settings 'rigctld' event listener + document.getElementById("radio-control-switch-rigctld").addEventListener("click", () => { + + document.getElementById("hamlib_info_field").innerHTML = 'Define the rigctld path and port'; + + document.getElementById("radio-control-disabled").style.display = 'none'; + document.getElementById("radio-control-disabled").style.visibility = 'hidden'; + + document.getElementById("radio-control-radio").style.display = 'none'; + document.getElementById("radio-control-radio").style.visibility = 'hidden'; + + document.getElementById("radio-control-connection").style.visibility = 'hidden'; + document.getElementById("radio-control-connection").style.display = 'none'; + + document.getElementById("radio-control-ptt").style.visibility = 'hidden'; + document.getElementById("radio-control-ptt").style.display = 'none'; + + document.getElementById("radio-control-network").style.display = 'none'; + document.getElementById("radio-control-network").style.visibility = 'hidden'; + + document.getElementById("radio-control-rigctld").style.visibility = 'visible'; + document.getElementById("radio-control-rigctld").style.display = 'block'; + + document.getElementById("radio-control-rigctld-info").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld-info").style.display = 'none'; + + config.radiocontrol = 'rigctld'; + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + }); + + // // radio settings 'rigctld' event listener + document.getElementById("radio-control-switch-rigctld-info").addEventListener("click", () => { + + document.getElementById("hamlib_info_field").innerHTML = 'Start and stop rigctld .'; + + + document.getElementById("radio-control-disabled").style.display = 'none'; + document.getElementById("radio-control-disabled").style.visibility = 'hidden'; + + document.getElementById("radio-control-radio").style.display = 'none'; + document.getElementById("radio-control-radio").style.visibility = 'hidden'; + + document.getElementById("radio-control-connection").style.visibility = 'hidden'; + document.getElementById("radio-control-connection").style.display = 'none'; + + document.getElementById("radio-control-ptt").style.visibility = 'hidden'; + document.getElementById("radio-control-ptt").style.display = 'none'; + + document.getElementById("radio-control-network").style.display = 'none'; + document.getElementById("radio-control-network").style.visibility = 'hidden'; + + document.getElementById("radio-control-rigctld").style.visibility = 'hidden'; + document.getElementById("radio-control-rigctld").style.display = 'none'; + + document.getElementById("radio-control-rigctld-info").style.visibility = 'visible'; + document.getElementById("radio-control-rigctld-info").style.display = 'block'; + + config.radiocontrol = 'rigctld'; + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + }); + + + // radio settings 'enable hamlib deviceport' event listener + document.getElementById("enable_hamlib_deviceport").addEventListener("change", () => { + enable_setting("enable_hamlib_deviceport", "hamlib_deviceport") + }); + + // radio settings 'enable hamlib serialspeed' event listener + document.getElementById("enable_hamlib_serialspeed").addEventListener("change", () => { + enable_setting("enable_hamlib_serialspeed", "hamlib_serialspeed") + }); + + // radio settings 'enable hamlib data bits' event listener + document.getElementById("enable_hamlib_databits").addEventListener("change", () => { + enable_setting("enable_hamlib_databits", "hamlib_databits") + }); + + // radio settings 'enable hamlib stop bits' event listener + document.getElementById("enable_hamlib_stopbits").addEventListener("change", () => { + enable_setting("enable_hamlib_stopbits", "hamlib_stopbits") + }); + + // radio settings 'enable hamlib handshake' event listener + document.getElementById("enable_hamlib_handshake").addEventListener("change", () => { + enable_setting("enable_hamlib_handshake", "hamlib_handshake") + }); + + // radio settings 'enable hamlib ptt port' event listener + document.getElementById("enable_hamlib_ptt_port").addEventListener("change", () => { + enable_setting("enable_hamlib_ptt_port", "hamlib_ptt_port") + }); + + // radio settings 'enable hamlib ptt protocol' event listener + document.getElementById("enable_hamlib_pttprotocol").addEventListener("change", () => { + enable_setting("enable_hamlib_pttprotocol", "hamlib_pttprotocol") + }); + // radio settings 'enable hamlib dcd' event listener + document.getElementById("enable_hamlib_dcd").addEventListener("change", () => { + enable_setting("enable_hamlib_dcd", "hamlib_dcd") + }); + + +/* +document.getElementById('hamlib_rigctld_path').addEventListener('change', () => { +var fileList = document.getElementById("dataModalFile").files; + console.log(fileList) + +}) +*/ + +document.getElementById('hamlib_rigctld_path').addEventListener('click', () => { + + ipcRenderer.send('get-file-path',{ + title: 'Title', + }); + + ipcRenderer.on('return-file-paths',(event,data)=>{ + rigctldPath = data.path.filePaths[0] + document.getElementById("hamlib_rigctld_path").value = rigctldPath + config.hamlib_rigctld_path = rigctldPath + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + + }); +}) + + // radio settings 'hamlib_rigctld_server_port' event listener + document.getElementById("hamlib_rigctld_server_port").addEventListener("change", () => { + + + config.hamlib_rigctld_server_port = document.getElementById("hamlib_rigctld_server_port").value + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + }); + + + +document.getElementById('hamlib_rigctld_start').addEventListener('click', () => { + var rigctldPath = document.getElementById("hamlib_rigctld_path").value; + + + var paramList = [] + + var hamlib_deviceid = document.getElementById("hamlib_deviceid").value; + paramList = paramList.concat('-m', hamlib_deviceid) + + // hamlib deviceport setting + if (document.getElementById('enable_hamlib_deviceport').checked){ + var hamlib_deviceport = document.getElementById("hamlib_deviceport").value; + paramList = paramList.concat('-r', hamlib_deviceport) + } + + // hamlib serialspeed setting + if (document.getElementById('enable_hamlib_serialspeed').checked){ + var hamlib_serialspeed = document.getElementById("hamlib_serialspeed").value; + paramList = paramList.concat('-s', hamlib_serialspeed) + } + + // hamlib databits setting + if (document.getElementById('enable_hamlib_databits').checked){ + var hamlib_databits = document.getElementById("hamlib_databits").value; + paramList = paramList.concat('--set-conf=data_bits=' + hamlib_databits) + } + + // hamlib stopbits setting + if (document.getElementById('enable_hamlib_stopbits').checked){ + var hamlib_stopbits = document.getElementById("hamlib_stopbits").value; + paramList = paramList.concat('--set-conf=stop_bits=' + hamlib_stopbits) + } + + // hamlib handshake setting + if (document.getElementById('enable_hamlib_handshake').checked){ + var hamlib_handshake = document.getElementById("hamlib_handshake").value; + paramList = paramList.concat('--set-conf=serial_handshake=' + hamlib_handshake) + } + + // hamlib dcd setting + if (document.getElementById('enable_hamlib_dcd').checked){ + var hamlib_dcd = document.getElementById("hamlib_dcd").value; + paramList = paramList.concat('--dcd-type=' + hamlib_dcd) + } + + // hamlib ptt port + if (document.getElementById('enable_hamlib_ptt_port').checked){ + var hamlib_ptt_port = document.getElementById("hamlib_ptt_port").value; + paramList = paramList.concat('-p', hamlib_ptt_port) + } + + // hamlib ptt type + if (document.getElementById('enable_hamlib_pttprotocol').checked){ + var hamlib_ptt_type = document.getElementById("hamlib_pttprotocol").value; + paramList = paramList.concat('--ptt-type=', hamlib_ptt_type) + } + + var hamlib_rigctld_server_port = document.getElementById("hamlib_rigctld_server_port").value; + paramList = paramList.concat('-t', hamlib_rigctld_server_port) + + + + + document.getElementById('hamlib_rigctld_command').value = paramList + + console.log(paramList) + console.log(rigctldPath) + + let Data = { + path: rigctldPath, + parameters: paramList + }; + ipcRenderer.send('request-start-rigctld', Data); + + + +}) +document.getElementById('hamlib_rigctld_stop').addEventListener('click', () => { + ipcRenderer.send('request-stop-rigctld',{ + path: '123', + parameters: '--version' + }); + + +}) + // on click waterfall scatter toggle view // waterfall @@ -621,11 +934,13 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () var rigctld_ip = document.getElementById("hamlib_rigctld_ip").value; var rigctld_port = document.getElementById("hamlib_rigctld_port").value; + var hamlib_rigctld_server_port = document.getElementById("hamlib_rigctld_server_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 pttprotocol = document.getElementById("hamlib_pttprotocol").value; + var hamlib_dcd = document.getElementById("hamlib_dcd").value; var mycall = document.getElementById("myCall").value; var ssid = document.getElementById("myCallSSID").value; @@ -636,10 +951,10 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () 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; + var pttport = document.getElementById("hamlib_ptt_port").value; + var data_bits = document.getElementById('hamlib_databits').value; + var stop_bits = document.getElementById('hamlib_stopbits').value; + var handshake = document.getElementById('hamlib_handshake').value; if (document.getElementById("scatterSwitch").checked == true){ var enable_scatter = "True"; @@ -693,46 +1008,36 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () } } - /* - // 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) { + if (!document.getElementById("radio-control-switch-disabled").checked) { var radiocontrol = 'rigctld'; - - } else if (document.getElementById("radio-control-switch1").checked) { - var radiocontrol = 'direct'; - } else { var radiocontrol = 'disabled'; } var tx_audio_level = document.getElementById("audioLevelTX").value; var rx_buffer_size = document.getElementById("rx_buffer_size").value; - + + + + config.radiocontrol = radiocontrol; config.mycall = callsign_ssid; config.mygrid = mygrid; - config.deviceid = deviceid; - config.deviceport = deviceport; - config.serialspeed_direct = serialspeed; - config.pttprotocol_direct = pttprotocol; - config.pttport = pttport; - config.data_bits_direct = data_bits; - config.stop_bits_direct = stop_bits; - config.handshake_direct = handshake; + config.hamlib_deviceid = deviceid; + config.hamlib_deviceport = deviceport; + config.hamlib_serialspeed = serialspeed; + config.hamlib_pttprotocol = pttprotocol; + config.hamlib_pttport = pttport; + config.hamlib_data_bits = data_bits; + config.hamlib_stop_bits = stop_bits; + config.hamlib_handshake = handshake; + config.hamlib_dcd = hamlib_dcd; //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.hamlib_rigctld_port = rigctld_port; + config.hamlib_rigctld_ip = rigctld_ip; + config.hamlib_rigctld_server_port = hamlib_rigctld_server_port; //config.deviceport_rigctl = deviceport_rigctl; config.enable_scatter = enable_scatter; config.enable_fft = enable_fft; @@ -819,10 +1124,10 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () 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").value; + var stop_bits = document.getElementById("hamlib_stopbits").value; + var handshake = document.getElementById("hamlib_handshake").value; + var pttport = document.getElementById("hamlib_ptt_port").value; var rigctld_ip = document.getElementById("hamlib_rigctld_ip").value; var rigctld_port = document.getElementById("hamlib_rigctld_port").value; @@ -830,30 +1135,14 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () 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 pttprotocol = document.getElementById("hamlib_pttprotocol").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; - - } else */ - if (document.getElementById("radio-control-switch3").checked) { - var radiocontrol = 'rigctld'; - - } else if (document.getElementById("radio-control-switch1").checked) { - var radiocontrol = 'direct'; - } else { + if (document.getElementById("radio-control-switch-disabled").checked) { var radiocontrol = 'disabled'; + } else { + var radiocontrol = 'rigctld'; } - - daemon.testHamlib(radiocontrol, deviceid, deviceport, serialspeed, pttprotocol, pttport, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port) }) @@ -927,7 +1216,9 @@ document.getElementById('openReceivedFilesFolder').addEventListener('click', () command: "openRFChat" }; ipcRenderer.send('request-show-chat-window', Data); - }) + }) + + @@ -1420,7 +1711,7 @@ ipcRenderer.on('action-update-daemon-state', (event, arg) => { option.text = arg.serial_devices[i]['port'] + ' -- ' + arg.serial_devices[i]['description']; option.value = arg.serial_devices[i]['port']; // set device from config if available - if(config.deviceport == option.value){ + if(config.hamlib_deviceport == option.value){ option.setAttribute('selected', true); } document.getElementById("hamlib_deviceport").add(option); @@ -1428,53 +1719,22 @@ 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 = ""; - for (i = 0; i < arg.serial_devices.length; i++) { - var option = document.createElement("option"); - option.text = arg.serial_devices[i]['description']; - option.value = arg.serial_devices[i]['port']; - // set device from config if available - if(config.deviceport == option.value){ - option.setAttribute('selected', true); - } - document.getElementById("hamlib_deviceport_advanced").add(option); - } - } - - /* - // rigctl settings - if (document.getElementById("hamlib_deviceport_rigctl").length != arg.serial_devices.length) { - 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']; - option.value = arg.serial_devices[i]['port']; - // set device from config if available - if(config.deviceport == option.value){ - option.setAttribute('selected', true); - } - document.getElementById("hamlib_deviceport_rigctl").add(option); - } - } - */ - + } 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 = ""; + if (document.getElementById("hamlib_ptt_port").length != arg.serial_devices.length) { + document.getElementById("hamlib_ptt_port").innerHTML = ""; for (i = 0; i < arg.serial_devices.length; i++) { var option = document.createElement("option"); option.text = arg.serial_devices[i]['description']; option.value = arg.serial_devices[i]['port']; // set device from config if available - if(config.pttport == option.value){ + if(config.hamlib_pttport == option.value){ option.setAttribute('selected', true); } - document.getElementById("hamlib_ptt_port_advanced").add(option); + document.getElementById("hamlib_ptt_port").add(option); } } } @@ -1528,12 +1788,12 @@ ipcRenderer.on('action-update-daemon-connection', (event, arg) => { }); -ipcRenderer.on('action-update-tnc-connection', (event, arg) => { +ipcRenderer.on('action-update-tnc-connection', (arg) => { if (arg.tnc_connection == "open") { + /* 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; @@ -1543,6 +1803,7 @@ ipcRenderer.on('action-update-tnc-connection', (event, arg) => { 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}) @@ -1554,9 +1815,9 @@ ipcRenderer.on('action-update-tnc-connection', (event, arg) => { var collapseFourthRow = new bootstrap.Collapse(document.getElementById('collapseFourthRow'), {toggle: false}) 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; @@ -1566,7 +1827,7 @@ ipcRenderer.on('action-update-tnc-connection', (event, arg) => { 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(); @@ -1978,45 +2239,35 @@ ipcRenderer.on('action-show-arq-toast-session-failed', (event, data) => { 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(); + + + + + + +// enable or disable a setting by given switch and element +function enable_setting(enable_switch, enable_object){ + if(document.getElementById(enable_switch).checked){ + config[enable_switch] = true + document.getElementById(enable_object).removeAttribute("disabled","disabled"); + } else { + config[enable_switch] = false + document.getElementById(enable_object).setAttribute("disabled","disabled"); } - */ + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); +} - // 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(); - //} +// enable or disable a setting switch +function set_setting_switch(setting_switch, enable_object, state){ + document.getElementById(setting_switch).checked = state + enable_setting(setting_switch, enable_object) + } - - /* - // 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(); - } - */ - - - - /* - // 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(); - } - - */ \ No newline at end of file +setInterval(checkRigctld, 500) +function checkRigctld(){ + ipcRenderer.send('request-check-rigctld'); +} +ipcRenderer.on('action-check-rigctld', (event, data) => { + console.log(data) + document.getElementById("hamlib_rigctld_status").value = data["state"]; +}); \ No newline at end of file diff --git a/gui/src/index.html b/gui/src/index.html index d1dc53fb..8d52e57c 100644 --- a/gui/src/index.html +++ b/gui/src/index.html @@ -1,847 +1,810 @@ - - - - - - - - - - - - - - - FreeDATA by DJ2LS - - - - +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+
AUDIO
+
+
- -
-
+ +
+
- -
-
- -
-
-
-
-
- RADIO -
- - - - - - - -
-
- -
-
- -
-
-
-
-
- + +
+
+ +
+
+
+
+
+
+ + + + + + + + +
+
+ + + + +
+
+ + +
+
+ +
+
+
+ +
hamlib/rigctld connection disabled
+ +
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ + - - Speed - -
-
- -
-
Rigctld IP - : - -
-
-
- -
-
-
-
-
-
-
MY STATION -
-
-
-
-
- + + + + +
+
Data + + + Stop + + + HS + + + +
+
+ +
+
+ + + Type + + + +
+
DCD + + + +
+
+ +
+
Rigctld IP + : +
+
+ +
+
Rigctld Path +
+
Rigctld Server Port +
+
+ +
+
Cmd +
+
+ + + +
+
+
+ +
+
+
+
+
+
+
MY STATION
+
+
+
+
- - - -
-
-
-
+ + + +
+
+
+
- - -
-
-
- -
-
-
-
-
-
- UPDATER -
-
-
-
-
-
- - - - -
-
-
-
-
-
-
-
-
-
AUDIO LEVEL - -
-
-
-
-

RX AUDIO LEVEL - not implemented yet

-
-
-
-
-
-
-
-
-
-
-
-
PING, CQ & BEACON -
-
-
-
-
- - - - -
-
-
-
- -
-
-
-
- -
Beacon
- - -
-
-
- -
-
-
-
-
-
-
-
-
- - - - -
- -
-
- +
+
+
+
+
+
UPDATER +
+
+
+
+
+ + + + +
+
+
+
+
+
+
+
+
+
AUDIO LEVEL + +
+
+
+
+

RX AUDIO LEVEL - not implemented yet

+
+
+
+
+
+
+
+
+
+
+
+
PING, CQ & BEACON
+
+
+
+
+ + + + +
+
+
+
+ +
+
+
+
+ +
Beacon
+ + +
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + +
+ +
+
+ - - - -
-
-
-
-
- -
- - HEARD STATIONS -
-
- - - - - - - - - - - - - - - - + + + + + +
+
+ +
HEARD STATIONS
+
+ +
TimeFrequencyDXCallDXGridDistanceTypeSNROff
+ + + + + + + + + + + + + + - -
TimeFrequencyDXCallDXGridDistanceTypeSNROff
- -
-
-
-
-
-
- -
-
- -
+ + + +
+
+
+
+ + + +
+
+ +
Filetransfer
- -
-
- - - -
-
- - - - - - - +
TimeDXCall
+ + + + + - - - - - - + + + + - -
TimeDXCallFilename
- -
-
- -
-
-
Transmit Files
- -
-
- -
-
-
-
-
-
DX Station -
-
-
-
- +
+
+ +
+
+
Transmit Files
+ +
+
+ +
+
+
+
+
+
DX Station
+
+
+
+ -
-
-
- ACK - 0000 km - 0 dB -
-
-
-
-
-
- -
- -
-
-
-
+
+
+ ACK 0000 km 0 dB
+
+
+
+
+
+ +
+ +
+
+
+ -
-
- -
- -
-
-
-
Mode -
-
-
-
-
- Mode - -
-
-
-
- Frames - -
-
-
-
-
- -
- -
-
-
-
+
+ +
+ +
+
+
+
Mode
+
+
+
+
Mode + +
+
+
+
Frames + +
+
+
+
+
+ +
+ +
+
+
+ -
-
- -
-
- -
-
-
- -
- - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - +
+
+
+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tnc/data_handler.py b/tnc/data_handler.py index e39ab7e6..f43449ec 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -43,6 +43,9 @@ class DATA: self.data_queue_transmit = DATA_QUEUE_TRANSMIT self.data_queue_received = DATA_QUEUE_RECEIVED + # length of signalling frame + self.length_sig_frame = 14 + # ------- ARQ SESSION self.arq_file_transfer = False self.IS_ARQ_SESSION_MASTER = False @@ -87,7 +90,7 @@ class DATA: self.snr_list_low_bw = [0] # List for time to wait for corresponding mode in seconds - self.time_list_low_bw = [6] + self.time_list_low_bw = [8] # List of codec2 modes to use in "high bandwidth" mode. self.mode_list_high_bw = [ @@ -98,7 +101,7 @@ class DATA: self.snr_list_high_bw = [0, 5] # List for time to wait for corresponding mode in seconds - self.time_list_high_bw = [6, 7] + self.time_list_high_bw = [8, 9] # Mode list for selecting between low bandwidth ( 500Hz ) and modes with higher bandwidth # but ability to fall back to low bandwidth modes if needed. @@ -389,7 +392,7 @@ class DATA: def send_burst_ack_frame(self, snr) -> None: """Build and send ACK frame for burst DATA frame""" - ack_frame = bytearray(14) + ack_frame = bytearray(self.length_sig_frame) ack_frame[:1] = bytes([FR_TYPE.BURST_ACK.value]) ack_frame[1:4] = static.DXCALLSIGN_CRC ack_frame[4:7] = static.MYCALLSIGN_CRC @@ -401,7 +404,7 @@ class DATA: def send_data_ack_frame(self, snr) -> None: """Build and send ACK frame for received DATA frame""" - ack_frame = bytearray(14) + ack_frame = bytearray(self.length_sig_frame) ack_frame[:1] = bytes([FR_TYPE.FR_ACK.value]) ack_frame[1:4] = static.DXCALLSIGN_CRC ack_frame[4:7] = static.MYCALLSIGN_CRC @@ -428,7 +431,7 @@ class DATA: # TODO: Trim `missing_frames` bytesarray to [7:13] (6) frames, if it's larger. # then create a repeat frame - rpt_frame = bytearray(14) + rpt_frame = bytearray(self.length_sig_frame) rpt_frame[:1] = bytes([FR_TYPE.FR_REPEAT.value]) rpt_frame[1:4] = static.DXCALLSIGN_CRC rpt_frame[4:7] = static.MYCALLSIGN_CRC @@ -440,7 +443,7 @@ class DATA: def send_burst_nack_frame(self, snr: float = 0) -> None: """Build and send NACK frame for received DATA frame""" - nack_frame = bytearray(14) + nack_frame = bytearray(self.length_sig_frame) nack_frame[:1] = bytes([FR_TYPE.FR_NACK.value]) nack_frame[1:4] = static.DXCALLSIGN_CRC nack_frame[4:7] = static.MYCALLSIGN_CRC @@ -452,7 +455,7 @@ class DATA: def send_burst_nack_frame_watchdog(self, snr: float = 0) -> None: """Build and send NACK frame for watchdog timeout""" - nack_frame = bytearray(14) + nack_frame = bytearray(self.length_sig_frame) nack_frame[:1] = bytes([FR_TYPE.BURST_NACK.value]) nack_frame[1:4] = static.DXCALLSIGN_CRC nack_frame[4:7] = static.MYCALLSIGN_CRC @@ -464,7 +467,7 @@ class DATA: def send_disconnect_frame(self) -> None: """Build and send a disconnect frame""" - disconnection_frame = bytearray(14) + disconnection_frame = bytearray(self.length_sig_frame) disconnection_frame[:1] = bytes([FR_TYPE.ARQ_SESSION_CLOSE.value]) disconnection_frame[1:4] = static.DXCALLSIGN_CRC disconnection_frame[4:7] = static.MYCALLSIGN_CRC @@ -600,6 +603,7 @@ class DATA: ) static.ARQ_SPEED_LEVEL = self.speed_level + # Update modes we are listening to self.set_listening_modes(self.mode_list[self.speed_level]) @@ -1268,7 +1272,7 @@ class DATA: self.IS_ARQ_SESSION_MASTER = True static.ARQ_SESSION_STATE = "connecting" - connection_frame = bytearray(14) + connection_frame = bytearray(self.length_sig_frame) connection_frame[:1] = bytes([FR_TYPE.ARQ_SESSION_OPEN.value]) connection_frame[1:4] = static.DXCALLSIGN_CRC connection_frame[4:7] = static.MYCALLSIGN_CRC @@ -1425,7 +1429,7 @@ class DATA: # static.TNC_STATE = "BUSY" # static.ARQ_SESSION_STATE = "connected" - connection_frame = bytearray(14) + connection_frame = bytearray(self.length_sig_frame) connection_frame[:1] = bytes([FR_TYPE.ARQ_SESSION_HB.value]) connection_frame[1:4] = static.DXCALLSIGN_CRC connection_frame[4:7] = static.MYCALLSIGN_CRC @@ -1544,7 +1548,7 @@ class DATA: frametype = bytes([FR_TYPE.ARQ_DC_OPEN_W.value]) self.log.debug("[TNC] Requesting high bandwidth mode") - connection_frame = bytearray(14) + connection_frame = bytearray(self.length_sig_frame) connection_frame[:1] = frametype connection_frame[1:4] = static.DXCALLSIGN_CRC connection_frame[4:7] = static.MYCALLSIGN_CRC @@ -1572,7 +1576,7 @@ class DATA: self.enqueue_frame_for_tx(connection_frame) - timeout = time.time() + 2 + timeout = time.time() + 4 while time.time() < timeout: time.sleep(0.01) # Stop waiting if data channel is opened @@ -1734,7 +1738,7 @@ class DATA: frametype = bytes([FR_TYPE.ARQ_DC_OPEN_ACK_W.value]) self.log.debug("[TNC] Responding with high bandwidth mode") - connection_frame = bytearray(14) + connection_frame = bytearray(self.length_sig_frame) connection_frame[:1] = frametype connection_frame[1:4] = static.DXCALLSIGN_CRC connection_frame[4:7] = static.MYCALLSIGN_CRC @@ -1856,7 +1860,7 @@ class DATA: + "]" ) - ping_frame = bytearray(14) + ping_frame = bytearray(self.length_sig_frame) ping_frame[:1] = bytes([FR_TYPE.PING.value]) ping_frame[1:4] = static.DXCALLSIGN_CRC ping_frame[4:7] = static.MYCALLSIGN_CRC @@ -1915,7 +1919,7 @@ class DATA: snr=static.SNR, ) - ping_frame = bytearray(14) + ping_frame = bytearray(self.length_sig_frame) ping_frame[:1] = bytes([FR_TYPE.PING_ACK.value]) ping_frame[1:4] = static.DXCALLSIGN_CRC ping_frame[4:7] = static.MYCALLSIGN_CRC @@ -1972,7 +1976,7 @@ class DATA: Force a stop of the running transmission """ self.log.warning("[TNC] Stopping transmission!") - stop_frame = bytearray(14) + stop_frame = bytearray(self.length_sig_frame) stop_frame[:1] = bytes([FR_TYPE.ARQ_STOP.value]) stop_frame[1:4] = static.DXCALLSIGN_CRC stop_frame[4:7] = static.MYCALLSIGN_CRC @@ -2037,7 +2041,7 @@ class DATA: "[TNC] Sending beacon!", interval=self.beacon_interval ) - beacon_frame = bytearray(14) + beacon_frame = bytearray(self.length_sig_frame) beacon_frame[:1] = bytes([FR_TYPE.BEACON.value]) beacon_frame[1:7] = helpers.callsign_to_bytes(self.mycallsign) beacon_frame[9:13] = static.MYGRID[:4] @@ -2115,7 +2119,7 @@ class DATA: freedata="tnc-message", cq="transmitting", ) - cq_frame = bytearray(14) + cq_frame = bytearray(self.length_sig_frame) cq_frame[:1] = bytes([FR_TYPE.CQ.value]) cq_frame[1:7] = helpers.callsign_to_bytes(self.mycallsign) cq_frame[7:11] = helpers.encode_grid(static.MYGRID.decode("UTF-8")) @@ -2186,7 +2190,7 @@ class DATA: ) self.log.info("[TNC] Sending QRV!") - qrv_frame = bytearray(14) + qrv_frame = bytearray(self.length_sig_frame) qrv_frame[:1] = bytes([FR_TYPE.QRV.value]) qrv_frame[1:7] = helpers.callsign_to_bytes(self.mycallsign) qrv_frame[7:11] = helpers.encode_grid(static.MYGRID.decode("UTF-8"))