mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
WIP ARQ
This commit is contained in:
parent
0368c57d87
commit
2189f99918
4 changed files with 18 additions and 39 deletions
|
@ -51,7 +51,7 @@ class ARQSessionISS(arq_session.ARQSession):
|
||||||
def connect(self):
|
def connect(self):
|
||||||
self.state = self.STATE_CONNECTING
|
self.state = self.STATE_CONNECTING
|
||||||
|
|
||||||
connect_frame = self.frame_factory.build_arq_session_connect(True, self.dxcall, self.id)
|
connect_frame = self.frame_factory.build_arq_session_connect(self.dxcall, self.id)
|
||||||
|
|
||||||
retries = self.RETRIES_CONNECT
|
retries = self.RETRIES_CONNECT
|
||||||
while retries > 0:
|
while retries > 0:
|
||||||
|
|
|
@ -109,8 +109,7 @@ class DataFrameFactory:
|
||||||
"session_id": 1,
|
"session_id": 1,
|
||||||
}
|
}
|
||||||
# arq connect frames
|
# arq connect frames
|
||||||
self.template_list[FR_TYPE.ARQ_SESSION_OPEN_N.value] = arq_session_open
|
self.template_list[FR_TYPE.ARQ_SESSION_OPEN.value] = arq_session_open
|
||||||
self.template_list[FR_TYPE.ARQ_SESSION_OPEN_W.value] = arq_session_open
|
|
||||||
|
|
||||||
# same structure for narrow and wide types
|
# same structure for narrow and wide types
|
||||||
arq_session_open_ack = {
|
arq_session_open_ack = {
|
||||||
|
@ -120,10 +119,7 @@ class DataFrameFactory:
|
||||||
"arq_protocol_version": 1
|
"arq_protocol_version": 1
|
||||||
}
|
}
|
||||||
# arq connect ack frames
|
# arq connect ack frames
|
||||||
self.template_list[FR_TYPE.ARQ_SESSION_OPEN_ACK_N.value] = arq_session_open_ack
|
self.template_list[FR_TYPE.ARQ_SESSION_OPEN_ACK.value] = arq_session_open_ack
|
||||||
self.template_list[FR_TYPE.ARQ_SESSION_OPEN_ACK_W.value] = arq_session_open_ack
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# arq data frame
|
# arq data frame
|
||||||
# register n frames
|
# register n frames
|
||||||
|
@ -325,7 +321,7 @@ class DataFrameFactory:
|
||||||
test_frame[:1] = bytes([FR_TYPE.TEST_FRAME.value])
|
test_frame[:1] = bytes([FR_TYPE.TEST_FRAME.value])
|
||||||
return test_frame
|
return test_frame
|
||||||
|
|
||||||
def build_arq_session_connect(self, isWideband, destination, session_id):
|
def build_arq_session_connect(self, destination, session_id):
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
"destination_crc": helpers.get_crc_24(destination),
|
"destination_crc": helpers.get_crc_24(destination),
|
||||||
|
@ -333,10 +329,10 @@ class DataFrameFactory:
|
||||||
"origin": helpers.callsign_to_bytes(self.myfullcall),
|
"origin": helpers.callsign_to_bytes(self.myfullcall),
|
||||||
"session_id": session_id.to_bytes(1, 'big'),
|
"session_id": session_id.to_bytes(1, 'big'),
|
||||||
}
|
}
|
||||||
channel_type = FR_TYPE.ARQ_SESSION_OPEN_W if isWideband else FR_TYPE.ARQ_SESSION_OPEN_N
|
channel_type = FR_TYPE.ARQ_SESSION_OPEN
|
||||||
return self.construct(channel_type, payload)
|
return self.construct(channel_type, payload)
|
||||||
|
|
||||||
def build_arq_session_connect_ack(self, isWideband, session_id, speed_level,arq_protocol_version):
|
def build_arq_session_connect_ack(self, session_id, speed_level,arq_protocol_version):
|
||||||
|
|
||||||
#connection_frame = bytearray(self.length_sig0_frame)
|
#connection_frame = bytearray(self.length_sig0_frame)
|
||||||
#connection_frame[:1] = frametype
|
#connection_frame[:1] = frametype
|
||||||
|
@ -350,7 +346,7 @@ class DataFrameFactory:
|
||||||
"arq_protocol_version": bytes([arq_protocol_version]),
|
"arq_protocol_version": bytes([arq_protocol_version]),
|
||||||
}
|
}
|
||||||
|
|
||||||
channel_type = FR_TYPE.ARQ_SESSION_OPEN_ACK_W if isWideband else FR_TYPE.ARQ_SESSION_OPEN_ACK_N
|
channel_type = FR_TYPE.ARQ_SESSION_OPEN_ACK
|
||||||
return self.construct(channel_type, payload)
|
return self.construct(channel_type, payload)
|
||||||
|
|
||||||
def build_arq_data_frame(self, session_id: bytes, n_frames_per_burst: int, max_size: int, n_frame: int, frame_payload: bytes):
|
def build_arq_data_frame(self, session_id: bytes, n_frames_per_burst: int, max_size: int, n_frame: int, frame_payload: bytes):
|
||||||
|
|
|
@ -26,10 +26,8 @@ from frame_handler_arq_session import ARQFrameHandler
|
||||||
class DISPATCHER():
|
class DISPATCHER():
|
||||||
|
|
||||||
FRAME_HANDLER = {
|
FRAME_HANDLER = {
|
||||||
FR_TYPE.ARQ_SESSION_OPEN_ACK_N.value: {"class": ARQFrameHandler, "name": "ARQ OPEN ACK (Narrow)"},
|
FR_TYPE.ARQ_SESSION_OPEN_ACK.value: {"class": ARQFrameHandler, "name": "ARQ OPEN ACK"},
|
||||||
FR_TYPE.ARQ_SESSION_OPEN_ACK_W.value: {"class": ARQFrameHandler, "name": "ARQ OPEN ACK (Wide)"},
|
FR_TYPE.ARQ_SESSION_OPEN.value: {"class": ARQFrameHandler, "name": "ARQ Data Channel Open"},
|
||||||
FR_TYPE.ARQ_SESSION_OPEN_N.value: {"class": ARQFrameHandler, "name": "ARQ Data Channel Open (Narrow)"},
|
|
||||||
FR_TYPE.ARQ_SESSION_OPEN_W.value: {"class": ARQFrameHandler, "name": "ARQ Data Channel Open (Wide)"},
|
|
||||||
FR_TYPE.ARQ_CONNECTION_CLOSE.value: {"class": ARQFrameHandler, "name": "ARQ CLOSE SESSION"},
|
FR_TYPE.ARQ_CONNECTION_CLOSE.value: {"class": ARQFrameHandler, "name": "ARQ CLOSE SESSION"},
|
||||||
FR_TYPE.ARQ_CONNECTION_HB.value: {"class": ARQFrameHandler, "name": "ARQ HEARTBEAT"},
|
FR_TYPE.ARQ_CONNECTION_HB.value: {"class": ARQFrameHandler, "name": "ARQ HEARTBEAT"},
|
||||||
FR_TYPE.ARQ_CONNECTION_OPEN.value: {"class": ARQFrameHandler, "name": "ARQ OPEN SESSION"},
|
FR_TYPE.ARQ_CONNECTION_OPEN.value: {"class": ARQFrameHandler, "name": "ARQ OPEN SESSION"},
|
||||||
|
@ -121,7 +119,7 @@ class DISPATCHER():
|
||||||
|
|
||||||
|
|
||||||
def get_id_from_frame(self, data):
|
def get_id_from_frame(self, data):
|
||||||
if data[:1] in [FR_TYPE.ARQ_SESSION_OPEN_N, FR_TYPE.ARQ_SESSION_OPEN_W]:
|
if data[:1] == FR_TYPE.ARQ_SESSION_OPEN:
|
||||||
return data[13:14]
|
return data[13:14]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -230,21 +228,13 @@ class DISPATCHER():
|
||||||
# Dictionary of functions and log messages used in process_data
|
# Dictionary of functions and log messages used in process_data
|
||||||
# instead of a long series of if-elif-else statements.
|
# instead of a long series of if-elif-else statements.
|
||||||
self.rx_dispatcher = {
|
self.rx_dispatcher = {
|
||||||
FR_TYPE.ARQ_SESSION_OPEN_ACK_N.value: (
|
FR_TYPE.ARQ_SESSION_OPEN_ACK.value: (
|
||||||
self.arq_iss.arq_received_channel_is_open,
|
self.arq_iss.arq_received_channel_is_open,
|
||||||
"ARQ OPEN ACK (Narrow)",
|
"ARQ OPEN ACK",
|
||||||
),
|
),
|
||||||
FR_TYPE.ARQ_SESSION_OPEN_ACK_W.value: (
|
FR_TYPE.ARQ_SESSION_OPEN.value: (
|
||||||
self.arq_iss.arq_received_channel_is_open,
|
|
||||||
"ARQ OPEN ACK (Wide)",
|
|
||||||
),
|
|
||||||
FR_TYPE.ARQ_SESSION_OPEN_N.value: (
|
|
||||||
self.initialize_arq_transmission_irs,
|
self.initialize_arq_transmission_irs,
|
||||||
"ARQ Data Channel Open (Narrow)",
|
"ARQ Data Channel Open",
|
||||||
),
|
|
||||||
FR_TYPE.ARQ_SESSION_OPEN_W.value: (
|
|
||||||
self.initialize_arq_transmission_irs,
|
|
||||||
"ARQ Data Channel Open (Wide)",
|
|
||||||
),
|
),
|
||||||
FR_TYPE.ARQ_CONNECTION_CLOSE.value: (
|
FR_TYPE.ARQ_CONNECTION_CLOSE.value: (
|
||||||
self.arq_session.received_session_close,
|
self.arq_session.received_session_close,
|
||||||
|
|
|
@ -25,20 +25,13 @@ class FRAME_TYPE(Enum):
|
||||||
PING = 210
|
PING = 210
|
||||||
PING_ACK = 211
|
PING_ACK = 211
|
||||||
IS_WRITING = 215
|
IS_WRITING = 215
|
||||||
# ARQ_SESSION_OPEN = 221 # TODO Rename to ARQ_CONNECTION
|
|
||||||
# ARQ_SESSION_HB = 222 # TODO Rename to ARQ_CONNECTION
|
|
||||||
# ARQ_SESSION_CLOSE = 223 # TODO Rename to ARQ_CONNECTION
|
|
||||||
# ARQ_DC_OPEN_W = 225 # TODO Rename to ARQ_SESSION
|
|
||||||
# ARQ_DC_OPEN_ACK_W = 226 # TODO Rename to ARQ_SESSION
|
|
||||||
# ARQ_DC_OPEN_N = 227 # TODO Rename to ARQ_SESSION
|
|
||||||
# ARQ_DC_OPEN_ACK_N = 228 # TODO Rename to ARQ_SESSION
|
|
||||||
ARQ_CONNECTION_OPEN = 221
|
ARQ_CONNECTION_OPEN = 221
|
||||||
ARQ_CONNECTION_HB = 222
|
ARQ_CONNECTION_HB = 222
|
||||||
ARQ_CONNECTION_CLOSE = 223
|
ARQ_CONNECTION_CLOSE = 223
|
||||||
ARQ_SESSION_OPEN_W = 225
|
ARQ_SESSION_OPEN = 225
|
||||||
ARQ_SESSION_OPEN_ACK_W = 226
|
ARQ_SESSION_OPEN_ACK = 226
|
||||||
ARQ_SESSION_OPEN_N = 227
|
ARQ_SESSION_INFO = 227
|
||||||
ARQ_SESSION_OPEN_ACK_N = 228
|
ARQ_SESSION_INFO_ACK = 228
|
||||||
ARQ_STOP = 249
|
ARQ_STOP = 249
|
||||||
BEACON = 250
|
BEACON = 250
|
||||||
FEC = 251
|
FEC = 251
|
||||||
|
|
Loading…
Reference in a new issue