mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
WIP ARQ - fixed wrong payload
This commit is contained in:
parent
32317b373f
commit
e26d512951
|
@ -60,6 +60,9 @@ class ARQSessionIRS(arq_session.ARQSession):
|
|||
return self.received_bytes == len(self.received_data)
|
||||
|
||||
def final_crc_check(self):
|
||||
print(self.received_data)
|
||||
print(self.total_crc)
|
||||
print(helpers.get_crc_32(bytes(self.received_data)).hex())
|
||||
return self.total_crc == helpers.get_crc_32(bytes(self.received_data)).hex()
|
||||
|
||||
def transmit_and_wait(self, frame, timeout, mode):
|
||||
|
|
|
@ -84,6 +84,7 @@ class ARQSessionISS(arq_session.ARQSession):
|
|||
info_frame = self.frame_factory.build_arq_session_info(self.id, len(self.data),
|
||||
helpers.get_crc_32(self.data),
|
||||
self.snr[0])
|
||||
|
||||
self.launch_twr(info_frame, self.TIMEOUT_CONNECT_ACK, self.RETRIES_CONNECT, mode=FREEDV_MODE.signalling)
|
||||
self.set_state(self.STATE_INFO_SENT)
|
||||
|
||||
|
@ -97,8 +98,8 @@ class ARQSessionISS(arq_session.ARQSession):
|
|||
self.set_state(self.STATE_ENDED)
|
||||
self.log("All data transfered!")
|
||||
return
|
||||
print(self.SPEED_LEVEL_DICT[self.speed_level])
|
||||
payload_size = self.get_data_payload_size()
|
||||
print(f"payload size: {payload_size}")
|
||||
burst = []
|
||||
for f in range(0, self.frames_per_burst):
|
||||
offset = self.confirmed_bytes
|
||||
|
@ -107,6 +108,5 @@ class ARQSessionISS(arq_session.ARQSession):
|
|||
self.SPEED_LEVEL_DICT[self.speed_level]["mode"],
|
||||
self.id, self.confirmed_bytes, payload)
|
||||
burst.append(data_frame)
|
||||
|
||||
self.launch_twr(burst, self.TIMEOUT_TRANSFER, self.RETRIES_CONNECT, mode='auto')
|
||||
self.set_state(self.STATE_BURST_SENT)
|
||||
|
|
|
@ -156,10 +156,10 @@ class DataFrameFactory:
|
|||
frame_template = self.template_list[frametype.value]
|
||||
|
||||
if isinstance(frame_template["frame_length"], int):
|
||||
length = frame_template["frame_length"]
|
||||
frame_length = frame_template["frame_length"]
|
||||
else:
|
||||
length = frame_length
|
||||
|
||||
frame_length -= 2
|
||||
print(frame_length)
|
||||
frame = bytearray(frame_length)
|
||||
frame[:1] = bytes([frametype.value])
|
||||
|
||||
|
@ -170,13 +170,11 @@ class DataFrameFactory:
|
|||
|
||||
if not isinstance(item_length, int):
|
||||
item_length = len(content[key])
|
||||
|
||||
if buffer_position + item_length > frame_length:
|
||||
raise OverflowError("Frame data overflow!")
|
||||
|
||||
frame[buffer_position: buffer_position + item_length] = content[key]
|
||||
buffer_position += item_length
|
||||
|
||||
return frame
|
||||
|
||||
def deconstruct(self, frame):
|
||||
|
@ -197,7 +195,7 @@ class DataFrameFactory:
|
|||
|
||||
# data is always on the last payload slots
|
||||
if item_length in ["dynamic"] and key in["data"]:
|
||||
data = frame[buffer_position:]
|
||||
data = frame[buffer_position:-2]
|
||||
item_length = len(data)
|
||||
else:
|
||||
data = frame[buffer_position: buffer_position + item_length]
|
||||
|
@ -232,8 +230,8 @@ class DataFrameFactory:
|
|||
|
||||
def get_available_data_payload_for_mode(self, type: FR_TYPE, mode:codec2.FREEDV_MODE):
|
||||
whole_frame_length = self.get_bytes_per_frame(mode)
|
||||
available = whole_frame_length - 2 # - CRC16
|
||||
available = available - 1 # - FRAME TYPE
|
||||
available = whole_frame_length - 2 # 2Bytes CRC16
|
||||
available -= 1 # Frame Type
|
||||
print(self.template_list[type.value].items())
|
||||
for field, length in self.template_list[type.value].items():
|
||||
if field != 'frame_length' and isinstance(length, int):
|
||||
|
@ -354,7 +352,8 @@ class DataFrameFactory:
|
|||
"offset": offset.to_bytes(4, 'big'),
|
||||
"data": data,
|
||||
}
|
||||
return self.construct(FR_TYPE.ARQ_BURST_FRAME, payload, self.get_bytes_per_frame(freedv_mode))
|
||||
frame = self.construct(FR_TYPE.ARQ_BURST_FRAME, payload, self.get_bytes_per_frame(freedv_mode))
|
||||
return frame
|
||||
|
||||
def build_arq_burst_ack(self, session_id: bytes, offset, speed_level: int,
|
||||
frames_per_burst: int, snr: int):
|
||||
|
|
|
@ -372,6 +372,7 @@ class RF:
|
|||
# Append CRC to data buffer
|
||||
buffer += crc
|
||||
|
||||
assert(bytes_per_frame == len(buffer))
|
||||
data = (ctypes.c_ubyte * bytes_per_frame).from_buffer_copy(buffer)
|
||||
# modulate DATA and save it into mod_out pointer
|
||||
codec2.api.freedv_rawdatatx(freedv, mod_out, data)
|
||||
|
|
Loading…
Reference in a new issue