diff --git a/gui/src/components/main.vue b/gui/src/components/main.vue
index f43c6a4f..d6a54623 100644
--- a/gui/src/components/main.vue
+++ b/gui/src/components/main.vue
@@ -19,7 +19,8 @@ import chat from "./chat.vue";
import infoScreen from "./infoScreen.vue";
import { stopTransmission } from "../js/sock.js";
-import { fetchSettings } from "../js/rest.js";
+import { fetchSettings } from "../js/settingsHandler.js";
+
function stopAllTransmissions() {
console.log("stopping transmissions");
stopTransmission();
diff --git a/gui/src/components/settings_chat.vue b/gui/src/components/settings_chat.vue
index 2cf67656..86907d4b 100644
--- a/gui/src/components/settings_chat.vue
+++ b/gui/src/components/settings_chat.vue
@@ -1,5 +1,5 @@
diff --git a/gui/src/components/settings_exp.vue b/gui/src/components/settings_exp.vue
index d3e3d3ba..673cc6ad 100644
--- a/gui/src/components/settings_exp.vue
+++ b/gui/src/components/settings_exp.vue
@@ -1,5 +1,5 @@
diff --git a/gui/src/components/settings_hamlib.vue b/gui/src/components/settings_hamlib.vue
index 541bb6d2..8ef809e4 100644
--- a/gui/src/components/settings_hamlib.vue
+++ b/gui/src/components/settings_hamlib.vue
@@ -1,5 +1,5 @@
diff --git a/gui/src/components/settings_modem.vue b/gui/src/components/settings_modem.vue
index d6daa5bc..b37c203f 100644
--- a/gui/src/components/settings_modem.vue
+++ b/gui/src/components/settings_modem.vue
@@ -1,5 +1,5 @@
@@ -76,7 +73,7 @@ function saveSettings() {
maxlength="5"
max="65534"
min="1025"
- @change="saveSettings"
+ @change="saveSettings()"
v-model="settings.modem_port"
/>
diff --git a/gui/src/components/settings_rigcontrol.vue b/gui/src/components/settings_rigcontrol.vue
index 7d93ddce..85741371 100644
--- a/gui/src/components/settings_rigcontrol.vue
+++ b/gui/src/components/settings_rigcontrol.vue
@@ -1,5 +1,5 @@
diff --git a/gui/src/components/settings_station.vue b/gui/src/components/settings_station.vue
index 4237c3e1..b0365f8d 100644
--- a/gui/src/components/settings_station.vue
+++ b/gui/src/components/settings_station.vue
@@ -1,5 +1,5 @@
diff --git a/gui/src/components/settings_web.vue b/gui/src/components/settings_web.vue
index aaa0aa43..2feb9c25 100644
--- a/gui/src/components/settings_web.vue
+++ b/gui/src/components/settings_web.vue
@@ -1,5 +1,5 @@
diff --git a/gui/src/js/rest.js b/gui/src/js/rest.js
index 81869b38..66c3bda1 100644
--- a/gui/src/js/rest.js
+++ b/gui/src/js/rest.js
@@ -2,30 +2,46 @@
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
+import { processModemConfig, getModemConfigAsJSON } from "../js/settingsHandler.ts";
-import { useSettingsStore } from "../store/settingsStore.js";
-const settings = useSettingsStore(pinia);
-
-import { processModemConfig } from "../js/settingsHandler.ts";
-
-export function fetchSettings() {
- // fetch Settings
- getFromServer("localhost", 5000, "config");
-}
-
-async function getFromServer(host, port, endpoint) {
+export async function getFromServer(host, port, endpoint) {
// our central function for fetching the modems REST API by a specific endpoint
// TODO make this function using the host and port, specified in settings
- // include better error handling
- const url = "http://" + host + ":" + port + "/" + endpoint;
+ const url = `http://${host}:${port}/${endpoint}`;
const response = await fetch(url);
+ if (!response.ok) {
+ throw new Error(`REST response not ok: ${response.statusText}`);
+ }
const data = await response.json();
// move received data to our data dispatcher
restDataDispatcher(endpoint, data.data);
}
+export async function postToServer(host, port, endpoint, data) {
+ // our central function for posting to the modems REST API by a specific endpoint
+ // TODO make this function using the host and port, specified in settings
+
+ const url = `http://${host}:${port}/${endpoint}`;
+ try {
+ const response = await fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(data)
+ });
+
+ if (!response.ok) {
+ throw new Error(`REST response not ok: ${response.statusText}`);
+ }
+ } catch (error) {
+ console.error('Error posting to REST:', error);
+ }
+}
+
+
function restDataDispatcher(endpoint, data) {
// dispatch received data by endpoint
@@ -33,6 +49,12 @@ function restDataDispatcher(endpoint, data) {
case "config":
processModemConfig(data);
break;
+ case "devices/audio":
+ //processModemAudioDevices(data);
+ break;
+ case "devices/serial":
+ //processModemSerialDevices(data);
+ break;
default:
console.log("Wrong endpoint:" + endpoint);
diff --git a/gui/src/js/settingsHandler.ts b/gui/src/js/settingsHandler.ts
index aa33c114..3b551e41 100644
--- a/gui/src/js/settingsHandler.ts
+++ b/gui/src/js/settingsHandler.ts
@@ -9,6 +9,8 @@ setActivePinia(pinia);
import { useSettingsStore } from "../store/settingsStore.js";
const settings = useSettingsStore(pinia);
+import { postToServer, getFromServer } from "./rest.js";
+
// ---------------------------------
console.log(process.env);
@@ -103,13 +105,124 @@ export function saveSettingsToFile() {
let config = settings.getJSON();
console.log(config);
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
+
+
}
export function processModemConfig(data) {
- console.log(data);
- // basic test if we received settings
- // we should iterate through JSON, by using equal variables here like in modem config
- // STATION SETTINGS
- settings.mycall = data["STATION"].mycall;
- settings.mygrid = data["STATION"].mygrid;
+ // update our settings from get request
+ // TODO Can we make this more dynamic? Maybe using a settings object?
+ // For now its a hardcoded structure until we found a better way
+
+ console.log(data)
+
+ // STATION SETTINGS
+ // Extract the callsign and SSID
+ if (data.STATION.mycall.includes('-')) {
+ const splittedCallsign = data.STATION.mycall.split('-');
+ settings.mycall = splittedCallsign[0]; // The part before the hyphen
+ settings.myssid = parseInt(splittedCallsign[1], 10); // The part after the hyphen, converted to a number
+ } else {
+ settings.mycall = data.STATION.mycall; // Use the original mycall if no SSID is present
+ settings.myssid = 0; // Default SSID if not provided
+ }
+ settings.mygrid = data.STATION.mygrid;
+
+ // ssid list not yet implemented
+ //data.STATION.ssid_list[0];
+
+ // AUDIO SETTINGS
+ settings.auto_tune = data.AUDIO.auto_tune;
+ settings.rx_audio_level = data.AUDIO.rxaudiolevel;
+ settings.tx_audio_level = data.AUDIO.txaudiolevel;
+
+ // MODEM SETTINGS
+ settings.enable_fft = data.Modem.fft;
+ settings.enable_fsk = data.Modem.fsk;
+ settings.tuning_range_fmin = data.Modem.fmin;
+ settings.tuning_range_fmax = data.Modem.fmax;
+ settings.rx_buffer_size = data.Modem.rx_buffer_size;
+ settings.enable_explorer = data.Modem.explorer;
+ settings.explorer_stats = data.Modem.stats;
+ settings.tx_delay = data.Modem.tx_delay;
+ settings.respond_to_cq = data.Modem.qrv;
+ settings.low_bandwidth_mode = data.Modem.narrowband;
+
+ // HAMLIB SETTINGS
+ settings.hamlib_rigctld_port = data.RADIO.rigctld_port;
+ settings.hamlib_rigctld_ip = data.RADIO.rigctld_ip;
+ settings.radiocontrol = data.RADIO.radiocontrol;
+
+ // TCI SETTINGS
+ settings.tci_ip = data.TCI.ip;
+ settings.tci_port = data.TCI.port;
+
+ // MESH SETTINGS
+ settings.enable_mesh_features = data.MESH.enable_protocol;
+
}
+
+export function getModemConfigAsJSON(){
+ // create json output from settings
+ // TODO Can we make this more dynamic? Maybe using a settings object?
+ // For now its a hardcoded structure until we found a better way
+
+ const configData = {
+ "AUDIO": {
+ "auto_tune": settings.auto_tune,
+ "rx": "560f",
+ "rxaudiolevel": settings.rx_audio_level,
+ "tx": "560f",
+ "txaudiolevel": settings.tx_audio_level
+ },
+ "MESH": {
+ "enable_protocol": settings.enable_mesh_features
+ },
+ "Modem": {
+ "explorer": settings.enable_explorer,
+ "fft": settings.enable_fft,
+ "fmax": settings.tuning_range_fmax,
+ "fmin": settings.tuning_range_fmin,
+ "fsk": settings.enable_fsk,
+ "narrowband": settings.low_bandwidth_mode,
+ "qrv": settings.respond_to_cq,
+ "rx_buffer_size": settings.rx_buffer_size,
+ "scatter": "False",
+ "stats": settings.explorer_stats,
+ "tx_delay": settings.tx_delay
+ },
+ "NETWORK": {
+ "modemport": "3000"
+ },
+ "RADIO": {
+ "radiocontrol": settings.radiocontrol,
+ "rigctld_ip": settings.hamlib_rigctld_ip,
+ "rigctld_port": settings.hamlib_rigctld_port
+ },
+ "STATION": {
+ "mycall": settings.mycall + '-' + settings.myssid,
+ "mygrid": settings.mygrid,
+ "ssid_list": []
+ },
+ "TCI": {
+ "ip": settings.tci_ip,
+ "port": settings.tci_port
+ }
+ };
+
+ return configData;
+}
+
+export function fetchSettings() {
+ // fetch Settings
+ getFromServer("localhost", 5000, "config");
+ getFromServer("localhost", 5000, "devices/audio");
+ getFromServer("localhost", 5000, "devices/serial");
+}
+
+export function saveSettings(){
+ // save settings via post
+ console.log("post settings")
+ postToServer("localhost", 5000, "config", getModemConfigAsJSON());
+
+}
\ No newline at end of file