From 3f79f7a0c73eb0a574b63dc57fa12448e70b702e Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sat, 3 May 2025 03:57:31 +1000 Subject: [PATCH 01/10] add auto bw, ceq, ims, stereo options to setup --- server/endpoints.js | 1 + server/index.js | 43 ++++++++++++++++++++++++++++++++++++++--- server/server_config.js | 10 +++++++++- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/server/endpoints.js b/server/endpoints.js index 712fc62..1736723 100644 --- a/server/endpoints.js +++ b/server/endpoints.js @@ -146,6 +146,7 @@ router.get('/wizard', (req, res) => { enabledPlugins: updatedConfig.plugins, onlineUsers: dataHandler.dataToSend.users, connectedUsers: storage.connectedUsers, + device: serverConfig.device, banlist: updatedConfig.webserver.banlist // Updated banlist from the latest config }); }); diff --git a/server/index.js b/server/index.js index a1db2c0..66d2efc 100644 --- a/server/index.js +++ b/server/index.js @@ -188,7 +188,20 @@ if (serverConfig.xdrd.wirelessConnection === false) { serialport.write('F-1\n'); serialport.write('W0\n'); serverConfig.webserver.rdsMode ? serialport.write('D1\n') : serialport.write('D0\n'); - serialport.write('G00\n'); + // cEQ and iMS combinations + if (serverConfig.ceqStartup === "0" && serverConfig.imsStartup === "0") { + serialport.write("G00\n"); // Both Disabled + } else if (serverConfig.ceqStartup === "1" && serverConfig.imsStartup === "0") { + serialport.write(`G10\n`); + } else if (serverConfig.ceqStartup === "0" && serverConfig.imsStartup === "1") { + serialport.write(`G01\n`); + } else if (serverConfig.ceqStartup === "1" && serverConfig.imsStartup === "1") { + serialport.write("G11\n"); // Both Enabled + } + // Handle stereo mode + if (serverConfig.stereoStartup === "1") { + serialport.write("B1\n"); // Mono + } serverConfig.audio.startupVolume ? serialport.write('Y' + (serverConfig.audio.startupVolume * 100).toFixed(0) + '\n') : serialport.write('Y100\n'); @@ -485,8 +498,32 @@ wss.on('connection', (ws, request) => { if (currentUsers === 0) { storage.connectedUsers = []; - output.write('W0\n'); - output.write('B0\n'); + + if (serverConfig.bwAutoNoUsers === "1") { + output.write("W0\n"); // Auto BW 'Enabled' + } + + // cEQ and iMS combinations + if (serverConfig.ceqNoUsers === "1" && serverConfig.imsNoUsers === "1") { + output.write("G00\n"); // Both Disabled + } else if (serverConfig.ceqNoUsers === "1" && serverConfig.imsNoUsers === "0") { + output.write(`G0${dataHandler.dataToSend.ims}\n`); + } else if (serverConfig.ceqNoUsers === "0" && serverConfig.imsNoUsers === "1") { + output.write(`G${dataHandler.dataToSend.eq}0\n`); + } else if (serverConfig.ceqNoUsers === "2" && serverConfig.imsNoUsers === "0") { + output.write(`G1${dataHandler.dataToSend.ims}\n`); + } else if (serverConfig.ceqNoUsers === "0" && serverConfig.imsNoUsers === "2") { + output.write(`G${dataHandler.dataToSend.eq}1\n`); + } else if (serverConfig.ceqNoUsers === "2" && serverConfig.imsNoUsers === "2") { + output.write("G11\n"); // Both Enabled + } + + // Handle stereo mode + if (serverConfig.stereoNoUsers === "1") { + output.write("B0\n"); + } else if (serverConfig.stereoNoUsers === "2") { + output.write("B1\n"); + } } if (tunerLockTracker.has(ws)) { diff --git a/server/server_config.js b/server/server_config.js index ff5ad2e..cc36c81 100644 --- a/server/server_config.js +++ b/server/server_config.js @@ -105,7 +105,15 @@ let serverConfig = { autoShutdown: false, enableDefaultFreq: false, defaultFreq: "87.5", - bwSwitch: false + bwSwitch: false, + bwAutoStartup: "0", + bwAutoNoUsers: "0", + ceqStartup: "0", + ceqNoUsers: "0", + imsStartup: "0", + imsNoUsers: "0", + stereoStartup: "0", + stereoNoUsers: "0" }; // Function to add missing fields without overwriting existing values From 2177c7e46c15c14d9cb1fa2617493d3316246e5d Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sat, 3 May 2025 03:59:56 +1000 Subject: [PATCH 02/10] add auto bw, ceq, ims, stereo options to setup --- web/setup.ejs | 106 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 5 deletions(-) diff --git a/web/setup.ejs b/web/setup.ejs index 59ae2f0..5834a61 100644 --- a/web/setup.ejs +++ b/web/setup.ejs @@ -217,18 +217,18 @@

Experimental

-

If you use an USB audio card on Linux, enabling this option might fix your audio issues.

+

If you use a USB audio card on Linux, enabling this option might fix your audio issues.

<%- include('_components', {component: 'checkbox', cssClass: '', label: 'ALSA Software mode', id: 'audio-softwareMode'}) %>
-
+

FFmpeg

Legacy option for Linux / macOS that could resolve audio issues, but will consume additional CPU and RAM usage.

<%- include('_components', {component: 'checkbox', cssClass: '', label: 'Additional FFmpeg', id: 'audio-ffmpeg'}) %>
-
-

Sample rate Offset

+
+

Sample rate offset

Using a negative value could eliminate audio buffering issues during long periods of listening.
However, a value that’s too low might increase the buffer over time.

@@ -325,7 +325,7 @@

You can switch between American (RBDS) / Global (RDS) mode here.

<%- include('_components', {component: 'checkbox', cssClass: 'bottom-20', iconClass: '', label: 'American RDS mode (RBDS)', id: 'webserver-rdsMode'}) %>
-
+

Transmitter Search Algorithm

Different modes may help with more accurate transmitter identification depending on your region.

<%- include('_components', { component: 'dropdown', id: 'server-tx-id-algo', inputId: 'webserver-txIdAlgorithm', label: 'Transmitter ID Algorithm', cssClass: '', placeholder: 'Algorithm 1', @@ -426,6 +426,102 @@
+
+
+

On startup

+

Settings take effect on server launch

+
+ <% if (device === 'tef') { %> + <%- include('_components', { component: 'dropdown', id: 'ceqStartup-dropdown', inputId: 'ceqStartup', label: 'cEQ', cssClass: '', placeholder: 'Disabled', + options: [ + { value: '0', label: 'Disabled' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
+ + <%- include('_components', { component: 'dropdown', id: 'imsStartup-dropdown', inputId: 'imsStartup', label: 'iMS', cssClass: '', placeholder: 'Disabled', + options: [ + { value: '0', label: 'Disabled' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
+ <% } else if (device === 'xdr') { %> + <%- include('_components', { component: 'dropdown', id: 'rfStartup-dropdown', inputId: 'ceqStartup', label: 'RF+', cssClass: '', placeholder: 'Disabled', + options: [ + { value: '0', label: 'Disabled' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
+ + <%- include('_components', { component: 'dropdown', id: 'ifStartup-dropdown', inputId: 'imsStartup', label: 'IF+', cssClass: '', placeholder: 'Disabled', + options: [ + { value: '0', label: 'Disabled' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
+ <% } %> + <%- include('_components', { component: 'dropdown', id: 'stereoStartup-dropdown', inputId: 'stereoStartup', label: 'Stereo Mode', cssClass: '', placeholder: 'Stereo (Default)', + options: [ + { value: '0', label: 'Stereo (Default)' }, + { value: '1', label: 'Mono' }, + ] + }) %>
+
+
+
+
+
+

On no active users

+

Settings take effect immediately after saving

+
+ <%- include('_components', { component: 'dropdown', id: 'bwAutoNoUsers-dropdown', inputId: 'bwAutoNoUsers', label: 'Auto BW', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
+ <% if (device === 'tef') { %> + <%- include('_components', { component: 'dropdown', id: 'ceqNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'cEQ+', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Disabled' }, + { value: '2', label: 'Enabled' }, + ] + }) %>
+ + <%- include('_components', { component: 'dropdown', id: 'imsNoUsers-dropdown', inputId: 'imsNoUsers', label: 'iMS', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Disabled' }, + { value: '2', label: 'Enabled' }, + ] + }) %>
+ <% } else if (device === 'xdr') { %> + <%- include('_components', { component: 'dropdown', id: 'rfNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'RF+', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Disabled' }, + { value: '2', label: 'Enabled' }, + ] + }) %>
+ <%- include('_components', { component: 'dropdown', id: 'ifNoUsers-dropdown', inputId: 'imsNoUsers', label: 'IF+', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Disabled' }, + { value: '2', label: 'Enabled' }, + ] + }) %>
+ <% } %> + <%- include('_components', { component: 'dropdown', id: 'stereoNoUsers-dropdown', inputId: 'stereoNoUsers', label: 'Stereo Mode', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Stereo' }, + { value: '2', label: 'Mono' }, + ] + }) %>
+
+
+
From 95280d88fa84ffbaaa11295763bdb65705dec62e Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sat, 3 May 2025 04:16:51 +1000 Subject: [PATCH 03/10] fix typo for add auto bw, ceq, ims, stereo --- web/setup.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/setup.ejs b/web/setup.ejs index 5834a61..3f05524 100644 --- a/web/setup.ejs +++ b/web/setup.ejs @@ -481,7 +481,7 @@ ] }) %>
<% if (device === 'tef') { %> - <%- include('_components', { component: 'dropdown', id: 'ceqNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'cEQ+', cssClass: '', placeholder: 'Unchanged', + <%- include('_components', { component: 'dropdown', id: 'ceqNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'cEQ', cssClass: '', placeholder: 'Unchanged', options: [ { value: '0', label: 'Unchanged' }, { value: '1', label: 'Disabled' }, From 8700b663ca72d81fa7cde6d8e9d1fbe603c75922 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sat, 3 May 2025 04:52:06 +1000 Subject: [PATCH 04/10] add antenna to setup options --- server/index.js | 13 ++++++++++++- server/server_config.js | 4 +++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/server/index.js b/server/index.js index 66d2efc..27fc145 100644 --- a/server/index.js +++ b/server/index.js @@ -171,7 +171,7 @@ if (serverConfig.xdrd.wirelessConnection === false) { setTimeout(() => { serialport.write('Q0\n'); serialport.write('M0\n'); - serialport.write('Z0\n'); + serialport.write(`Z${serverConfig.antennaStartup}\n`); // Antenna on startup if (serverConfig.defaultFreq && serverConfig.enableDefaultFreq === true) { serialport.write('T' + Math.round(serverConfig.defaultFreq * 1000) + '\n'); @@ -524,6 +524,17 @@ wss.on('connection', (ws, request) => { } else if (serverConfig.stereoNoUsers === "2") { output.write("B1\n"); } + + // Handle Antenna selection + if (serverConfig.antennaNoUnsers === "1") { + output.write("Z0\n"); + } else if (serverConfig.antennaNoUnsers === "2") { + output.write("Z1\n"); + } else if (serverConfig.antennaNoUnsers === "3") { + output.write("Z2\n"); + } else if (serverConfig.antennaNoUnsers === "4") { + output.write("Z3\n"); + } } if (tunerLockTracker.has(ws)) { diff --git a/server/server_config.js b/server/server_config.js index cc36c81..5f754dc 100644 --- a/server/server_config.js +++ b/server/server_config.js @@ -113,7 +113,9 @@ let serverConfig = { imsStartup: "0", imsNoUsers: "0", stereoStartup: "0", - stereoNoUsers: "0" + stereoNoUsers: "0", + antennaStartup: "0", + antennaNoUnsers: "0" }; // Function to add missing fields without overwriting existing values From 6e4138b283b2c42ee8706e9cfdd2e5ecae7201c3 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sat, 3 May 2025 04:52:20 +1000 Subject: [PATCH 05/10] add antenna to setup options --- web/setup.ejs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/web/setup.ejs b/web/setup.ejs index 3f05524..8610070 100644 --- a/web/setup.ejs +++ b/web/setup.ejs @@ -466,11 +466,19 @@ { value: '1', label: 'Mono' }, ] }) %>
+ <%- include('_components', { component: 'dropdown', id: 'antennaStartup-dropdown', inputId: 'antennaStartup', label: 'Antenna', cssClass: '', placeholder: 'Antenna 0 (Default)', + options: [ + { value: '0', label: 'Antenna 0 (Default)' }, + { value: '1', label: 'Antenna 1' }, + { value: '2', label: 'Antenna 2' }, + { value: '3', label: 'Antenna 3' }, + ] + }) %>
-
+

On no active users

Settings take effect immediately after saving

@@ -519,6 +527,15 @@ { value: '2', label: 'Mono' }, ] }) %>
+ <%- include('_components', { component: 'dropdown', id: 'antennaNoUnsers-dropdown', inputId: 'antennaNoUnsers', label: 'Antenna', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Antenna 0' }, + { value: '2', label: 'Antenna 1' }, + { value: '3', label: 'Antenna 2' }, + { value: '4', label: 'Antenna 3' }, + ] + }) %>
From 61638175faa51de161cf3a871e2fcf372f15da00 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sat, 3 May 2025 04:59:28 +1000 Subject: [PATCH 06/10] reposition antenna setup option --- web/setup.ejs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/web/setup.ejs b/web/setup.ejs index 8610070..bfc20e0 100644 --- a/web/setup.ejs +++ b/web/setup.ejs @@ -427,7 +427,7 @@
-
+

On startup

Settings take effect on server launch

@@ -452,7 +452,6 @@ { value: '1', label: 'Enabled' }, ] }) %>
- <%- include('_components', { component: 'dropdown', id: 'ifStartup-dropdown', inputId: 'imsStartup', label: 'IF+', cssClass: '', placeholder: 'Disabled', options: [ { value: '0', label: 'Disabled' }, @@ -466,6 +465,8 @@ { value: '1', label: 'Mono' }, ] }) %>
+
+
<%- include('_components', { component: 'dropdown', id: 'antennaStartup-dropdown', inputId: 'antennaStartup', label: 'Antenna', cssClass: '', placeholder: 'Antenna 0 (Default)', options: [ { value: '0', label: 'Antenna 0 (Default)' }, @@ -527,6 +528,8 @@ { value: '2', label: 'Mono' }, ] }) %>
+
+
<%- include('_components', { component: 'dropdown', id: 'antennaNoUnsers-dropdown', inputId: 'antennaNoUnsers', label: 'Antenna', cssClass: '', placeholder: 'Unchanged', options: [ { value: '0', label: 'Unchanged' }, From 3436d3171e880277be24e8158039a9474cd4f16c Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Wed, 30 Jul 2025 18:12:38 +1000 Subject: [PATCH 07/10] add delayed antenna change option --- server/index.js | 22 +++++++++++++--------- server/server_config.js | 3 ++- web/setup.ejs | 10 ++++++---- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/server/index.js b/server/index.js index 27fc145..636842f 100644 --- a/server/index.js +++ b/server/index.js @@ -103,6 +103,7 @@ const proxy = httpProxy.createProxyServer({ let currentUsers = 0; let serialport; +let timeoutAntenna; app.use(bodyParser.urlencoded({ extended: true })); const sessionMiddleware = session({ @@ -526,15 +527,18 @@ wss.on('connection', (ws, request) => { } // Handle Antenna selection - if (serverConfig.antennaNoUnsers === "1") { - output.write("Z0\n"); - } else if (serverConfig.antennaNoUnsers === "2") { - output.write("Z1\n"); - } else if (serverConfig.antennaNoUnsers === "3") { - output.write("Z2\n"); - } else if (serverConfig.antennaNoUnsers === "4") { - output.write("Z3\n"); - } + if (timeoutAntenna) clearTimeout(timeoutAntenna); + timeoutAntenna = setTimeout(() => { + if (serverConfig.antennaNoUsers === "1") { + output.write("Z0\n"); + } else if (serverConfig.antennaNoUsers === "2") { + output.write("Z1\n"); + } else if (serverConfig.antennaNoUsers === "3") { + output.write("Z2\n"); + } else if (serverConfig.antennaNoUsers === "4") { + output.write("Z3\n"); + } + }, serverConfig.antennaNoUsersDelay ? 15000 : 0); } if (tunerLockTracker.has(ws)) { diff --git a/server/server_config.js b/server/server_config.js index 5f754dc..8e8a344 100644 --- a/server/server_config.js +++ b/server/server_config.js @@ -115,7 +115,8 @@ let serverConfig = { stereoStartup: "0", stereoNoUsers: "0", antennaStartup: "0", - antennaNoUnsers: "0" + antennaNoUsers: "0", + antennaNoUsersDelay: false }; // Function to add missing fields without overwriting existing values diff --git a/web/setup.ejs b/web/setup.ejs index bfc20e0..ee723d3 100644 --- a/web/setup.ejs +++ b/web/setup.ejs @@ -227,7 +227,7 @@

Legacy option for Linux / macOS that could resolve audio issues, but will consume additional CPU and RAM usage.

<%- include('_components', {component: 'checkbox', cssClass: '', label: 'Additional FFmpeg', id: 'audio-ffmpeg'}) %>
-
+

Sample rate offset

Using a negative value could eliminate audio buffering issues during long periods of listening.
However, a value that’s too low might increase the buffer over time.

@@ -479,7 +479,7 @@
-
+

On no active users

Settings take effect immediately after saving

@@ -530,7 +530,8 @@ }) %>
- <%- include('_components', { component: 'dropdown', id: 'antennaNoUnsers-dropdown', inputId: 'antennaNoUnsers', label: 'Antenna', cssClass: '', placeholder: 'Unchanged', + <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Delayed Antenna Change', id: 'antennaNoUsersDelay'}) %>
+ <%- include('_components', { component: 'dropdown', id: 'antennaNoUsers-dropdown', inputId: 'antennaNoUsers', label: 'Antenna', cssClass: '', placeholder: 'Unchanged', options: [ { value: '0', label: 'Unchanged' }, { value: '1', label: 'Antenna 0' }, @@ -538,7 +539,8 @@ { value: '3', label: 'Antenna 2' }, { value: '4', label: 'Antenna 3' }, ] - }) %>
+ }) %> +
From a3f107fe6462ded289b7a9ee32596016cf11214d Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Wed, 30 Jul 2025 18:31:04 +1000 Subject: [PATCH 08/10] move to startup category --- web/setup.ejs | 241 ++++++++++++++++++++++++++------------------------ 1 file changed, 123 insertions(+), 118 deletions(-) diff --git a/web/setup.ejs b/web/setup.ejs index ee723d3..f156ac8 100644 --- a/web/setup.ejs +++ b/web/setup.ejs @@ -39,6 +39,9 @@
  • User management
  • +
  • + Startup +
  • Extras
  • @@ -426,124 +429,6 @@
    -
    -
    -

    On startup

    -

    Settings take effect on server launch

    -
    - <% if (device === 'tef') { %> - <%- include('_components', { component: 'dropdown', id: 'ceqStartup-dropdown', inputId: 'ceqStartup', label: 'cEQ', cssClass: '', placeholder: 'Disabled', - options: [ - { value: '0', label: 'Disabled' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
    - - <%- include('_components', { component: 'dropdown', id: 'imsStartup-dropdown', inputId: 'imsStartup', label: 'iMS', cssClass: '', placeholder: 'Disabled', - options: [ - { value: '0', label: 'Disabled' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
    - <% } else if (device === 'xdr') { %> - <%- include('_components', { component: 'dropdown', id: 'rfStartup-dropdown', inputId: 'ceqStartup', label: 'RF+', cssClass: '', placeholder: 'Disabled', - options: [ - { value: '0', label: 'Disabled' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
    - <%- include('_components', { component: 'dropdown', id: 'ifStartup-dropdown', inputId: 'imsStartup', label: 'IF+', cssClass: '', placeholder: 'Disabled', - options: [ - { value: '0', label: 'Disabled' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
    - <% } %> - <%- include('_components', { component: 'dropdown', id: 'stereoStartup-dropdown', inputId: 'stereoStartup', label: 'Stereo Mode', cssClass: '', placeholder: 'Stereo (Default)', - options: [ - { value: '0', label: 'Stereo (Default)' }, - { value: '1', label: 'Mono' }, - ] - }) %>
    -
    -
    - <%- include('_components', { component: 'dropdown', id: 'antennaStartup-dropdown', inputId: 'antennaStartup', label: 'Antenna', cssClass: '', placeholder: 'Antenna 0 (Default)', - options: [ - { value: '0', label: 'Antenna 0 (Default)' }, - { value: '1', label: 'Antenna 1' }, - { value: '2', label: 'Antenna 2' }, - { value: '3', label: 'Antenna 3' }, - ] - }) %>
    -
    -
    -
    -
    -
    -

    On no active users

    -

    Settings take effect immediately after saving

    -
    - <%- include('_components', { component: 'dropdown', id: 'bwAutoNoUsers-dropdown', inputId: 'bwAutoNoUsers', label: 'Auto BW', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Enabled' }, - ] - }) %>
    - <% if (device === 'tef') { %> - <%- include('_components', { component: 'dropdown', id: 'ceqNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'cEQ', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Disabled' }, - { value: '2', label: 'Enabled' }, - ] - }) %>
    - - <%- include('_components', { component: 'dropdown', id: 'imsNoUsers-dropdown', inputId: 'imsNoUsers', label: 'iMS', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Disabled' }, - { value: '2', label: 'Enabled' }, - ] - }) %>
    - <% } else if (device === 'xdr') { %> - <%- include('_components', { component: 'dropdown', id: 'rfNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'RF+', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Disabled' }, - { value: '2', label: 'Enabled' }, - ] - }) %>
    - <%- include('_components', { component: 'dropdown', id: 'ifNoUsers-dropdown', inputId: 'imsNoUsers', label: 'IF+', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Disabled' }, - { value: '2', label: 'Enabled' }, - ] - }) %>
    - <% } %> - <%- include('_components', { component: 'dropdown', id: 'stereoNoUsers-dropdown', inputId: 'stereoNoUsers', label: 'Stereo Mode', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Stereo' }, - { value: '2', label: 'Mono' }, - ] - }) %>
    -
    -
    - <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Delayed Antenna Change', id: 'antennaNoUsersDelay'}) %>
    - <%- include('_components', { component: 'dropdown', id: 'antennaNoUsers-dropdown', inputId: 'antennaNoUsers', label: 'Antenna', cssClass: '', placeholder: 'Unchanged', - options: [ - { value: '0', label: 'Unchanged' }, - { value: '1', label: 'Antenna 0' }, - { value: '2', label: 'Antenna 1' }, - { value: '3', label: 'Antenna 2' }, - { value: '4', label: 'Antenna 3' }, - ] - }) %> -
    -
    -
    -
    @@ -671,6 +556,126 @@
    +
    +

    Startup settings

    +
    +
    +

    On startup

    +

    Settings take effect on server launch

    +
    + <% if (device === 'tef') { %> + <%- include('_components', { component: 'dropdown', id: 'ceqStartup-dropdown', inputId: 'ceqStartup', label: 'cEQ', cssClass: '', placeholder: 'Disabled', + options: [ + { value: '0', label: 'Disabled' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
    + <%- include('_components', { component: 'dropdown', id: 'imsStartup-dropdown', inputId: 'imsStartup', label: 'iMS', cssClass: '', placeholder: 'Disabled', + options: [ + { value: '0', label: 'Disabled' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
    + <% } else if (device === 'xdr') { %> + <%- include('_components', { component: 'dropdown', id: 'rfStartup-dropdown', inputId: 'ceqStartup', label: 'RF+', cssClass: '', placeholder: 'Disabled', + options: [ + { value: '0', label: 'Disabled' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
    + <%- include('_components', { component: 'dropdown', id: 'ifStartup-dropdown', inputId: 'imsStartup', label: 'IF+', cssClass: '', placeholder: 'Disabled', + options: [ + { value: '0', label: 'Disabled' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
    + <% } %> + <%- include('_components', { component: 'dropdown', id: 'stereoStartup-dropdown', inputId: 'stereoStartup', label: 'Stereo Mode', cssClass: '', placeholder: 'Stereo (Default)', + options: [ + { value: '0', label: 'Stereo (Default)' }, + { value: '1', label: 'Mono' }, + ] + }) %>
    +
    +
    + <%- include('_components', { component: 'dropdown', id: 'antennaStartup-dropdown', inputId: 'antennaStartup', label: 'Antenna', cssClass: '', placeholder: 'Antenna 0 (Default)', + options: [ + { value: '0', label: 'Antenna 0 (Default)' }, + { value: '1', label: 'Antenna 1' }, + { value: '2', label: 'Antenna 2' }, + { value: '3', label: 'Antenna 3' }, + ] + }) %>
    +
    +
    +
    +
    +
    +

    On no active users

    +

    Settings take effect immediately after saving

    +
    + <%- include('_components', { component: 'dropdown', id: 'bwAutoNoUsers-dropdown', inputId: 'bwAutoNoUsers', label: 'Auto BW', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Enabled' }, + ] + }) %>
    + <% if (device === 'tef') { %> + <%- include('_components', { component: 'dropdown', id: 'ceqNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'cEQ', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Disabled' }, + { value: '2', label: 'Enabled' }, + ] + }) %>
    + <%- include('_components', { component: 'dropdown', id: 'imsNoUsers-dropdown', inputId: 'imsNoUsers', label: 'iMS', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Disabled' }, + { value: '2', label: 'Enabled' }, + ] + }) %>
    + <% } else if (device === 'xdr') { %> + <%- include('_components', { component: 'dropdown', id: 'rfNoUsers-dropdown', inputId: 'ceqNoUsers', label: 'RF+', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Disabled' }, + { value: '2', label: 'Enabled' }, + ] + }) %>
    + <%- include('_components', { component: 'dropdown', id: 'ifNoUsers-dropdown', inputId: 'imsNoUsers', label: 'IF+', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Disabled' }, + { value: '2', label: 'Enabled' }, + ] + }) %>
    + <% } %> + <%- include('_components', { component: 'dropdown', id: 'stereoNoUsers-dropdown', inputId: 'stereoNoUsers', label: 'Stereo Mode', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Stereo' }, + { value: '2', label: 'Mono' }, + ] + }) %>
    +
    +
    + <%- include('_components', {component: 'checkbox', cssClass: '', label: 'Delayed Antenna Change', id: 'antennaNoUsersDelay'}) %>
    + <%- include('_components', { component: 'dropdown', id: 'antennaNoUsers-dropdown', inputId: 'antennaNoUsers', label: 'Antenna', cssClass: '', placeholder: 'Unchanged', + options: [ + { value: '0', label: 'Unchanged' }, + { value: '1', label: 'Antenna 0' }, + { value: '2', label: 'Antenna 1' }, + { value: '3', label: 'Antenna 2' }, + { value: '4', label: 'Antenna 3' }, + ] + }) %> +
    +
    +
    +
    +
    +

    Extras

    From edf440828352df7a893ec52c784b6fdf4d6b2df5 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Wed, 30 Jul 2025 18:49:29 +1000 Subject: [PATCH 09/10] change startup icon --- web/setup.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/setup.ejs b/web/setup.ejs index f156ac8..a25489e 100644 --- a/web/setup.ejs +++ b/web/setup.ejs @@ -40,7 +40,7 @@ User management
  • - Startup + Startup
  • Extras From 60c73a138cf0266b51f57d74d3dc0a561bbd4fe7 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Wed, 30 Jul 2025 19:19:16 +1000 Subject: [PATCH 10/10] make sure antenna timeout is cleared on user connect --- server/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/index.js b/server/index.js index 636842f..6b1c708 100644 --- a/server/index.js +++ b/server/index.js @@ -418,6 +418,8 @@ wss.on('connection', (ws, request) => { currentUsers++; } + if (timeoutAntenna) clearTimeout(timeoutAntenna); + helpers.handleConnect(clientIp, currentUsers, ws, (result) => { if (result === "User banned") { ws.close(1008, 'Banned IP');