diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 6672e0b8..b9c5e7b4 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -234,12 +234,13 @@ def arq_data_received(data_in, bytes_per_frame): # TRANSMIT ACK FRAME FOR BURST----------------------------------------------- logging.info("ARQ | TX | ARQ DATA FRAME ACK [" + str(data_frame_crc.hex()) + "] [SNR:" + str(static.SNR) + "]") - helpers.wait(1) - modem.transmit_signalling(ack_frame, 1) - - while static.CHANNEL_STATE == 'SENDING_SIGNALLING': + #helpers.wait(1) + # since simultaneous decoding it seems, we don't have to wait anymore + + while not modem.transmit_signalling(ack_frame, 1): time.sleep(0.01) + #arq_reset_frame_machine() static.TNC_STATE = 'IDLE' static.ARQ_STATE = 'IDLE' diff --git a/tnc/modem.py b/tnc/modem.py index 2c67c443..501faa08 100644 --- a/tnc/modem.py +++ b/tnc/modem.py @@ -476,7 +476,7 @@ class RF(): if sync != 0 and nbytes != 0: # calculate snr and scatter - #self.get_scatter(datac0_freedv) + self.get_scatter(datac0_freedv) self.calculate_snr(datac0_freedv) datac0_task = threading.Thread(target=self.process_data, args=[datac0_bytes_out, datac0_freedv, datac0_bytes_per_frame]) @@ -495,7 +495,7 @@ class RF(): if sync != 0 and nbytes != 0: # calculate snr and scatter - #self.get_scatter(datac1_freedv) + self.get_scatter(datac1_freedv) self.calculate_snr(datac1_freedv) datac1_task = threading.Thread(target=self.process_data, args=[datac1_bytes_out, datac1_freedv, datac1_bytes_per_frame]) @@ -514,7 +514,7 @@ class RF(): if sync != 0 and nbytes != 0: # calculate snr and scatter - self.get_scatter(datac3_freedv) + #self.get_scatter(datac3_freedv) self.calculate_snr(datac3_freedv) datac3_task = threading.Thread(target=self.process_data, args=[datac3_bytes_out, datac3_freedv, datac3_bytes_per_frame]) @@ -621,19 +621,24 @@ class RF(): self.c_lib.freedv_get_modem_extended_stats(freedv, ctypes.byref(modemStats)) scatterdata = [] + scatterdata_small = [] for i in range(MODEM_STATS_NC_MAX): for j in range(MODEM_STATS_NR_MAX): # check if odd or not to get every 2nd item for x if (j % 2) == 0: - xsymbols = modemStats.rx_symbols[i][j] - ysymbols = modemStats.rx_symbols[i][j+1] + xsymbols = round(modemStats.rx_symbols[i][j]) + ysymbols = round(modemStats.rx_symbols[i][j+1]) # check if value 0.0 or has real data if xsymbols != 0.0 and ysymbols != 0.0: scatterdata.append({"x": xsymbols, "y": ysymbols}) # only append scatter data if new data arrived - if len(scatterdata) > 0: + + if 150 > len(scatterdata) > 0: static.SCATTER = scatterdata + else: + scatterdata_small = scatterdata[::10] + static.SCATTER = scatterdata_small def calculate_ber(self, freedv): Tbits = self.c_lib.freedv_get_total_bits(freedv)