From 16786d4a7e236961c092a2515d369d64108d5027 Mon Sep 17 00:00:00 2001 From: Pedro Date: Thu, 30 Nov 2023 09:24:36 +0100 Subject: [PATCH] Switch to new frame dispatcher process data with new class based frame handlers. --- modem/frame_dispatcher.py | 6 ++---- modem/frame_handler.py | 4 ++++ modem/frame_handler_cq.py | 16 ++++++++++++++++ modem/frame_handler_ping.py | 26 +++++++++++++++----------- 4 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 modem/frame_handler_cq.py diff --git a/modem/frame_dispatcher.py b/modem/frame_dispatcher.py index 0e8ad8f0..f491e30e 100644 --- a/modem/frame_dispatcher.py +++ b/modem/frame_dispatcher.py @@ -22,6 +22,7 @@ from protocol_arq_session import SESSION from frame_handler import FrameHandler from frame_handler_ping import PingFrameHandler +from frame_handler_cq import CQFrameHandler class DISPATCHER(): @@ -37,7 +38,7 @@ class DISPATCHER(): FR_TYPE.BEACON.value: {"class": FrameHandler, "name": "BEACON"}, FR_TYPE.BURST_ACK.value: {"class": FrameHandler, "name": "BURST ACK"}, FR_TYPE.BURST_NACK.value: {"class": FrameHandler, "name": "BURST NACK"}, - FR_TYPE.CQ.value: {"class": FrameHandler, "name": "CQ"}, + FR_TYPE.CQ.value: {"class": CQFrameHandler, "name": "CQ"}, FR_TYPE.FR_ACK.value: {"class": FrameHandler, "name": "FRAME ACK"}, FR_TYPE.FR_NACK.value: {"class": FrameHandler, "name": "FRAME NACK"}, FR_TYPE.FR_REPEAT.value: {"class": FrameHandler, "name": "REPEAT REQUEST"}, @@ -150,9 +151,6 @@ class DISPATCHER(): # [1] freedv instance # [2] bytes_per_frame # [3] snr - self.old_process_data( - bytes_out=data[0], freedv=data[1], bytes_per_frame=data[2], snr=data[3] - ) self.new_process_data( bytes_out=data[0], freedv=data[1], bytes_per_frame=data[2], snr=data[3] ) diff --git a/modem/frame_handler.py b/modem/frame_handler.py index 6198d7e1..6fc7e7a8 100644 --- a/modem/frame_handler.py +++ b/modem/frame_handler.py @@ -30,6 +30,10 @@ class FrameHandler(): def add_to_heard_stations(self): frame = self.details['frame'] + + if 'origin' not in frame: + return + dxgrid = frame['gridsquare'] if 'gridsquare' in frame else "------" helpers.add_to_heard_stations( frame['origin'], diff --git a/modem/frame_handler_cq.py b/modem/frame_handler_cq.py new file mode 100644 index 00000000..107a4ebe --- /dev/null +++ b/modem/frame_handler_cq.py @@ -0,0 +1,16 @@ +import frame_handler_ping +import helpers +import data_frame_factory + +class CQFrameHandler(frame_handler_ping.PingFrameHandler): + + def should_respond(self): + self.logger.debug(f"Respond to CQ: {self.config['MODEM']['respond_to_cq']}") + return self.config['MODEM']['respond_to_cq'] + + def send_ack(self): + factory = data_frame_factory.DataFrameFactory(self.config) + qrv_frame = factory.build_qrv( + self.details['snr'] + ) + self.transmit(qrv_frame) diff --git a/modem/frame_handler_ping.py b/modem/frame_handler_ping.py index 16a555c3..ee74928e 100644 --- a/modem/frame_handler_ping.py +++ b/modem/frame_handler_ping.py @@ -4,25 +4,29 @@ import data_frame_factory class PingFrameHandler(frame_handler.FrameHandler): - def follow_protocol(self): - deconstructed_frame = self.details['frame'] - origin = deconstructed_frame["origin"] - + def is_frame_for_me(self): # check if callsign ssid override valid, mycallsign = helpers.check_callsign( self.config['STATION']['mycall'], - deconstructed_frame["destination_crc"], + self.details["frame"]["destination_crc"], self.config['STATION']['ssid_list']) if not valid: - # PING packet not for me. - self.logger.debug("[Modem] received_ping: ping not for this station.") + ft = self.details['frame']['frame_type'] + self.logger.info(f"[Modem] {ft} received but not for us.") + + return valid + + def should_respond(self): + return self.is_frame_for_me() + + def follow_protocol(self): + + if not self.should_respond(): return - self.dxcallsign_crc = deconstructed_frame["origin_crc"] - self.dxcallsign = origin - self.logger.info( - f"[Modem] PING REQ from [{origin}] to [{mycallsign}]", + self.logger.debug( + f"[Modem] Responding to request from [{self.details['frame']['origin']}]", snr=self.details['snr'], )