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 import FrameHandler
|
||||||
from frame_handler_ping import PingFrameHandler
|
from frame_handler_ping import PingFrameHandler
|
||||||
|
from frame_handler_cq import CQFrameHandler
|
||||||
|
|
||||||
class DISPATCHER():
|
class DISPATCHER():
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ class DISPATCHER():
|
||||||
FR_TYPE.BEACON.value: {"class": FrameHandler, "name": "BEACON"},
|
FR_TYPE.BEACON.value: {"class": FrameHandler, "name": "BEACON"},
|
||||||
FR_TYPE.BURST_ACK.value: {"class": FrameHandler, "name": "BURST ACK"},
|
FR_TYPE.BURST_ACK.value: {"class": FrameHandler, "name": "BURST ACK"},
|
||||||
FR_TYPE.BURST_NACK.value: {"class": FrameHandler, "name": "BURST NACK"},
|
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_ACK.value: {"class": FrameHandler, "name": "FRAME ACK"},
|
||||||
FR_TYPE.FR_NACK.value: {"class": FrameHandler, "name": "FRAME NACK"},
|
FR_TYPE.FR_NACK.value: {"class": FrameHandler, "name": "FRAME NACK"},
|
||||||
FR_TYPE.FR_REPEAT.value: {"class": FrameHandler, "name": "REPEAT REQUEST"},
|
FR_TYPE.FR_REPEAT.value: {"class": FrameHandler, "name": "REPEAT REQUEST"},
|
||||||
|
@ -150,9 +151,6 @@ class DISPATCHER():
|
||||||
# [1] freedv instance
|
# [1] freedv instance
|
||||||
# [2] bytes_per_frame
|
# [2] bytes_per_frame
|
||||||
# [3] snr
|
# [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(
|
self.new_process_data(
|
||||||
bytes_out=data[0], freedv=data[1], bytes_per_frame=data[2], snr=data[3]
|
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):
|
def add_to_heard_stations(self):
|
||||||
frame = self.details['frame']
|
frame = self.details['frame']
|
||||||
|
|
||||||
|
if 'origin' not in frame:
|
||||||
|
return
|
||||||
|
|
||||||
dxgrid = frame['gridsquare'] if 'gridsquare' in frame else "------"
|
dxgrid = frame['gridsquare'] if 'gridsquare' in frame else "------"
|
||||||
helpers.add_to_heard_stations(
|
helpers.add_to_heard_stations(
|
||||||
frame['origin'],
|
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):
|
class PingFrameHandler(frame_handler.FrameHandler):
|
||||||
|
|
||||||
def follow_protocol(self):
|
def is_frame_for_me(self):
|
||||||
deconstructed_frame = self.details['frame']
|
|
||||||
origin = deconstructed_frame["origin"]
|
|
||||||
|
|
||||||
# check if callsign ssid override
|
# check if callsign ssid override
|
||||||
valid, mycallsign = helpers.check_callsign(
|
valid, mycallsign = helpers.check_callsign(
|
||||||
self.config['STATION']['mycall'],
|
self.config['STATION']['mycall'],
|
||||||
deconstructed_frame["destination_crc"],
|
self.details["frame"]["destination_crc"],
|
||||||
self.config['STATION']['ssid_list'])
|
self.config['STATION']['ssid_list'])
|
||||||
|
|
||||||
if not valid:
|
if not valid:
|
||||||
# PING packet not for me.
|
ft = self.details['frame']['frame_type']
|
||||||
self.logger.debug("[Modem] received_ping: ping not for this station.")
|
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
|
return
|
||||||
|
|
||||||
self.dxcallsign_crc = deconstructed_frame["origin_crc"]
|
self.logger.debug(
|
||||||
self.dxcallsign = origin
|
f"[Modem] Responding to request from [{self.details['frame']['origin']}]",
|
||||||
self.logger.info(
|
|
||||||
f"[Modem] PING REQ from [{origin}] to [{mycallsign}]",
|
|
||||||
snr=self.details['snr'],
|
snr=self.details['snr'],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue