mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
first attempt using frame deconstructor
This commit is contained in:
parent
8883616e67
commit
9872b52741
|
@ -121,6 +121,11 @@ class DataFrameFactory:
|
|||
# we are overriding the tempaltes mycallsign, because it will become
|
||||
# the dxcallsign when receiving
|
||||
extracted_data["dxcallsign"] = helpers.bytes_to_callsign(data)
|
||||
elif key == "dxcallsign":
|
||||
# we are overriding the tempaltes dxcallsign, because it will become
|
||||
# the mycallsign when receiving
|
||||
extracted_data["mycallsign"] = helpers.bytes_to_callsign(data)
|
||||
|
||||
elif key == "gridsquare":
|
||||
extracted_data[key] = helpers.decode_grid(data)
|
||||
else:
|
||||
|
|
|
@ -68,7 +68,7 @@ class PING(DATA):
|
|||
else:
|
||||
self.enqueue_frame_for_tx([ping_frame], c2_mode=FREEDV_MODE.sig0.value)
|
||||
|
||||
def received_ping(self, data_in: bytes, snr) -> None:
|
||||
def received_ping(self, deconstructed_frame: list, snr) -> None:
|
||||
"""
|
||||
Called if we received a ping
|
||||
|
||||
|
@ -76,11 +76,19 @@ class PING(DATA):
|
|||
data_in:bytes:
|
||||
|
||||
"""
|
||||
dxcallsign_crc = bytes(data_in[4:7])
|
||||
dxcallsign = helpers.bytes_to_callsign(bytes(data_in[7:13]))
|
||||
# use --> deconstructed_frame
|
||||
|
||||
|
||||
|
||||
|
||||
#dxcallsign_crc = bytes(data_in[4:7])
|
||||
mycallsign_crc = deconstructed_frame["mycallsign_crc"]
|
||||
dxcallsign_crc = deconstructed_frame["dxcallsign_crc"]
|
||||
dxcallsign = deconstructed_frame["dxcallsign"]
|
||||
#dxcallsign = helpers.bytes_to_callsign(bytes(data_in[7:13]))
|
||||
|
||||
# check if callsign ssid override
|
||||
valid, mycallsign = helpers.check_callsign(self.mycallsign, data_in[1:4], self.ssid_list)
|
||||
valid, mycallsign = helpers.check_callsign(self.mycallsign, mycallsign_crc, self.ssid_list)
|
||||
if not valid:
|
||||
# PING packet not for me.
|
||||
self.log.debug("[Modem] received_ping: ping not for this station.")
|
||||
|
|
|
@ -9,6 +9,8 @@ import structlog
|
|||
from modem_frametypes import FRAME_TYPE as FR_TYPE
|
||||
import event_manager
|
||||
from queues import DATA_QUEUE_RECEIVED, DATA_QUEUE_TRANSMIT, MODEM_TRANSMIT_QUEUE
|
||||
from data_frame_factory import DataFrameFactory
|
||||
|
||||
|
||||
from data_handler_broadcasts import BROADCAST
|
||||
from data_handler_data_broadcasts import DATABROADCAST
|
||||
|
@ -34,6 +36,10 @@ class DISPATCHER():
|
|||
|
||||
def _initialize_handlers(self, config, event_queue, states):
|
||||
"""Initializes various data handlers."""
|
||||
|
||||
self.frame_factory = DataFrameFactory()
|
||||
|
||||
|
||||
self.broadcasts = BROADCAST(config, event_queue, states)
|
||||
self.data_broadcasts = DATABROADCAST(config, event_queue, states)
|
||||
self.ping = PING(config, event_queue, states)
|
||||
|
@ -142,22 +148,20 @@ class DISPATCHER():
|
|||
"""
|
||||
|
||||
if self.check_if_valid_frame(bytes_out):
|
||||
frametype = int.from_bytes(bytes(bytes_out[:1]), "big")
|
||||
# get frame as dictionary
|
||||
deconstructed_frame = self.frame_factory.deconstruct(bytes_out)
|
||||
frametype = deconstructed_frame["frame_type"]
|
||||
|
||||
# Dispatch activity based on received frametype
|
||||
if frametype in self.rx_dispatcher:
|
||||
# Process frames "known" by rx_dispatcher
|
||||
# self.log.debug(f"[Modem] {self.rx_dispatcher[frametype][1]} RECEIVED....")
|
||||
self.rx_dispatcher[frametype][0](bytes_out[:-2], snr)
|
||||
self.rx_dispatcher[frametype][0](deconstructed_frame, snr)
|
||||
|
||||
# Process frametypes requiring a different set of arguments.
|
||||
elif FR_TYPE.BURST_51.value >= frametype >= FR_TYPE.BURST_01.value:
|
||||
# get snr of received data
|
||||
# FIXME find a fix for this - after moving to classes, this no longer works
|
||||
# snr = self.calculate_snr(freedv)
|
||||
self.log.debug("[Modem] RX SNR", snr=snr)
|
||||
# send payload data to arq checker without CRC16
|
||||
self.arq_irs.arq_data_received(
|
||||
bytes(bytes_out[:-2]), bytes_per_frame, snr, freedv
|
||||
deconstructed_frame, bytes_per_frame, snr, freedv
|
||||
)
|
||||
|
||||
# if we received the last frame of a burst or the last remaining rpt frame, do a modem unsync
|
||||
|
@ -167,7 +171,7 @@ class DISPATCHER():
|
|||
|
||||
# TESTFRAMES
|
||||
elif frametype == FR_TYPE.TEST_FRAME.value:
|
||||
self.log.debug("[Modem] TESTFRAME RECEIVED", frame=bytes_out[:])
|
||||
self.log.debug("[Modem] TESTFRAME RECEIVED", frame=deconstructed_frame)
|
||||
|
||||
# Unknown frame type
|
||||
else:
|
||||
|
|
|
@ -324,7 +324,7 @@ class ARQ:
|
|||
self.arq_cleanup()
|
||||
|
||||
def received_stop_transmission(
|
||||
self, data_in: bytes
|
||||
self, deconstructed_frame: list
|
||||
) -> None: # pylint: disable=unused-argument
|
||||
"""
|
||||
Received a transmission stop
|
||||
|
|
|
@ -482,7 +482,7 @@ class IRS(ARQ):
|
|||
self.frame_received_counter = 0
|
||||
|
||||
def arq_data_received(
|
||||
self, data_in: bytes, bytes_per_frame: int, snr: float, freedv
|
||||
self, deconstructed_frame: list, bytes_per_frame: int, snr: float, freedv
|
||||
) -> None:
|
||||
"""
|
||||
Args:
|
||||
|
@ -495,7 +495,7 @@ class IRS(ARQ):
|
|||
"""
|
||||
# We've arrived here from process_data which already checked that the frame
|
||||
# is intended for this station.
|
||||
data_in = bytes(data_in)
|
||||
data_in = deconstructed_frame["data"]
|
||||
|
||||
# only process data if we are in ARQ and BUSY state else return to quit
|
||||
if not self.states.is_arq_state and not self.states.is_modem_busy:
|
||||
|
|
Loading…
Reference in a new issue