mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
Switch to new frame dispatcher process data with new class based frame handlers.
This commit is contained in:
parent
32e1aa7edb
commit
16786d4a7e
|
@ -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]
|
||||
)
|
||||
|
|
|
@ -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'],
|
||||
|
|
16
modem/frame_handler_cq.py
Normal file
16
modem/frame_handler_cq.py
Normal file
|
@ -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)
|
|
@ -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'],
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue