WIP ARQ - more fixes

This commit is contained in:
DJ2LS 2023-12-15 16:22:38 +01:00
parent b5268ec4f0
commit a970f96165
8 changed files with 23 additions and 14 deletions

View file

@ -91,7 +91,7 @@ export function sendModemPing(dxcall) {
export function sendModemARQRaw(mycall, dxcall, data, uuid) {
return apiPost("/modem/send_arq_raw", {
mycallsign: mycall,
dxcallsign: dxcall,
dxcall: dxcall,
data: data,
uuid: uuid,
});

View file

@ -54,7 +54,7 @@ class ARQSession():
def transmit_frame(self, frame: bytearray, mode='auto'):
self.log("Transmitting frame")
if mode in ['auto']:
self.get_mode_by_speed_level(self.speed_level)
mode = self.get_mode_by_speed_level(self.speed_level)
modem_queue_item = {
'mode': mode,

View file

@ -100,6 +100,7 @@ class ARQSessionIRS(arq_session.ARQSession):
self.dx_snr.append(info_frame['snr'])
self.calibrate_speed_settings()
self.set_modem_listening_modes(self.speed_level)
info_ack = self.frame_factory.build_arq_session_info_ack(
self.id, self.total_crc, self.snr[0],
self.speed_level, self.frames_per_burst)
@ -108,9 +109,17 @@ class ARQSessionIRS(arq_session.ARQSession):
def send_burst_nack(self):
self.calibrate_speed_settings()
self.set_modem_listening_modes(self.speed_level)
nack = self.frame_factory.build_arq_burst_ack(self.id, self.received_bytes, self.speed_level, self.frames_per_burst, self.snr[0])
self.transmit_and_wait(nack)
def set_modem_listening_modes(self, speed_level):
# TODO
# We want to set the modems listening modes somehow...
return
def process_incoming_data(self, frame):
if frame['offset'] != self.received_bytes:
self.logger.info(f"Discarding data frame due to wrong offset", frame=self.frame_received)

View file

@ -17,10 +17,8 @@ class ARQSessionISS(arq_session.ARQSession):
STATE_FAILED = 5
RETRIES_CONNECT = 3
RETRIES_TRANSFER = 3
TIMEOUT_CONNECT_ACK = 5
TIMEOUT_TRANSFER = 2
TIMEOUT_CONNECT_ACK = 7
TIMEOUT_TRANSFER = 3
STATE_TRANSITION = {
STATE_OPEN_SENT: {
@ -81,7 +79,7 @@ class ARQSessionISS(arq_session.ARQSession):
self.frames_per_burst = frame['frames_per_burst']
self.log(f"Frames per burst set to {self.frames_per_burst}")
def send_info(self, open_ack_frame):
def send_info(self, frame):
info_frame = self.frame_factory.build_arq_session_info(self.id, len(self.data),
helpers.get_crc_32(self.data),
self.snr[0])
@ -98,7 +96,7 @@ 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()
burst = []
for f in range(0, self.frames_per_burst):
@ -109,5 +107,5 @@ class ARQSessionISS(arq_session.ARQSession):
self.id, self.confirmed_bytes, payload)
burst.append(data_frame)
self.launch_twr(burst, self.TIMEOUT_CONNECT_ACK, self.RETRIES_CONNECT, mode='auto')
self.launch_twr(burst, self.TIMEOUT_TRANSFER, self.RETRIES_CONNECT, mode='auto')
self.set_state(self.STATE_BURST_SENT)

View file

@ -7,8 +7,7 @@ from arq_session_iss import ARQSessionISS
class ARQRawCommand(TxCommand):
def set_params_from_api(self, apiParams):
print(apiParams)
self.dxcall = apiParams['dxcallsign']
self.dxcall = apiParams['dxcall']
if not api_validations.validate_freedata_callsign(self.dxcall):
self.dxcall = f"{self.dxcall}-0"

View file

@ -153,7 +153,6 @@ class DataFrameFactory:
}
def construct(self, frametype, content, frame_length = LENGTH_SIG1_FRAME):
frame_template = self.template_list[frametype.value]
if isinstance(frame_template["frame_length"], int):
@ -233,11 +232,13 @@ 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
for field, length in self.template_list[type.value].items():
if field != 'frame_length' and isinstance(length, int):
available -= length
return available
def build_ping(self, destination):

View file

@ -526,7 +526,7 @@ class Demodulator():
(self.sig1_datac13_buffer, self.RECEIVE_SIG1),
(self.dat0_datac1_buffer, self.RECEIVE_DATAC1),
(self.dat0_datac3_buffer, self.RECEIVE_DATAC3),
(self.dat0_datac4_buffer, RECEIVE_DATAC4),
(self.dat0_datac4_buffer, self.RECEIVE_DATAC4),
(self.fsk_ldpc_buffer_0, self.enable_fsk),
(self.fsk_ldpc_buffer_1, self.enable_fsk),
]:

View file

@ -280,6 +280,8 @@ class RF:
if mode in mode_transition:
freedv = mode_transition[mode]
else:
print("wrong mode.................")
print(mode)
return False
# Wait for some other thread that might be transmitting