diff --git a/.github/workflows/prettier.yaml b/.github/workflows/prettier.yaml index 129c529b..938995da 100644 --- a/.github/workflows/prettier.yaml +++ b/.github/workflows/prettier.yaml @@ -18,7 +18,7 @@ jobs: ref: ${{ github.head_ref }} - name: Prettify code - uses: creyD/prettier_action@v4.3 + uses: creyD/prettier_action@v4.5 with: # This part is also where you can pass other options, for example: prettier_options: --write **/*.{js,md,css,html} diff --git a/freedata_gui/package.json b/freedata_gui/package.json index 58bcb3bf..8f982858 100644 --- a/freedata_gui/package.json +++ b/freedata_gui/package.json @@ -1,6 +1,6 @@ { "name": "FreeDATA", - "version": "0.17.3-beta", + "version": "0.17.4-beta", "description": "FreeDATA Client application for connecting to FreeDATA server", "private": true, "scripts": { @@ -28,7 +28,7 @@ "@popperjs/core": "^2.11.8", "bootstrap": "^5.3.5", "bootstrap-icons": "^1.11.3", - "bootstrap-vue-next": "^0.29.0", + "bootstrap-vue-next": "^0.30.0", "chart.js": "^4.4.3", "chartjs-plugin-annotation": "^3.0.1", "core-js": "^3.8.3", @@ -54,7 +54,7 @@ "@eslint/js": "^9.10.0", "@vue/cli-service": "~5.0.8", "eslint": "^9.0.0", - "eslint-plugin-vue": "^9.0.0", + "eslint-plugin-vue": "^10.2.0", "globals": "^16.0.0" }, "browserslist": [ diff --git a/freedata_gui/src/components/grid/grid_active_broadcasts.vue b/freedata_gui/src/components/grid/grid_active_broadcasts.vue index 371a5083..fe7cad8e 100644 --- a/freedata_gui/src/components/grid/grid_active_broadcasts.vue +++ b/freedata_gui/src/components/grid/grid_active_broadcasts.vue @@ -72,7 +72,7 @@ window.addEventListener( class="bi bi-broadcast" style="font-size: 1.2rem" />  - {{ $t('grid.componments.broadcasts') }} + {{ $t('grid.components.broadcasts') }}
diff --git a/freedata_server/arq_session_irs.py b/freedata_server/arq_session_irs.py index 1b7f5d4a..bcc6f072 100644 --- a/freedata_server/arq_session_irs.py +++ b/freedata_server/arq_session_irs.py @@ -286,6 +286,7 @@ class ARQSessionIRS(arq_session.ARQSession): # CASE: ACK is going lost. self.log(f"Discarding data offset: Offset = {frame['offset']} | Already received: {self.received_bytes}", isWarning=True) self.received_bytes = frame['offset'] + #return False @@ -301,12 +302,15 @@ class ARQSessionIRS(arq_session.ARQSession): remaining_data_length = self.total_length - self.received_bytes self.log(f"Remaining data: {remaining_data_length}", isWarning=True) # Is this the last data part? - if remaining_data_length <= len(frame['data']): - # we only want the remaining length, not the entire frame data + if remaining_data_length < len(frame['data']): + # we only want the remaining length, not the entire frame data data_part = frame['data'][:remaining_data_length] else: # we want the entire frame data data_part = frame['data'] + + + self.received_data[frame['offset']:] = data_part #self.received_bytes += len(data_part) @@ -372,6 +376,7 @@ class ARQSessionIRS(arq_session.ARQSession): flag_checksum=False) self.transmit_frame(ack, mode=FREEDV_MODE.signalling_ack) self.log("CRC fail at the end of transmission!", isWarning=True) + self.log(f"Failed Data [Is real:{len(self.received_data)}/Is calculated:{seld.received_bytes}/Should:{self.total_bytes}]:{self.received_data}",isWarning=True) return self.transmission_failed() diff --git a/freedata_server/audio.py b/freedata_server/audio.py index dd0a7ba2..b121f66a 100644 --- a/freedata_server/audio.py +++ b/freedata_server/audio.py @@ -266,7 +266,7 @@ def normalize_audio(datalist: np.ndarray) -> np.ndarray: return datalist # Define the target max value as 95% of the maximum for np.int16 - target_max_value = int(32767 * 0.95) + target_max_value = int(32767 * 0.85) # Compute the normalization factor normalization_factor = target_max_value / max_value diff --git a/freedata_server/config.ini.example b/freedata_server/config.ini.example index 958e3d89..cbb4efab 100644 --- a/freedata_server/config.ini.example +++ b/freedata_server/config.ini.example @@ -59,7 +59,7 @@ cmd_port = 9000 data_port = 9001 [MESSAGES] -enable_auto_repeat = False +enable_auto_repeat = True [QSO_LOGGING] enable_adif_udp = False diff --git a/freedata_server/constants.py b/freedata_server/constants.py index 4f616426..b40a436c 100644 --- a/freedata_server/constants.py +++ b/freedata_server/constants.py @@ -1,7 +1,7 @@ # Module for saving some constants CONFIG_ENV_VAR = 'FREEDATA_CONFIG' DEFAULT_CONFIG_FILE = 'config.ini' -MODEM_VERSION = "0.17.3-beta" +MODEM_VERSION = "0.17.4-beta" API_VERSION = 3 ARQ_PROTOCOL_VERSION = 1 LICENSE = 'GPL3.0' diff --git a/freedata_server/context.py b/freedata_server/context.py index 94a828e1..d0ccf6b2 100644 --- a/freedata_server/context.py +++ b/freedata_server/context.py @@ -2,12 +2,12 @@ from queue import Queue from event_manager import EventManager from state_manager import StateManager from schedule_manager import ScheduleManager +from radio_manager import RadioManager from config import CONFIG from service_manager import SM as ServiceManager from message_system_db_manager import DatabaseManager from message_system_db_attachments import DatabaseManagerAttachments from websocket_manager import wsm as WebsocketManager -import audio import constants from fastapi import Request, WebSocket class AppContext: @@ -24,7 +24,7 @@ class AppContext: self.schedule_manager = ScheduleManager(self) self.service_manager = ServiceManager(self) self.websocket_manager = WebsocketManager(self) - + self.radio_manager = RadioManager(self) self.socket_interface_manager = None # Socket interface instance, We start it as we need it self.rf_modem = None # Modem instnace, we start it as we need it self.message_system_db_manager = DatabaseManager(self) diff --git a/freedata_server/frame_handler.py b/freedata_server/frame_handler.py index f4727abd..70ff03e8 100644 --- a/freedata_server/frame_handler.py +++ b/freedata_server/frame_handler.py @@ -6,6 +6,7 @@ import time from codec2 import FREEDV_MODE from message_system_db_manager import DatabaseManager from message_system_db_station import DatabaseManagerStations +from message_system_db_messages import DatabaseManagerMessages import maidenhead @@ -389,3 +390,19 @@ class FrameHandler(): self.emit_event() self.follow_protocol() return True + + + def check_for_queued_message(self): + """Checks for queued messages to send. + + This method checks if auto-repeat is enabled in the configuration + and if the received signal strength is above a certain threshold. + If both conditions are met, it sets any messages addressed to the + originating station to 'queued' status in the message database. + """ + + # only check for queued messages, if we have enabled this and if we have a minimum snr received + if self.ctx.config_manager.config["MESSAGES"]["enable_auto_repeat"] and self.details["snr"] >= -2: + # set message to queued if beacon received + DatabaseManagerMessages(self.ctx).set_message_to_queued_for_callsign( + self.details['frame']["origin"]) \ No newline at end of file diff --git a/freedata_server/frame_handler_beacon.py b/freedata_server/frame_handler_beacon.py index 8e9e20be..4f377044 100644 --- a/freedata_server/frame_handler_beacon.py +++ b/freedata_server/frame_handler_beacon.py @@ -26,7 +26,4 @@ class BeaconFrameHandler(frame_handler.FrameHandler): self.details['frame']["gridsquare"] ) - # only check for queued messages, if we have enabled this and if we have a minimum snr received - if self.config["MESSAGES"]["enable_auto_repeat"] and self.details["snr"] >= -2: - # set message to queued if beacon received - DatabaseManagerMessages(self.ctx).set_message_to_queued_for_callsign(self.details['frame']["origin"]) + self.check_for_queued_message() diff --git a/freedata_server/frame_handler_cq.py b/freedata_server/frame_handler_cq.py index 9584632d..297090da 100644 --- a/freedata_server/frame_handler_cq.py +++ b/freedata_server/frame_handler_cq.py @@ -37,6 +37,7 @@ class CQFrameHandler(frame_handler.FrameHandler): ) self.send_ack() + self.check_for_queued_message() def send_ack(self): factory = data_frame_factory.DataFrameFactory(self.ctx) @@ -50,6 +51,3 @@ class CQFrameHandler(frame_handler.FrameHandler): self.transmit(qrv_frame) - if self.ctx.config_manager.config["MESSAGES"]["enable_auto_repeat"]: - # set message to queued if CQ received - DatabaseManagerMessages(self.ctx).set_message_to_queued_for_callsign(self.details['frame']["origin"]) diff --git a/freedata_server/frame_handler_ping.py b/freedata_server/frame_handler_ping.py index 2bc8bef4..d71fcd8e 100644 --- a/freedata_server/frame_handler_ping.py +++ b/freedata_server/frame_handler_ping.py @@ -37,9 +37,7 @@ class PingFrameHandler(frame_handler.FrameHandler): snr=self.details['snr'], ) self.send_ack() - self.check_for_queued_message() - def send_ack(self): """Sends a PING acknowledgement frame. @@ -52,18 +50,3 @@ class PingFrameHandler(frame_handler.FrameHandler): self.details['snr'] ) self.transmit(ping_ack_frame) - - def check_for_queued_message(self): - """Checks for queued messages to send. - - This method checks if auto-repeat is enabled in the configuration - and if the received signal strength is above a certain threshold. - If both conditions are met, it sets any messages addressed to the - originating station to 'queued' status in the message database. - """ - - # only check for queued messages, if we have enabled this and if we have a minimum snr received - if self.config["MESSAGES"]["enable_auto_repeat"] and self.details["snr"] >= -2: - # set message to queued if beacon received - DatabaseManagerMessages(self.ctx).set_message_to_queued_for_callsign( - self.details['frame']["origin"]) \ No newline at end of file diff --git a/freedata_server/service_manager.py b/freedata_server/service_manager.py index 08e9cb89..b62f760f 100644 --- a/freedata_server/service_manager.py +++ b/freedata_server/service_manager.py @@ -56,7 +56,7 @@ class SM: if self.shutdown_flag.is_set(): return - if cmd in ['start'] and not self.ctx.rf_modem: + if cmd in ['start']: self.ctx.config_manager.read() self.start_radio_manager() diff --git a/requirements.txt b/requirements.txt index 7288053e..10a20485 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ asyncio chardet colorama ordered-set -nuitka<=2.7 +nuitka<=2.7.5 pyinstaller websocket-client fastapi[standard]