From 5efe4918818c4bb08601287621a7fe1b93bfd050 Mon Sep 17 00:00:00 2001 From: DJ2LS <75909252+DJ2LS@users.noreply.github.com> Date: Sat, 14 Aug 2021 20:00:32 +0200 Subject: [PATCH] transmission progress --- tnc/data_handler.py | 14 +++----------- tnc/helpers.py | 46 +++++++++++++++++++++++++++++++-------------- tnc/sock.py | 4 ++++ tnc/static.py | 2 ++ 4 files changed, 41 insertions(+), 25 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index e312bc09..2ceb452a 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -392,6 +392,7 @@ def arq_transmit(data_out): elif static.ARQ_ACK_RECEIVED: transfer_rates = helpers.calculate_transfer_rate() logging.info("ARQ | RX | ACK [" + str(transfer_rates[2]) + " bit/s | " + str(transfer_rates[3]) + " B/min]") + # -----------IF ACK RECEIVED, INCREMENT ITERATOR FOR MAIN LOOP TO PROCEED WITH NEXT FRAMES/BURST static.ARQ_N_SENT_FRAMES = static.ARQ_N_SENT_FRAMES + static.ARQ_TX_N_FRAMES_PER_BURST break @@ -598,11 +599,7 @@ def arq_received_data_channel_opener(data_in): connection_frame[3:9] = static.MYCALLSIGN connection_frame[12:13] = bytes([static.ARQ_DATA_CHANNEL_MODE]) - # wait before sending so we can sure, other station is ready for TX - wait_until_transmit = time.time() + static.TIME_BETWEEN_RX_TX - while time.time() < wait_until_transmit: - pass - + modem.transmit_signalling(connection_frame) #modem.transmit_signalling(connection_frame) while static.CHANNEL_STATE == 'SENDING_SIGNALLING': @@ -672,12 +669,7 @@ def received_ping(data_in): ping_frame[1:2] = static.DXCALLSIGN_CRC8 ping_frame[2:3] = static.MYCALLSIGN_CRC8 ping_frame[3:9] = static.MYGRID - - # wait before sending so we can sure, other station is ready for TX - wait_until_transmit = time.time() + static.TIME_BETWEEN_RX_TX - while time.time() < wait_until_transmit: - pass - + # wait while sending.... modem.transmit_signalling(ping_frame) #modem.transmit_signalling(ping_frame) diff --git a/tnc/helpers.py b/tnc/helpers.py index f4e3b547..cd7f7b60 100644 --- a/tnc/helpers.py +++ b/tnc/helpers.py @@ -15,6 +15,13 @@ import crcengine import static import data_handler +def timeout(seconds): + timeout = time.time() + seconds + + while time.time() < timeout: + time.sleep(0.01) + + def get_crc_8(data): """ @@ -124,26 +131,37 @@ def arq_reset_frame_machine(): 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") + 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") - total_bytes = (total_n_frames * static.ARQ_PAYLOAD_PER_FRAME) - total_transmission_time = time.time() - static.ARQ_START_OF_TRANSMISSION + static.TOTAL_BYTES = (total_n_frames * static.ARQ_PAYLOAD_PER_FRAME) + total_transmission_time = time.time() - static.ARQ_START_OF_TRANSMISSION - burst_bytes = static.ARQ_PAYLOAD_PER_FRAME - burst_transmission_time = time.time() - static.ARQ_START_OF_BURST + + burst_bytes = static.ARQ_PAYLOAD_PER_FRAME + burst_transmission_time = time.time() - static.ARQ_START_OF_BURST - static.ARQ_BITS_PER_SECOND_TRANSMISSION = int((total_bytes * 8) / total_transmission_time) - static.ARQ_BYTES_PER_MINUTE_TRANSMISSION = int(((total_bytes) / total_transmission_time) * 60) + static.ARQ_BITS_PER_SECOND = int((static.TOTAL_BYTES * 8) / total_transmission_time) + static.ARQ_BYTES_PER_MINUTE = int(((static.TOTAL_BYTES) / total_transmission_time) * 60) - static.ARQ_BITS_PER_SECOND_BURST = int((burst_bytes * 8) / burst_transmission_time) - static.ARQ_BYTES_PER_MINUTE_BURST = int(((burst_bytes) / burst_transmission_time) * 60) + static.ARQ_BITS_PER_SECOND_BURST = int((burst_bytes * 8) / burst_transmission_time) + static.ARQ_BYTES_PER_MINUTE_BURST = int(((burst_bytes) / burst_transmission_time) * 60) - - return [static.ARQ_BITS_PER_SECOND_TRANSMISSION, static.ARQ_BYTES_PER_MINUTE_TRANSMISSION, static.ARQ_BITS_PER_SECOND_BURST, static.ARQ_BYTES_PER_MINUTE_BURST] + + # 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) + else: + static.ARQ_TRANSMISSION_PERCENT = 0.0 + + + return [static.ARQ_BITS_PER_SECOND, static.ARQ_BYTES_PER_MINUTE, static.ARQ_BITS_PER_SECOND_BURST, static.ARQ_BYTES_PER_MINUTE_BURST] diff --git a/tnc/sock.py b/tnc/sock.py index fd1d3620..38809d97 100644 --- a/tnc/sock.py +++ b/tnc/sock.py @@ -195,6 +195,10 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): "ARQ_RX_FRAME_N_BURSTS": str(static.ARQ_RX_FRAME_N_BURSTS), "ARQ_RX_N_CURRENT_ARQ_FRAME": str(static.ARQ_RX_N_CURRENT_ARQ_FRAME), "ARQ_N_ARQ_FRAMES_PER_DATA_FRAME": str(static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME), + "ARQ_BYTES_PER_MINUTE" : str(static.ARQ_BYTES_PER_MINUTE), + "ARQ_TRANSMISSION_PERCENT" : str(static.ARQ_TRANSMISSION_PERCENT), + "TOTAL_BYTES" : str(static.TOTAL_BYTES), + "STATIONS" : [], "EOF" : "EOF", } diff --git a/tnc/static.py b/tnc/static.py index 09c07f31..900c5053 100644 --- a/tnc/static.py +++ b/tnc/static.py @@ -182,6 +182,8 @@ ARQ_START_OF_BURST = 0 #ARQ_END_OF_TRANSMISSION = 0 ARQ_BITS_PER_SECOND = 0 ARQ_BYTES_PER_MINUTE = 0 +ARQ_TRANSMISSION_PERCENT = 0 +TOTAL_BYTES = 0 # ------- TX BUFFER TX_BUFFER_SIZE = 0