adjusted demod error handling

This commit is contained in:
DJ2LS 2024-01-05 15:52:22 +01:00
parent 54ddb69083
commit 60c1b14116

View file

@ -206,50 +206,57 @@ class Demodulator():
bytes_per_frame= self.MODE_DICT[mode]["bytes_per_frame"] bytes_per_frame= self.MODE_DICT[mode]["bytes_per_frame"]
state_buffer = self.MODE_DICT[mode]["state_buffer"] state_buffer = self.MODE_DICT[mode]["state_buffer"]
mode_name = self.MODE_DICT[mode]["name"] mode_name = self.MODE_DICT[mode]["name"]
try:
while self.stream.active: while self.stream.active:
threading.Event().wait(0.01) threading.Event().wait(0.01)
while audiobuffer.nbuffer >= nin: while audiobuffer.nbuffer >= nin:
# demodulate audio # demodulate audio
nbytes = codec2.api.freedv_rawdatarx( nbytes = codec2.api.freedv_rawdatarx(
freedv, bytes_out, audiobuffer.buffer.ctypes freedv, bytes_out, audiobuffer.buffer.ctypes
)
# get current modem states and write to list
# 1 trial
# 2 sync
# 3 trial sync
# 6 decoded
# 10 error decoding == NACK
rx_status = codec2.api.freedv_get_rx_status(freedv)
if rx_status not in [0]:
self.is_codec2_traffic_counter = self.is_codec2_traffic_cooldown
self.log.debug(
"[MDM] [demod_audio] modem state", mode=mode_name, rx_status=rx_status,
sync_flag=codec2.api.rx_sync_flags_to_text[rx_status]
) )
# get current modem states and write to list
# 1 trial
# 2 sync
# 3 trial sync
# 6 decoded
# 10 error decoding == NACK
rx_status = codec2.api.freedv_get_rx_status(freedv)
# decrement codec traffic counter for making state smoother if rx_status not in [0]:
if self.is_codec2_traffic_counter > 0: self.is_codec2_traffic_counter = self.is_codec2_traffic_cooldown
self.is_codec2_traffic_counter -= 1 self.log.debug(
self.states.set_channel_busy_condition_codec2(True) "[MDM] [demod_audio] modem state", mode=mode_name, rx_status=rx_status,
else: sync_flag=codec2.api.rx_sync_flags_to_text[rx_status]
self.states.set_channel_busy_condition_codec2(False) )
if rx_status == 10:
state_buffer.append(rx_status)
audiobuffer.pop(nin) # decrement codec traffic counter for making state smoother
nin = codec2.api.freedv_nin(freedv) if self.is_codec2_traffic_counter > 0:
if nbytes == bytes_per_frame: self.is_codec2_traffic_counter -= 1
self.log.debug( self.states.set_channel_busy_condition_codec2(True)
"[MDM] [demod_audio] Pushing received data to received_queue", nbytes=nbytes else:
) self.states.set_channel_busy_condition_codec2(False)
snr = self.calculate_snr(freedv) if rx_status == 10:
self.get_scatter(freedv) state_buffer.append(rx_status)
self.modem_received_queue.put([bytes_out, freedv, bytes_per_frame, snr]) audiobuffer.pop(nin)
state_buffer = [] nin = codec2.api.freedv_nin(freedv)
if nbytes == bytes_per_frame:
self.log.debug(
"[MDM] [demod_audio] Pushing received data to received_queue", nbytes=nbytes
)
snr = self.calculate_snr(freedv)
self.get_scatter(freedv)
self.modem_received_queue.put([bytes_out, freedv, bytes_per_frame, snr])
state_buffer = []
except Exception as e:
error_message = str(e)
# we expect this error when shutdown
if "PortAudio not initialized" in error_message:
e = None
self.log.debug(
"[MDM] [demod_audio] demod loop ended", mode=mode_name, e=e
)
def tci_rx_callback(self) -> None: def tci_rx_callback(self) -> None:
""" """
Callback for TCI RX Callback for TCI RX