WIP adding arq data frame

This commit is contained in:
DJ2LS 2023-12-09 12:31:08 +01:00
parent 5842519e2a
commit 9b820f6562
4 changed files with 46 additions and 41 deletions

View file

@ -32,57 +32,57 @@
},
"homepage": "https://freedata.app",
"dependencies": {
"@electron/asar": "^3.2.7",
"@electron/notarize": "^2.1.0",
"@electron/universal": "^2.0.0",
"@electron/asar": "^3.2.8",
"@electron/notarize": "^2.2.0",
"@electron/universal": "^2.0.1",
"@popperjs/core": "^2.11.8",
"@vueuse/electron": "^10.4.1",
"@vueuse/electron": "^10.7.0",
"blob-util": "^2.0.2",
"bootstrap": "^5.3.1",
"bootstrap-icons": "^1.10.5",
"bootswatch": "^5.3.1",
"bootstrap": "^5.3.2",
"bootstrap-icons": "^1.11.2",
"bootswatch": "^5.3.2",
"browser-image-compression": "^2.0.2",
"chart.js": "^4.3.3",
"chart.js": "^4.4.1",
"chartjs-plugin-annotation": "^3.0.1",
"electron-log": "^5.0.0",
"electron-updater": "^6.1.6",
"emoji-picker-element": "^1.18.3",
"emoji-picker-element-data": "^1.4.0",
"electron-log": "^5.0.1",
"electron-updater": "^6.1.7",
"emoji-picker-element": "^1.20.1",
"emoji-picker-element-data": "^1.6.0",
"file-saver": "^2.0.5",
"gridstack": "^10.0.0",
"mime": "^4.0.0",
"pinia": "^2.1.6",
"pinia": "^2.1.7",
"pouchdb": "^8.0.1",
"pouchdb-browser": "^8.0.1",
"pouchdb-find": "^8.0.1",
"pouchdb-upsert": "^2.2.0",
"qth-locator": "^2.1.0",
"sass": "^1.66.1",
"sass": "^1.69.5",
"socket.io": "^4.7.2",
"uuid": "^9.0.0",
"uuid": "^9.0.1",
"vue": "^3.3.4",
"vue-chartjs": "^5.2.0",
"vuemoji-picker": "^0.2.0"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^6.7.4",
"@vitejs/plugin-vue": "^4.4.0",
"electron": "^27.0.0",
"electron-builder": "^24.6.3",
"eslint": "^8.50.0",
"eslint-config-prettier": "^9.0.0",
"@typescript-eslint/eslint-plugin": "^6.13.2",
"@vitejs/plugin-vue": "^4.5.2",
"electron": "^27.1.3",
"electron-builder": "^24.9.1",
"eslint": "^8.55.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard-with-typescript": "^40.0.0",
"eslint-plugin-import": "^2.28.1",
"eslint-plugin-n": "^16.1.0",
"eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-n": "^16.3.1",
"eslint-plugin-prettier": "^5.0.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.17.0",
"typescript": "^5.2.2",
"vite": "^5.0.4",
"eslint-plugin-vue": "^9.19.2",
"typescript": "^5.3.3",
"vite": "^5.0.7",
"vite-plugin-electron": "^0.15.4",
"vite-plugin-electron-renderer": "^0.14.5",
"vitest": "^0.34.6",
"vue": "^3.3.4",
"vue-tsc": "^1.4.2"
"vue-tsc": "^1.8.25"
}
}

View file

@ -49,7 +49,7 @@ class ARQSessionISS(arq_session.ARQSession):
self.thread.run()
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)
@ -69,7 +69,7 @@ class ARQSessionISS(arq_session.ARQSession):
if self.state != self.STATE_CONNECTING:
raise RuntimeError(f"ARQ Session: Received connection ACK while in state {self.state}")
self.speed_level = ack['speed_level']
self.build_arq_data_framespeed_level = ack['speed_level']
self.event_connection_ack_received.set()
# Sends the full payload in multiple frames
@ -84,6 +84,7 @@ class ARQSessionISS(arq_session.ARQSession):
max_size = self.get_payload_size(self.speed_level)
end_offset = min(len(self.data), max_size)
frame_payload = self.data[offset:end_offset]
print(self.id)
data_frame = self.frame_factory.build_arq_data_frame(self.id, n_frames_per_burst, max_size, n_frame, frame_payload)
self.set_state(self.STATE_SENDING)
if not self.send_arq(data_frame):

View file

@ -132,7 +132,7 @@ class DataFrameFactory:
"frame_length": "dynamic",
"n_frames_per_burst": 1,
"session_id": 1,
"payload": "dynamic",
"data": "dynamic",
}
# arq burst ack
@ -175,18 +175,19 @@ class DataFrameFactory:
def construct(self, frametype, content, frame_length=LENGTH_SIG1_FRAME):
# frame_length: can be set manually for data frames, whose length can be dynamic regarding corresponding mode
# data bursts have a frame type range of 01-50
if frametype in range(1, 50):
frame_template = self.template_list[frametype.value]
frame_template = self.template_list[frametype]
frame = bytearray(frame_length)
# override "dynamic" value of payload length
self.template_list[frame_template].payload = frame_length - 3
self.template_list[frametype]["data"] = frame_length - 3
frame[:1] = bytes([frametype])
else:
frame_template = self.template_list[frametype.value]
frame_length = frame_template["frame_length"]
frame = bytearray(frame_length)
frame[:1] = bytes([frametype.value])
buffer_position = 1
for key, item_length in frame_template.items():
@ -194,7 +195,6 @@ class DataFrameFactory:
frame[buffer_position: buffer_position + item_length] = content[key]
buffer_position += item_length
frame[:1] = bytes([frametype.value])
return frame
def deconstruct(self, frame):
@ -212,7 +212,12 @@ class DataFrameFactory:
for key, item_length in frame_template.items():
if key != "frame_length":
data = frame[buffer_position: buffer_position + item_length]
# data is always on the last payload slots
if item_length in ["dynamic"] and key in["data"]:
data = frame[buffer_position:]
item_length = len(data)
else:
data = frame[buffer_position: buffer_position + item_length]
# Process the data based on the key
if key in ["origin", "destination"]:
@ -319,9 +324,7 @@ class DataFrameFactory:
return test_frame
def build_arq_session_connect(self, isWideband, destination, session_id):
print(isWideband)
print(destination)
print(session_id)
payload = {
"destination_crc": helpers.get_crc_24(destination),
"origin_crc": helpers.get_crc_24(self.myfullcall),
@ -351,11 +354,11 @@ class DataFrameFactory:
def build_arq_data_frame(self, session_id: bytes, n_frames_per_burst: int, max_size: int, n_frame: int, frame_payload: bytes):
payload = {
"n_frames_per_burst": bytes([n_frames_per_burst]),
"session_id": session_id,
"session_id": session_id.to_bytes(1, 'big'),
"data": frame_payload
}
return self.construct(FR_TYPE.FR_TYPE.BURST_01.value + n_frame, payload, frame_length=max_size)
return self.construct(FR_TYPE.BURST_01.value + (n_frame-1), 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):

View file

@ -35,6 +35,7 @@ class DISPATCHER():
FR_TYPE.ARQ_CONNECTION_OPEN.value: {"class": ARQFrameHandler, "name": "ARQ OPEN SESSION"},
FR_TYPE.ARQ_STOP.value: {"class": ARQFrameHandler, "name": "ARQ STOP TX"},
FR_TYPE.BEACON.value: {"class": FrameHandler, "name": "BEACON"},
FR_TYPE.BURST_01.value:{"class": ARQFrameHandler, "name": "BURST_01"},
FR_TYPE.BURST_ACK.value: {"class": FrameHandler, "name": "BURST ACK"},
FR_TYPE.BURST_NACK.value: {"class": FrameHandler, "name": "BURST NACK"},
FR_TYPE.CQ.value: {"class": CQFrameHandler, "name": "CQ"},