some code adjustments

This commit is contained in:
DJ2LS 2023-11-28 20:00:39 +01:00
parent 3e3d96a4bb
commit 618bf3ae4b
3 changed files with 32 additions and 30 deletions

View file

@ -118,7 +118,6 @@ class DataFrameFactory:
return frame return frame
def deconstruct(self, frame): def deconstruct(self, frame):
extracted_data = {}
buffer_position = 1 buffer_position = 1
# Extract frametype and get the corresponding template # Extract frametype and get the corresponding template
@ -129,8 +128,7 @@ class DataFrameFactory:
# Handle the case where the frame type is not recognized # Handle the case where the frame type is not recognized
raise ValueError(f"Unknown frame type: {frametype}") raise ValueError(f"Unknown frame type: {frametype}")
extracted_data["frame_type"] = FR_TYPE(frametype).name extracted_data = {"frame_type": FR_TYPE(frametype).name, "frame_type_int": frametype}
extracted_data["frame_type_int"] = frametype
for key, item_length in frame_template.items(): for key, item_length in frame_template.items():
if key != "frame_length": if key != "frame_length":
@ -204,7 +202,7 @@ class DataFrameFactory:
mode_int = codec2.freedv_get_mode_value_by_name(mode) mode_int = codec2.freedv_get_mode_value_by_name(mode)
payload = { payload = {
"mycallsign": helpers.FEC_WAKEUP(self.myfullcall), "mycallsign": helpers.callsign_to_bytes(self.myfullcall),
"mode": bytes([mode_int]), "mode": bytes([mode_int]),
"n_bursts": bytes([1]) # n payload bursts, "n_bursts": bytes([1]) # n payload bursts,

View file

@ -5,6 +5,7 @@ FRAME DISPATCHER - We are dispatching the received frames to the needed function
""" """
import threading import threading
import helpers import helpers
import structlog
from modem_frametypes import FRAME_TYPE as FR_TYPE from modem_frametypes import FRAME_TYPE as FR_TYPE
import event_manager import event_manager
from queues import DATA_QUEUE_RECEIVED, DATA_QUEUE_TRANSMIT, MODEM_TRANSMIT_QUEUE from queues import DATA_QUEUE_RECEIVED, DATA_QUEUE_TRANSMIT, MODEM_TRANSMIT_QUEUE
@ -23,7 +24,9 @@ from protocol_arq_session import SESSION
class DISPATCHER(): class DISPATCHER():
def __init__(self, config, event_queue, states): def __init__(self, config, event_queue, states):
print("loading frame dispatcher.....\n") self.log = structlog.get_logger("frame_dispatcher")
self.log.info("loading frame dispatcher.....\n")
self.config = config self.config = config
self.event_queue = event_queue self.event_queue = event_queue
self.states = states self.states = states
@ -140,10 +143,10 @@ class DISPATCHER():
Returns: Returns:
""" """
deconstructed_frame = self.frame_factory.deconstruct(bytes_out)
if self.check_if_valid_frame(bytes_out): if self.check_if_valid_frame(deconstructed_frame):
# get frame as dictionary # get frame as dictionary
deconstructed_frame = self.frame_factory.deconstruct(bytes_out)
frametype = deconstructed_frame["frame_type_int"] frametype = deconstructed_frame["frame_type_int"]
print(deconstructed_frame) print(deconstructed_frame)
print(frametype) print(frametype)
@ -184,12 +187,14 @@ class DISPATCHER():
frame_type=FR_TYPE(int.from_bytes(bytes_out[:1], byteorder="big")).name, frame_type=FR_TYPE(int.from_bytes(bytes_out[:1], byteorder="big")).name,
) )
def check_if_valid_frame(self, bytes_out): def check_if_valid_frame(self, deconstructed_frame):
# Process data only if broadcast or we are the receiver # Process data only if broadcast or we are the receiver
# bytes_out[1:4] == callsign check for signalling frames, # bytes_out[1:4] == callsign check for signalling frames,
# bytes_out[2:5] == transmission # bytes_out[2:5] == transmission
# we could also create an own function, which returns True. # we could also create an own function, which returns True.
frametype = int.from_bytes(bytes(bytes_out[:1]), "big")
#deconstructed_frame["mycallsign"]
# check for callsign CRC # check for callsign CRC
_valid1, _ = helpers.check_callsign(self.arq.mycallsign, bytes(bytes_out[1:4]), self.arq.ssid_list) _valid1, _ = helpers.check_callsign(self.arq.mycallsign, bytes(bytes_out[1:4]), self.arq.ssid_list)
@ -197,29 +202,28 @@ class DISPATCHER():
# check for session ID # check for session ID
_valid3 = helpers.check_session_id(self.arq.session_id, bytes(bytes_out[1:2])) # signalling frames _valid3 = helpers.check_session_id(self.arq.session_id, bytes(bytes_out[1:2])) # signalling frames
_valid4 = helpers.check_session_id(self.arq.session_id, bytes(bytes_out[2:3])) # arq data frames _valid4 = helpers.check_session_id(self.arq.session_id, bytes(bytes_out[2:3])) # arq data frames
if ( return bool(
(
_valid1 _valid1
or _valid2 or _valid2
or _valid3 or _valid3
or _valid4 or _valid4
or frametype or deconstructed_frame["frame_type_int"]
in [ in [
FR_TYPE.CQ.value, FR_TYPE.CQ.value,
FR_TYPE.QRV.value, FR_TYPE.QRV.value,
FR_TYPE.PING.value, FR_TYPE.PING.value,
FR_TYPE.BEACON.value, FR_TYPE.BEACON.value,
FR_TYPE.IS_WRITING.value, FR_TYPE.IS_WRITING.value,
FR_TYPE.FEC.value, FR_TYPE.FEC.value,
FR_TYPE.FEC_WAKEUP.value, FR_TYPE.FEC_WAKEUP.value,
] ]
): )
return True )
return False
def get_id_from_frame(self, data): def get_id_from_frame(self, data):
if data[:1] in [FR_TYPE.ARQ_DC_OPEN_N, FR_TYPE.ARQ_DC_OPEN_W]: if data[:1] in [FR_TYPE.ARQ_DC_OPEN_N, FR_TYPE.ARQ_DC_OPEN_W]:
session_id = data[13:14] return data[13:14]
return session_id
return None return None
def initialize_arq_instance(self): def initialize_arq_instance(self):
@ -239,4 +243,4 @@ class DISPATCHER():
if id := self.get_id_from_frame(data): if id := self.get_id_from_frame(data):
instance = self.initialize_arq_instance() instance = self.initialize_arq_instance()
self.states.register_arq_instance_by_id(id, instance) self.states.register_arq_instance_by_id(id, instance)
instance['arq_irs'].arq_received_data_channel_opener instance['arq_irs'].arq_received_data_channel_opener()

View file

@ -36,7 +36,7 @@ def wait(seconds: float) -> bool:
return True return True
def get_crc_8(data) -> bytes: def get_crc_8(data: str) -> bytes:
"""Author: DJ2LS """Author: DJ2LS
Get the CRC8 of a byte string Get the CRC8 of a byte string
@ -55,7 +55,7 @@ def get_crc_8(data) -> bytes:
return crc_data return crc_data
def get_crc_16(data) -> bytes: def get_crc_16(data: str) -> bytes:
"""Author: DJ2LS """Author: DJ2LS
Get the CRC16 of a byte string Get the CRC16 of a byte string
@ -74,7 +74,7 @@ def get_crc_16(data) -> bytes:
crc_algorithm = crcengine.new("crc16-ccitt-false") # load crc16 library crc_algorithm = crcengine.new("crc16-ccitt-false") # load crc16 library
return crc_algorithm(data).to_bytes(2, byteorder="big") return crc_algorithm(data).to_bytes(2, byteorder="big")
def get_crc_24(data: bytes) -> bytes: def get_crc_24(data: str) -> bytes:
"""Author: DJ2LS """Author: DJ2LS
Get the CRC24-OPENPGP of a byte string Get the CRC24-OPENPGP of a byte string
@ -102,7 +102,7 @@ def get_crc_24(data: bytes) -> bytes:
return crc_algorithm(data).to_bytes(3,byteorder="big") return crc_algorithm(data).to_bytes(3,byteorder="big")
def get_crc_32(data: bytes) -> bytes: def get_crc_32(data: str) -> bytes:
"""Author: DJ2LS """Author: DJ2LS
Get the CRC32 of a byte string Get the CRC32 of a byte string