added version control to arq

This commit is contained in:
dj2ls 2024-04-01 20:16:12 +02:00
parent 0dacdb2e4f
commit f81c04aea7
4 changed files with 12 additions and 3 deletions

View file

@ -41,6 +41,8 @@ class ARQSession:
self.states = state_manager
self.states.setARQ(True)
self.protocol_version = 1
self.snr = []
self.dxcall = dxcall

View file

@ -109,6 +109,11 @@ class ARQSessionIRS(arq_session.ARQSession):
self.event_manager.send_arq_session_new(
False, self.id, self.dxcall, 0, self.state.name)
if open_frame['protocol_version'] not in [self.protocol_version]:
self.abort = True
self.log(f"Protocol version mismatch! Setting disconnect flag!", isWarning=True)
ack_frame = self.frame_factory.build_arq_session_open_ack(
self.id,
self.dxcall,

View file

@ -110,7 +110,7 @@ class ARQSessionISS(arq_session.ARQSession):
maximum_bandwidth = self.config['MODEM']['maximum_bandwidth']
self.event_manager.send_arq_session_new(
True, self.id, self.dxcall, self.total_length, self.state.name)
session_open_frame = self.frame_factory.build_arq_session_open(self.dxcall, self.id, maximum_bandwidth)
session_open_frame = self.frame_factory.build_arq_session_open(self.dxcall, self.id, maximum_bandwidth, self.protocol_version)
self.launch_twr(session_open_frame, self.TIMEOUT_CONNECT_ACK, self.RETRIES_CONNECT, mode=FREEDV_MODE.signalling)
self.set_state(ISS_State.OPEN_SENT)

View file

@ -81,6 +81,7 @@ class DataFrameFactory:
"origin": 6,
"session_id": 1,
"maximum_bandwidth": 2,
"protocol_version" : 1
}
self.template_list[FR_TYPE.ARQ_SESSION_OPEN_ACK.value] = {
@ -266,7 +267,7 @@ class DataFrameFactory:
elif key in ["session_id", "speed_level",
"frames_per_burst", "version",
"offset", "total_length", "state", "type", "maximum_bandwidth"]:
"offset", "total_length", "state", "type", "maximum_bandwidth", "protocol_version"]:
extracted_data[key] = int.from_bytes(data, 'big')
elif key in ["snr"]:
@ -375,12 +376,13 @@ class DataFrameFactory:
test_frame[:1] = bytes([FR_TYPE.TEST_FRAME.value])
return test_frame
def build_arq_session_open(self, destination, session_id, maximum_bandwidth):
def build_arq_session_open(self, destination, session_id, maximum_bandwidth, protocol_version):
payload = {
"destination_crc": helpers.get_crc_24(destination),
"origin": helpers.callsign_to_bytes(self.myfullcall),
"session_id": session_id.to_bytes(1, 'big'),
"maximum_bandwidth": maximum_bandwidth.to_bytes(2, 'big'),
"protocol_version": protocol_version.to_bytes(1, 'big'),
}
return self.construct(FR_TYPE.ARQ_SESSION_OPEN, payload)