WIP ARQ - cleanup and fixes

This commit is contained in:
DJ2LS 2023-12-16 10:28:30 +01:00
parent 30996c03b6
commit ad6f913aab
7 changed files with 15 additions and 41 deletions

View file

@ -90,7 +90,7 @@ class ARQSessionIRS(arq_session.ARQSession):
self.dxcall, self.dxcall,
self.version, self.version,
self.snr[0]) self.snr[0])
self.launch_transmit_and_wait(ack_frame, self.TIMEOUT_CONNECT, mode=FREEDV_MODE.datac13) self.launch_transmit_and_wait(ack_frame, self.TIMEOUT_CONNECT, mode=FREEDV_MODE.signalling)
self.set_state(self.STATE_OPEN_ACK_SENT) self.set_state(self.STATE_OPEN_ACK_SENT)
def send_info_ack(self, info_frame): def send_info_ack(self, info_frame):
@ -104,7 +104,7 @@ class ARQSessionIRS(arq_session.ARQSession):
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)
self.launch_transmit_and_wait(info_ack, self.TIMEOUT_CONNECT, mode=FREEDV_MODE.datac13) self.launch_transmit_and_wait(info_ack, self.TIMEOUT_CONNECT, mode=FREEDV_MODE.signalling)
self.set_state(self.STATE_INFO_ACK_SENT) self.set_state(self.STATE_INFO_ACK_SENT)
def send_burst_nack(self): def send_burst_nack(self):

View file

@ -71,7 +71,7 @@ class ARQSessionISS(arq_session.ARQSession):
def start(self): def start(self):
session_open_frame = self.frame_factory.build_arq_session_open(self.dxcall, self.id) session_open_frame = self.frame_factory.build_arq_session_open(self.dxcall, self.id)
self.launch_twr(session_open_frame, self.TIMEOUT_CONNECT_ACK, self.RETRIES_CONNECT, mode=FREEDV_MODE.datac13) self.launch_twr(session_open_frame, self.TIMEOUT_CONNECT_ACK, self.RETRIES_CONNECT, mode=FREEDV_MODE.signalling)
self.set_state(self.STATE_OPEN_SENT) self.set_state(self.STATE_OPEN_SENT)
def set_speed_and_frames_per_burst(self, frame): def set_speed_and_frames_per_burst(self, frame):
@ -84,7 +84,7 @@ class ARQSessionISS(arq_session.ARQSession):
info_frame = self.frame_factory.build_arq_session_info(self.id, len(self.data), info_frame = self.frame_factory.build_arq_session_info(self.id, len(self.data),
helpers.get_crc_32(self.data), helpers.get_crc_32(self.data),
self.snr[0]) self.snr[0])
self.launch_twr(info_frame, self.TIMEOUT_CONNECT_ACK, self.RETRIES_CONNECT, mode=FREEDV_MODE.datac13) self.launch_twr(info_frame, self.TIMEOUT_CONNECT_ACK, self.RETRIES_CONNECT, mode=FREEDV_MODE.signalling)
self.set_state(self.STATE_INFO_SENT) self.set_state(self.STATE_INFO_SENT)
def send_data(self, irs_frame): def send_data(self, irs_frame):

View file

@ -24,8 +24,7 @@ class FREEDV_MODE(Enum):
""" """
Enumeration for codec2 modes and names Enumeration for codec2 modes and names
""" """
sig0 = 19 signalling = 19
sig1 = 19
datac0 = 14 datac0 = 14
datac1 = 10 datac1 = 10
datac3 = 12 datac3 = 12

View file

@ -30,11 +30,7 @@ class TxCommand():
pass pass
def get_tx_mode(self): def get_tx_mode(self):
return ( return FREEDV_MODE.signalling
FREEDV_MODE.fsk_ldpc_0.value
if self.config['MODEM']['enable_fsk']
else FREEDV_MODE.sig0.value
)
def make_modem_queue_item(self, mode, repeat, repeat_delay, frame): def make_modem_queue_item(self, mode, repeat, repeat_delay, frame):
return { return {

View file

@ -14,7 +14,6 @@ import ctypes
import queue import queue
import threading import threading
import time import time
from collections import deque
import codec2 import codec2
import numpy as np import numpy as np
import sounddevice as sd import sounddevice as sd
@ -47,8 +46,6 @@ class RF:
self.tx_audio_level = config['AUDIO']['tx_audio_level'] self.tx_audio_level = config['AUDIO']['tx_audio_level']
self.enable_audio_auto_tune = config['AUDIO']['enable_auto_tune'] self.enable_audio_auto_tune = config['AUDIO']['enable_auto_tune']
#Dynamically enable FFT data stream when a client connects to FFT web socket
self.enable_fft_stream = False
self.tx_delay = config['MODEM']['tx_delay'] self.tx_delay = config['MODEM']['tx_delay']
self.radiocontrol = config['RADIO']['control'] self.radiocontrol = config['RADIO']['control']
@ -272,11 +269,12 @@ class RF:
self.demodulator.reset_data_sync() self.demodulator.reset_data_sync()
# get freedv instance by mode # get freedv instance by mode
mode_transition = { mode_transition = {
codec2.FREEDV_MODE.datac0.value: self.freedv_datac0_tx, codec2.FREEDV_MODE.signalling: self.freedv_datac13_tx,
codec2.FREEDV_MODE.datac1.value: self.freedv_datac1_tx, codec2.FREEDV_MODE.datac0: self.freedv_datac0_tx,
codec2.FREEDV_MODE.datac3.value: self.freedv_datac3_tx, codec2.FREEDV_MODE.datac1: self.freedv_datac1_tx,
codec2.FREEDV_MODE.datac4.value: self.freedv_datac4_tx, codec2.FREEDV_MODE.datac3: self.freedv_datac3_tx,
codec2.FREEDV_MODE.datac13.value: self.freedv_datac13_tx, codec2.FREEDV_MODE.datac4: self.freedv_datac4_tx,
codec2.FREEDV_MODE.datac13: self.freedv_datac13_tx,
} }
if mode in mode_transition: if mode in mode_transition:
freedv = mode_transition[mode] freedv = mode_transition[mode]
@ -711,18 +709,12 @@ class RF:
# When our channel busy counter reaches 0, toggle state to False # When our channel busy counter reaches 0, toggle state to False
if self.channel_busy_delay == 0: if self.channel_busy_delay == 0:
self.states.set("channel_busy", False) self.states.set("channel_busy", False)
if (self.enable_fft_stream):
# erase queue if greater than 10 # erase queue if greater than 10
if self.fft_queue.qsize() >= 10: if self.fft_queue.qsize() >= 10:
self.fft_queue = queue.Queue() self.fft_queue = queue.Queue()
self.fft_queue.put(dfftlist[:315]) # 315 --> bandwidth 3200 self.fft_queue.put(dfftlist[:315]) # 315 --> bandwidth 3200
except Exception as err: except Exception as err:
self.log.error(f"[MDM] calculate_fft: Exception: {err}") self.log.error(f"[MDM] calculate_fft: Exception: {err}")
self.log.debug("[MDM] Setting fft=0") self.log.debug("[MDM] Setting fft=0")
# else 0 # else 0
self.fft_queue.put([0]) self.fft_queue.put([0])
def set_FFT_stream(self, enable: bool):
# Set config boolean regarding wheter it should sent FFT data to queue
self.enable_fft_stream = enable

View file

@ -240,9 +240,6 @@ def sock_events(sock):
@sock.route('/fft') @sock.route('/fft')
def sock_fft(sock): def sock_fft(sock):
if len(wsm.fft_client_list) == 0:
app.modem_service.put("fft:true")
print("Streaming data to FFT socket since a client is connected")
wsm.handle_connection(sock, wsm.fft_client_list, app.modem_fft) wsm.handle_connection(sock, wsm.fft_client_list, app.modem_fft)
@sock.route('/states') @sock.route('/states')

View file

@ -17,7 +17,6 @@ class SM:
self.config = self.app.config_manager.read() self.config = self.app.config_manager.read()
self.modem_events = app.modem_events self.modem_events = app.modem_events
self.modem_fft = app.modem_fft self.modem_fft = app.modem_fft
self.enable_fft_stream = False
self.modem_service = app.modem_service self.modem_service = app.modem_service
self.states = app.state_manager self.states = app.state_manager
@ -49,14 +48,6 @@ class SM:
threading.Event().wait(0.5) threading.Event().wait(0.5)
if self.start_modem(): if self.start_modem():
self.modem_events.put(json.dumps({"freedata": "modem-event", "event": "restart"})) self.modem_events.put(json.dumps({"freedata": "modem-event", "event": "restart"}))
elif cmd in ['fft:true']:
# Tell modem it should put FFT data in the queue
self.modem.set_FFT_stream(True)
self.enable_fft_stream=True
elif cmd in ['fft:false']:
# Tell modem it should not put FFT data in the queue
self.modem.set_FFT_stream(False)
self.enable_fft_stream=False
else: else:
self.log.warning("[SVC] modem command processing failed", cmd=cmd, state=self.states.is_modem_running) self.log.warning("[SVC] modem command processing failed", cmd=cmd, state=self.states.is_modem_running)
@ -88,7 +79,6 @@ class SM:
self.frame_dispatcher.start() self.frame_dispatcher.start()
self.states.set("is_modem_running", True) self.states.set("is_modem_running", True)
self.modem.set_FFT_stream(self.enable_fft_stream)
self.modem.start_modem() self.modem.start_modem()
return True return True