mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
ARQ WIP
This commit is contained in:
parent
bb0fc79b4f
commit
a290c854d5
|
@ -1,18 +1,14 @@
|
||||||
import queue, threading
|
import queue, threading
|
||||||
from codec2 import FREEDV_MODE
|
import codec2
|
||||||
import data_frame_factory
|
import data_frame_factory
|
||||||
import structlog
|
import structlog
|
||||||
|
|
||||||
class ARQSession():
|
class ARQSession():
|
||||||
|
|
||||||
MODE_BY_SPEED = [
|
MODE_BY_SPEED = [
|
||||||
FREEDV_MODE.datac4.value,
|
codec2.FREEDV_MODE.datac4.value,
|
||||||
FREEDV_MODE.datac3.value,
|
codec2.FREEDV_MODE.datac3.value,
|
||||||
FREEDV_MODE.datac1.value,
|
codec2.FREEDV_MODE.datac1.value,
|
||||||
]
|
|
||||||
|
|
||||||
SIZE_BY_SPEED = [
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, config: dict, tx_frame_queue: queue.Queue, dxcall: str):
|
def __init__(self, config: dict, tx_frame_queue: queue.Queue, dxcall: str):
|
||||||
|
@ -44,3 +40,7 @@ class ARQSession():
|
||||||
def setState(self, state):
|
def setState(self, state):
|
||||||
self.state = state
|
self.state = state
|
||||||
self.logger.info(f"state changed to {state}")
|
self.logger.info(f"state changed to {state}")
|
||||||
|
|
||||||
|
def get_payload_size(self, speed_level):
|
||||||
|
mode = self.MODE_BY_SPEED[speed_level]
|
||||||
|
return codec2.get_bytes_per_frame(mode)
|
||||||
|
|
|
@ -76,7 +76,7 @@ class ARQSessionISS(arq_session.ARQSession):
|
||||||
def send_data(self):
|
def send_data(self):
|
||||||
offset = 0
|
offset = 0
|
||||||
while offset < len(self.data):
|
while offset < len(self.data):
|
||||||
max_size = self.get_max_size_for_speed_level(self.speed_level)
|
max_size = self.get_payload_size(self.speed_level)
|
||||||
end_offset = min(len(self.data), max_size)
|
end_offset = min(len(self.data), max_size)
|
||||||
frame_payload = self.data[offset:end_offset]
|
frame_payload = self.data[offset:end_offset]
|
||||||
data_frame = self.frame_factory.build_arq_session_send(self.speed_level,
|
data_frame = self.frame_factory.build_arq_session_send(self.speed_level,
|
||||||
|
|
|
@ -51,9 +51,9 @@ class TestARQSession(unittest.TestCase):
|
||||||
transmission_item = modem_transmit_queue.get()
|
transmission_item = modem_transmit_queue.get()
|
||||||
frame_bytes = bytes(transmission_item['frame'])
|
frame_bytes = bytes(transmission_item['frame'])
|
||||||
if random.randint(0, 100) < self.loss_probability:
|
if random.randint(0, 100) < self.loss_probability:
|
||||||
self.logger.info("[TestChannel] Frame lost...")
|
self.logger.info(f"[{threading.current_thread().name}] Frame lost...")
|
||||||
continue
|
continue
|
||||||
self.logger.info("[TestChannel] Redirecting frame")
|
self.logger.info(f"[{threading.current_thread().name}] Redirecting frame")
|
||||||
frame_dispatcher.new_process_data(frame_bytes, None, len(frame_bytes), 0, 0)
|
frame_dispatcher.new_process_data(frame_bytes, None, len(frame_bytes), 0, 0)
|
||||||
|
|
||||||
def establishChannels(self):
|
def establishChannels(self):
|
||||||
|
|
Loading…
Reference in a new issue