mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
Move decode mode setting to demodulator. Fix ARQ tests.
This commit is contained in:
parent
02deab90b7
commit
9b6647c29e
|
@ -1,6 +1,4 @@
|
||||||
import threading
|
import threading
|
||||||
import data_frame_factory
|
|
||||||
import queue
|
|
||||||
import arq_session
|
import arq_session
|
||||||
import helpers
|
import helpers
|
||||||
from modem_frametypes import FRAME_TYPE
|
from modem_frametypes import FRAME_TYPE
|
||||||
|
@ -56,6 +54,9 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
|
|
||||||
self.transmitted_acks = 0
|
self.transmitted_acks = 0
|
||||||
|
|
||||||
|
def set_decode_mode(self):
|
||||||
|
self.modem.demodulator.set_decode_mode(self.get_mode_by_speed_level(self.speed_level))
|
||||||
|
|
||||||
def all_data_received(self):
|
def all_data_received(self):
|
||||||
return self.total_length == self.received_bytes
|
return self.total_length == self.received_bytes
|
||||||
|
|
||||||
|
@ -100,7 +101,7 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
self.dx_snr.append(info_frame['snr'])
|
self.dx_snr.append(info_frame['snr'])
|
||||||
|
|
||||||
self.calibrate_speed_settings()
|
self.calibrate_speed_settings()
|
||||||
self.set_modem_decode_modes(self.speed_level)
|
self.set_decode_mode()
|
||||||
info_ack = self.frame_factory.build_arq_session_info_ack(
|
info_ack = self.frame_factory.build_arq_session_info_ack(
|
||||||
self.id, self.total_crc, self.snr[0],
|
self.id, self.total_crc, self.snr[0],
|
||||||
self.speed_level, self.frames_per_burst)
|
self.speed_level, self.frames_per_burst)
|
||||||
|
@ -109,27 +110,10 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
|
|
||||||
def send_burst_nack(self):
|
def send_burst_nack(self):
|
||||||
self.calibrate_speed_settings()
|
self.calibrate_speed_settings()
|
||||||
self.set_modem_decode_modes(self.speed_level)
|
self.set_decode_mode()
|
||||||
nack = self.frame_factory.build_arq_burst_ack(self.id, self.received_bytes, self.speed_level, self.frames_per_burst, self.snr[0])
|
nack = self.frame_factory.build_arq_burst_ack(self.id, self.received_bytes, self.speed_level, self.frames_per_burst, self.snr[0])
|
||||||
self.launch_transmit_and_wait(nack, None, mode=FREEDV_MODE.signalling)
|
self.launch_transmit_and_wait(nack, None, mode=FREEDV_MODE.signalling)
|
||||||
|
|
||||||
|
|
||||||
def set_modem_decode_modes(self, speed_level):
|
|
||||||
|
|
||||||
for mode in self.modem.demodulator.MODE_DICT:
|
|
||||||
self.modem.demodulator.MODE_DICT[mode]["decode"] = False
|
|
||||||
|
|
||||||
# signalling is always true
|
|
||||||
self.modem.demodulator.MODE_DICT[FREEDV_MODE.signalling.value]["decode"] = True
|
|
||||||
|
|
||||||
mode = self.get_mode_by_speed_level(self.speed_level)
|
|
||||||
# Enable mode based on speed_level
|
|
||||||
self.modem.demodulator.MODE_DICT[mode.value]["decode"] = True
|
|
||||||
self.log(f"Modem set to speed level {speed_level}")
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
def process_incoming_data(self, frame):
|
def process_incoming_data(self, frame):
|
||||||
if frame['offset'] != self.received_bytes:
|
if frame['offset'] != self.received_bytes:
|
||||||
self.logger.info(f"Discarding data frame due to wrong offset", frame=self.frame_received)
|
self.logger.info(f"Discarding data frame due to wrong offset", frame=self.frame_received)
|
||||||
|
|
|
@ -394,3 +394,15 @@ class Demodulator():
|
||||||
for mode in self.MODE_DICT:
|
for mode in self.MODE_DICT:
|
||||||
codec2.api.freedv_set_sync(self.MODE_DICT[mode]["instance"], 0)
|
codec2.api.freedv_set_sync(self.MODE_DICT[mode]["instance"], 0)
|
||||||
|
|
||||||
|
def set_decode_mode(self, mode):
|
||||||
|
|
||||||
|
for m in self.MODE_DICT: self.MODE_DICT[m]["decode"] = False
|
||||||
|
|
||||||
|
# signalling is always true
|
||||||
|
self.MODE_DICT[codec2.FREEDV_MODE.signalling.value]["decode"] = True
|
||||||
|
|
||||||
|
# Enable mode based on speed_level
|
||||||
|
self.MODE_DICT[mode.value]["decode"] = True
|
||||||
|
self.log(f"Demodulator data mode {mode.name}")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
|
@ -2,6 +2,7 @@ import sys
|
||||||
sys.path.append('modem')
|
sys.path.append('modem')
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
import unittest.mock
|
||||||
from config import CONFIG
|
from config import CONFIG
|
||||||
import helpers
|
import helpers
|
||||||
import queue
|
import queue
|
||||||
|
@ -16,6 +17,7 @@ import structlog
|
||||||
class TestModem:
|
class TestModem:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.data_queue_received = queue.Queue()
|
self.data_queue_received = queue.Queue()
|
||||||
|
self.demodulator = unittest.mock.Mock()
|
||||||
|
|
||||||
def transmit(self, mode, repeats: int, repeat_delay: int, frames: bytearray) -> bool:
|
def transmit(self, mode, repeats: int, repeat_delay: int, frames: bytearray) -> bool:
|
||||||
self.data_queue_received.put(frames)
|
self.data_queue_received.put(frames)
|
||||||
|
|
Loading…
Reference in a new issue