From f99eecb894e55a2876b9f5cd0646ab731ae4a4d7 Mon Sep 17 00:00:00 2001 From: DJ2LS <75909252+DJ2LS@users.noreply.github.com> Date: Fri, 26 Apr 2024 11:54:24 +0200 Subject: [PATCH] WIP: added tuner option and swr --- freedata_server/radio_manager.py | 7 +++- freedata_server/rigctld.py | 68 +++++++++++++++++++++++++++++++- freedata_server/rigdummy.py | 19 +++++++++ freedata_server/server.py | 2 + freedata_server/state_manager.py | 4 ++ 5 files changed, 97 insertions(+), 3 deletions(-) diff --git a/freedata_server/radio_manager.py b/freedata_server/radio_manager.py index a28d9805..a0942b1d 100644 --- a/freedata_server/radio_manager.py +++ b/freedata_server/radio_manager.py @@ -1,5 +1,4 @@ import rigctld -import tci import rigdummy import time import threading @@ -33,6 +32,9 @@ class RadioManager: def set_ptt(self, state): self.radio.set_ptt(state) + def set_tuner(self, state): + self.radio.set_tuner(state) + def set_frequency(self, frequency): self.radio.set_frequency(frequency) @@ -49,9 +51,12 @@ class RadioManager: self.state_manager.set("radio_mode", parameters['mode']) self.state_manager.set("radio_bandwidth", parameters['bandwidth']) self.state_manager.set("radio_rf_level", parameters['rf']) + self.state_manager.set("radio_tuner", parameters['tuner']) if self.state_manager.isTransmitting(): self.radio_alc = parameters['alc'] + self.state_manager.set("radio_swr", parameters['swr']) + self.state_manager.set("s_meter_strength", parameters['strength']) time.sleep(self.refresh_rate) def stop(self): diff --git a/freedata_server/rigctld.py b/freedata_server/rigctld.py index bfd895c9..796cfb1d 100644 --- a/freedata_server/rigctld.py +++ b/freedata_server/rigctld.py @@ -27,7 +27,9 @@ class radio: 'strength': '---', 'bandwidth': '---', 'rf': '---', - 'ptt': False # Initial PTT state is set to False + 'ptt': False, # Initial PTT state is set to False, + 'tuner': False, + 'swr': '---' } # start rigctld... @@ -62,7 +64,9 @@ class radio: 'strength': '---', 'bandwidth': '---', 'rf': '---', - 'ptt': False # Initial PTT state is set to False + 'ptt': False, # Initial PTT state is set to False, + 'tuner': False, + 'swr': '---' } def send_command(self, command) -> str: @@ -167,6 +171,8 @@ class radio: self.log.warning(f"[RIGCTLD] Error setting bandwidth: {err}") self.connected = False return False + + def set_rf_level(self, rf): """Set the RF. @@ -188,6 +194,49 @@ class radio: self.connected = False return False + def set_tuner(self, state): + """Set the TUNER state. + + Args: + state (bool): True to enable PTT, False to disable. + + Returns: + bool: True if the PTT state was set successfully, False otherwise. + """ + if self.connected: + try: + if state: + self.send_command('U TUNER 1') # Enable PTT + else: + self.send_command('U TUNER 0') # Disable PTT + self.parameters['tuner'] = state # Update PTT state in parameters + return True + except Exception as err: + self.log.warning(f"[RIGCTLD] Error setting TUNER state: {err}") + self.connected = False + return False + + def get_tuner(self): + """Set the TUNER state. + + Args: + state (bool): True to enable PTT, False to disable. + + Returns: + bool: True if the PTT state was set successfully, False otherwise. + """ + if self.connected: + try: + result = self.send_command('u TUNER') + state = result == 1 + self.parameters['tuner'] = state # Update TUNER state in parameters + return True + except Exception as err: + self.log.warning(f"[RIGCTLD] Error setting TUNER state: {err}") + self.connected = False + return False + + def get_parameters(self): if not self.connected: self.connect() @@ -198,6 +247,8 @@ class radio: self.get_alc() self.get_strength() self.get_rf() + self.get_tuner() + self.get_swr() return self.parameters @@ -258,6 +309,19 @@ class radio: self.log.warning(f"Error getting RF power: {e}") self.parameters['rf'] = 'err' + def get_swr(self): + try: + rf_response = self.send_command('l SWR') + if rf_response is not None: + self.parameters['swr'] = rf_response + else: + self.parameters['swr'] = 'err' + except ValueError: + self.parameters['swr'] = 'err' + except Exception as e: + self.log.warning(f"Error getting SWR: {e}") + self.parameters['swr'] = 'err' + def start_service(self): binary_name = "rigctld" binary_paths = helpers.find_binary_paths(binary_name, search_system_wide=True) diff --git a/freedata_server/rigdummy.py b/freedata_server/rigdummy.py index dacdbde6..d1abbfd0 100644 --- a/freedata_server/rigdummy.py +++ b/freedata_server/rigdummy.py @@ -63,6 +63,14 @@ class radio: """ """ return None + def get_tuner(self): + """ """ + return None + + def get_swr(self): + """ """ + return None + def set_bandwidth(self): """ """ return None @@ -77,6 +85,17 @@ class radio: """ return None + def set_tuner(self, state): + """ + + Args: + mode: + + Returns: + + """ + return None + def set_frequency(self, frequency): """ diff --git a/freedata_server/server.py b/freedata_server/server.py index 78a6f53a..15d125c9 100644 --- a/freedata_server/server.py +++ b/freedata_server/server.py @@ -260,6 +260,8 @@ def get_post_radio(): app.radio_manager.set_mode(request.json['radio_mode']) if "radio_rf_level" in request.json: app.radio_manager.set_rf_level(int(request.json['radio_rf_level'])) + if "radio_tuner" in request.json: + app.radio_manager.set_tuner(int(request.json['radio_tuner'])) return api_response(request.json) elif request.method == 'GET': diff --git a/freedata_server/state_manager.py b/freedata_server/state_manager.py index e76f3a18..9b6f6f2b 100644 --- a/freedata_server/state_manager.py +++ b/freedata_server/state_manager.py @@ -48,6 +48,8 @@ class StateManager: self.radio_bandwidth = 0 self.radio_rf_level = 0 self.s_meter_strength = 0 + self.radio_tuner = False + self.radio_swr = 0 # Set rig control status regardless or rig control method self.radio_status = False @@ -216,6 +218,8 @@ class StateManager: "radio_mode": self.radio_mode, "radio_rf_level": self.radio_rf_level, "s_meter_strength": self.s_meter_strength, + "radio_swr": self.radio_swr, + "radio_tuner": self.radio_tuner } def register_p2p_connection_session(self, session):