mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
adjusted demod error handling
This commit is contained in:
parent
54ddb69083
commit
60c1b14116
1 changed files with 46 additions and 39 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue