diff --git a/modem/data_frame_factory.py b/modem/data_frame_factory.py index 2241594e..99f056fb 100644 --- a/modem/data_frame_factory.py +++ b/modem/data_frame_factory.py @@ -133,11 +133,11 @@ class DataFrameFactory: "frames_per_burst": 1, } - # arq data burst frame + # arq burst frame self.template_list[FR_TYPE.BURST_FRAME.value] = { "frame_length": "dynamic", - "n_frames_per_burst": 1, "session_id": 1, + "offset": 4, "data": "dynamic", } @@ -145,19 +145,20 @@ class DataFrameFactory: self.template_list[FR_TYPE.BURST_ACK.value] = { "frame_length": self.LENGTH_SIG1_FRAME, "session_id": 1, - "snr":1, + "offset":4, "speed_level": 1, - "len_arq_rx_frame_buffer": 4 + "frames_per_burst": 1, + "snr": 1, } # arq burst nack self.template_list[FR_TYPE.BURST_NACK.value] = { "frame_length": self.LENGTH_SIG1_FRAME, "session_id": 1, - "snr": 1, + "offset":4, "speed_level": 1, - "len_arq_rx_frame_buffer": 4, - "n_frames_per_burst": 1 + "frames_per_burst": 1, + "snr": 1, } def construct(self, frametype, content, frame_length=LENGTH_SIG1_FRAME): @@ -215,7 +216,7 @@ class DataFrameFactory: elif key == "gridsquare": extracted_data[key] = helpers.decode_grid(data) - elif key in ["session_id", "speed_level", "n_frames_per_burst", "version"]: + elif key in ["session_id", "speed_level", "frames_per_burst", "version"]: extracted_data[key] = int.from_bytes(data, 'big') else: @@ -350,69 +351,34 @@ class DataFrameFactory: } return self.construct(FR_TYPE.ARQ_SESSION_INFO_ACK, payload) - def build_arq_burst_frame(self, session_id: int, max_size: int, n_frame: int, - frame_payload: bytes): + def build_arq_burst_frame(self, session_id: int, offset: int, data: bytes): payload = { - "n_frames_per_burst": bytes([n_frames_per_burst]), "session_id": session_id.to_bytes(1, 'big'), - "data": frame_payload + "offset": offset.to_bytes(4, 'big'), + "data": data, } + return self.construct(FR_TYPE.BURST_FRAME, payload) - return self.construct(FR_TYPE.BURST_FRAME.value, payload, frame_length=max_size) - - - def build_arq_burst_ack(self, session_id: bytes, snr: int, speed_level: int, len_arq_rx_frame_buffer: int): + def build_arq_burst_ack(self, session_id: bytes, offset, speed_level: int, + frames_per_burst: int, snr: int): payload = { "session_id": session_id, + "offset": offset.to_bytes(4, 'big'), + "speed_level": speed_level.to_bytes(1, 'big'), + "frames_per_burst": frames_per_burst.to_bytes(1, 'big'), "snr": helpers.snr_to_bytes(snr), - "speed_level": bytes([speed_level]), - "len_arq_rx_frame_buffer": bytes([len_arq_rx_frame_buffer]) } return self.construct(FR_TYPE.BURST_ACK, payload) - def build_arq_frame_ack(self, session_id: bytes, snr: int): - # ack_frame = bytearray(self.length_sig1_frame) - # ack_frame[:1] = bytes([FR_TYPE.FR_ACK.value]) - # ack_frame[1:2] = self.session_id - # ack_frame[2:3] = helpers.snr_to_bytes(snr) - payload = { - "session_id": session_id, - "snr": helpers.snr_to_bytes(snr) - } - return self.construct(FR_TYPE.FR_ACK, payload) - - - def build_arq_burst_nack(self, session_id: bytes, snr: int, speed_level: int, len_arq_rx_frame_buffer: int, n_frames_per_burst: int): - # nack_frame = bytearray(self.length_sig1_frame) - # nack_frame[:1] = bytes([FR_TYPE.BURST_NACK.value]) - # nack_frame[1:2] = self.session_id - # nack_frame[2:3] = helpers.snr_to_bytes(0) - # nack_frame[3:4] = bytes([int(self.speed_level)]) - # nack_frame[4:5] = bytes([int(tx_n_frames_per_burst)]) - # nack_frame[5:9] = len(self.arq_rx_frame_buffer).to_bytes(4, byteorder="big") + def build_arq_burst_nack(self, session_id: bytes, offset, speed_level: int, + frames_per_burst: int, snr: int): payload = { "session_id": session_id, + "offset": offset.to_bytes(4, 'big'), + "speed_level": speed_level.to_bytes(1, 'big'), + "frames_per_burst": frames_per_burst.to_bytes(1, 'big'), "snr": helpers.snr_to_bytes(snr), - "speed_level": bytes([speed_level]), - "len_arq_rx_frame_buffer": bytes([len_arq_rx_frame_buffer]), - "n_frames_per_burst": bytes([n_frames_per_burst]) } return self.construct(FR_TYPE.BURST_NACK, payload) - - def build_arq_frame_nack(self, session_id: bytes, snr: int, speed_level: int, len_arq_rx_frame_buffer: int, n_frames_per_burst: int): - # nack_frame = bytearray(self.length_sig1_frame) - # nack_frame[:1] = bytes([FR_TYPE.FR_NACK.value]) - # nack_frame[1:2] = self.session_id - # nack_frame[2:3] = helpers.snr_to_bytes(snr) - # nack_frame[3:4] = bytes([int(self.speed_level)]) - # nack_frame[4:8] = len(self.arq_rx_frame_buffer).to_bytes(4, byteorder="big") - payload = { - "session_id": session_id, - "snr": helpers.snr_to_bytes(snr), - "speed_level": bytes([speed_level]), - "len_arq_rx_frame_buffer": bytes([len_arq_rx_frame_buffer]), - "n_frames_per_burst": bytes([n_frames_per_burst]) - } - return self.construct(FR_TYPE.FR_NACK, payload)