From 5a478d60106b3fb8fe8f986e1f4bc1ef2daab403 Mon Sep 17 00:00:00 2001 From: DJ2LS <75909252+DJ2LS@users.noreply.github.com> Date: Sun, 15 Aug 2021 12:34:28 +0200 Subject: [PATCH] timing and calculation improvements --- tnc/data_handler.py | 6 ++++++ tnc/helpers.py | 31 ++++++++++++++++++++----------- tnc/static.py | 2 +- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index a4ca0f1c..5fa26286 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -575,6 +575,7 @@ async def arq_open_data_channel(mode): if not static.ARQ_READY_FOR_DATA and attempt + 1 == static.ARQ_OPEN_DATA_CHANNEL_RETRIES: logging.info("DATA [" + str(static.MYCALLSIGN, 'utf-8') + "]>>X<<[" + str(static.DXCALLSIGN, 'utf-8') + "]") + helpers.arq_reset_frame_machine() sys.exit() @@ -628,6 +629,9 @@ def arq_received_channel_is_open(data_in): if static.ARQ_DATA_CHANNEL_MODE == int.from_bytes(bytes(data_in[12:13]), "big"): logging.info("DATA [" + str(static.MYCALLSIGN, 'utf-8') + "]>>|<<[" + str(static.DXCALLSIGN, 'utf-8') + "] [SNR:" + str(static.SNR) + "]") + + helpers.wait(1) + static.ARQ_STATE = 'DATA' static.ARQ_READY_FOR_DATA = True static.ARQ_DATA_CHANNEL_LAST_RECEIVED = int(time.time()) @@ -653,7 +657,9 @@ def transmit_ping(callsign): # wait while sending.... modem.transmit_signalling(ping_frame, 1) + print("ping=?") while static.CHANNEL_STATE == 'SENDING_SIGNALLING': + print("PING....") time.sleep(0.01) diff --git a/tnc/helpers.py b/tnc/helpers.py index cd7f7b60..0ef38c9e 100644 --- a/tnc/helpers.py +++ b/tnc/helpers.py @@ -15,7 +15,7 @@ import crcengine import static import data_handler -def timeout(seconds): +def wait(seconds): timeout = time.time() + seconds while time.time() < timeout: @@ -130,12 +130,18 @@ def arq_reset_frame_machine(): static.ARQ_START_OF_TRANSMISSION = 0 def calculate_transfer_rate(): - - if static.ARQ_TX_N_TOTAL_ARQ_FRAMES == 0: - total_n_frames = static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME - elif static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME == 0: - total_n_frames = int.from_bytes(static.ARQ_TX_N_TOTAL_ARQ_FRAMES, "big") + arq_tx_n_total_arq_frames = int.from_bytes(static.ARQ_TX_N_TOTAL_ARQ_FRAMES, "big") + arq_n_arq_frames_per_data_frame = static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME + arq_rx_n_current_arq_frame = static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME + + + if arq_tx_n_total_arq_frames == 0: + total_n_frames = arq_n_arq_frames_per_data_frame + elif arq_n_arq_frames_per_data_frame == 0: + total_n_frames = arq_tx_n_total_arq_frames + else: + total_n_frames = 0 static.TOTAL_BYTES = (total_n_frames * static.ARQ_PAYLOAD_PER_FRAME) total_transmission_time = time.time() - static.ARQ_START_OF_TRANSMISSION @@ -152,11 +158,14 @@ def calculate_transfer_rate(): # calculate transmission percentage - if int(static.ARQ_TX_N_TOTAL_ARQ_FRAMES) > 0: - static.ARQ_TRANSMISSION_PERCENT = int(static.ARQ_TX_N_CURRENT_ARQ_FRAME) / int(static.ARQ_TX_N_TOTAL_ARQ_FRAMES) - - elif int(static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME) > 0: - static.ARQ_TRANSMISSION_PERCENT = int(static.ARQ_RX_N_CURRENT_ARQ_FRAME) / int(static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME) + + + if arq_tx_n_total_arq_frames > 0: + static.ARQ_TRANSMISSION_PERCENT = arq_rx_n_current_arq_frame / arq_tx_n_total_arq_frames + + + elif arq_n_arq_frames_per_data_frame > 0: + static.ARQ_TRANSMISSION_PERCENT = arq_rx_n_current_arq_frame / arq_n_arq_frames_per_data_frame else: static.ARQ_TRANSMISSION_PERCENT = 0.0 diff --git a/tnc/static.py b/tnc/static.py index 900c5053..e34a4356 100644 --- a/tnc/static.py +++ b/tnc/static.py @@ -118,7 +118,7 @@ ARQ_TX_N_TOTAL_ARQ_FRAMES = 0 ## # RX -ARQ_N_ARQ_FRAMES_PER_DATA_FRAME = 0 # total number of arq frames per data frame +ARQ_N_ARQ_FRAMES_PER_DATA_FRAME = b'\x00\x00' # total number of arq frames per data frame ARQ_RX_N_CURRENT_ARQ_FRAME = 0 ##