diff --git a/tnc/daemon.py b/tnc/daemon.py index 6d7f6842..a5e22849 100644 --- a/tnc/daemon.py +++ b/tnc/daemon.py @@ -127,7 +127,6 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): print(received_json["parameter"][0]) #os.system("python3 main.py --rx 3 --tx 3 --deviceport /dev/ttyUSB0 --deviceid 2028") - # Start RIGCTLD if ptt == "RTS": @@ -171,6 +170,7 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): if DEBUG: + process = subprocess.Popen("exec python3 main.py --rx "+ str(rx_audio) +" --tx "+ str(tx_audio) +" --deviceport "+ str(deviceport) +" --deviceid "+ str(deviceid) + " --serialspeed "+ str(serialspeed) + " --ptt "+ str(ptt), shell=True) atexit.register(process.terminate) else: @@ -229,7 +229,9 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): print("Wrong command") print(data) e = sys.exc_info()[0] - print(e) + print(e) + + exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] print(exc_type, fname, exc_tb.tb_lineno) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 9ffe0b86..e0120cdf 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -48,8 +48,10 @@ def arq_data_received(data_in): static.ARQ_N_FRAME = int.from_bytes(bytes(data_in[:1]), "big") - 10 # get number of burst frame static.ARQ_N_RX_FRAMES_PER_BURSTS = int.from_bytes(bytes(data_in[1:2]), "big") # get number of bursts from received frame static.ARQ_RX_N_CURRENT_ARQ_FRAME = int.from_bytes(bytes(data_in[2:4]), "big") # get current number of total frames - static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME = int.from_bytes(bytes(data_in[4:6]), "big") # get get total number of frames - + static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME = int.from_bytes(bytes(data_in[4:6]), "big") # get total number of frames + static.TOTAL_BYTES = static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME * static.ARQ_PAYLOAD_PER_FRAME # calculate total bytes + + logging.debug("----------------------------------------------------------------") logging.debug("ARQ_N_FRAME: " + str(static.ARQ_N_FRAME)) logging.debug("ARQ_N_RX_FRAMES_PER_BURSTS: " + str(static.ARQ_N_RX_FRAMES_PER_BURSTS)) @@ -64,22 +66,28 @@ def arq_data_received(data_in): logging.log(24, "ARQ | RX | " + str(static.ARQ_DATA_CHANNEL_MODE) + " | F:[" + str(static.ARQ_N_FRAME) + "/" + str(static.ARQ_N_RX_FRAMES_PER_BURSTS) + "] [" + str(arq_percent_burst).zfill(3) + "%] T:[" + str(static.ARQ_RX_N_CURRENT_ARQ_FRAME) + "/" + str(static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME) + "] [" + str(arq_percent_frame).zfill(3) + "%] [SNR:" + str(static.SNR) + "]") + + + # allocate ARQ_RX_FRAME_BUFFER as a list with "None" if not already done. This should be done only once per burst! # here we will save the N frame of a data frame to N list position so we can explicit search for it # delete frame buffer if first frame to make sure the buffer is cleared and no junks of a old frame is remaining if static.ARQ_RX_N_CURRENT_ARQ_FRAME == 1: static.ARQ_RX_FRAME_BUFFER = [] - + + # we set the start of transmission - 6 seconds, which is more or less the transfer time for the first frame + static.ARQ_START_OF_TRANSMISSION = time.time() - 6 + helpers.calculate_transfer_rate() + + #try appending data to frame buffer try: static.ARQ_RX_FRAME_BUFFER[static.ARQ_RX_N_CURRENT_ARQ_FRAME] = bytes(data_in) + except IndexError: static.ARQ_RX_FRAME_BUFFER = [] - - #on a new transmission we reset the timer - static.ARQ_START_OF_TRANSMISSION = int(time.time()) + 4 - + for i in range(0, static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME + 1): static.ARQ_RX_FRAME_BUFFER.insert(i, None) @@ -87,9 +95,15 @@ def arq_data_received(data_in): static.ARQ_FRAME_BOF_RECEIVED = False static.ARQ_FRAME_EOF_RECEIVED = False + + if static.ARQ_N_FRAME == 1: + static.ARQ_START_OF_BURST = time.time() - 6 + helpers.calculate_transfer_rate() + + # try appending data to burst buffer try: static.ARQ_RX_BURST_BUFFER[static.ARQ_N_FRAME] = bytes(data_in) - + except IndexError: static.ARQ_RX_BURST_BUFFER = [] @@ -277,7 +291,8 @@ def arq_transmit(data_out): # This is the total frame with frame header, which will be send data_out = frame_payload_crc + static.FRAME_BOF + data_out + static.FRAME_EOF # 2 2 N 2 - + # save len of data_out to TOTAL_BYTES for our statistics + static.TOTAL_BYTES = len(data_out) # --------------------------------------------- LETS CREATE A BUFFER BY SPLITTING THE FILES INTO PEACES static.TX_BUFFER = [data_out[i:i + static.ARQ_PAYLOAD_PER_FRAME] for i in range(0, len(data_out), static.ARQ_PAYLOAD_PER_FRAME)] static.TX_BUFFER_SIZE = len(static.TX_BUFFER) @@ -529,7 +544,7 @@ def open_dc_and_transmit(data_out, mode, n_frames): time.sleep(0.01) #on a new transmission we reset the timer - static.ARQ_START_OF_TRANSMISSION = int(time.time()) + #static.ARQ_START_OF_TRANSMISSION = int(time.time()) # lets wait a little bit so RX station is ready for receiving wait_before_data_timer = time.time() + 0.5 @@ -598,7 +613,8 @@ def arq_received_data_channel_opener(data_in): static.TNC_STATE = 'BUSY' static.ARQ_DATA_CHANNEL_MODE = int.from_bytes(bytes(data_in[12:13]), "big") - static.ARQ_DATA_CHANNEL_LAST_RECEIVED = int(time.time()) + static.ARQ_DATA_CHANNEL_LAST_RECEIVED = int(time.time()) + #static.ARQ_START_OF_TRANSMISSION = time.time() + 4 connection_frame = bytearray(14) connection_frame[:1] = bytes([226]) diff --git a/tnc/helpers.py b/tnc/helpers.py index 5b6a3d89..7b81aa93 100644 --- a/tnc/helpers.py +++ b/tnc/helpers.py @@ -130,7 +130,8 @@ def arq_reset_frame_machine(): static.ARQ_START_OF_TRANSMISSION = 0 def calculate_transfer_rate(): - + if static.ARQ_START_OF_TRANSMISSION > 0: + static.TOTAL_TRANSMISSION_TIME = time.time() - static.ARQ_START_OF_TRANSMISSION print("ARQ_N_ARQ_FRAMES_PER_DATA_FRAME " + str(static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME)) @@ -148,39 +149,39 @@ def calculate_transfer_rate(): else: total_n_frames = 0 - - print(arq_n_arq_frames_per_data_frame) - print(arq_rx_n_current_arq_frame) - print(total_n_frames) - print(static.TX_BUFFER_SIZE) - print(static.ARQ_PAYLOAD_PER_FRAME) - static.TOTAL_BYTES = (static.TX_BUFFER_SIZE * static.ARQ_PAYLOAD_PER_FRAME) - total_transmission_time = time.time() - static.ARQ_START_OF_TRANSMISSION + if static.TOTAL_TRANSMISSION_TIME > 0: + #total_transmission_time = time.time() - static.ARQ_START_OF_TRANSMISSION + total_transmission_time = static.TOTAL_TRANSMISSION_TIME + print("total_transmission_time: " + str(total_transmission_time)) + print("static.TOTAL_BYTES: " + str(static.TOTAL_BYTES)) - - burst_bytes = static.ARQ_PAYLOAD_PER_FRAME - burst_transmission_time = time.time() - static.ARQ_START_OF_BURST - 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 = int((static.TOTAL_BYTES * 8) / total_transmission_time) + static.ARQ_BYTES_PER_MINUTE = int(((static.TOTAL_BYTES) / total_transmission_time) * 60) + + burst_bytes = static.ARQ_PAYLOAD_PER_FRAME * static.ARQ_N_RX_FRAMES_PER_BURSTS + burst_transmission_time = time.time() - static.ARQ_START_OF_BURST + print("BURST TRANSMISSION TIME: " + str(burst_transmission_time)) + 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) + print("static.ARQ_BITS_PER_SECOND_BURST: " + str(static.ARQ_BITS_PER_SECOND_BURST)) + print("static.ARQ_BYTES_PER_MINUTE_BURST: " + str(static.ARQ_BYTES_PER_MINUTE_BURST)) - 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) - - - # calculate transmission percentage - #int(static.ARQ_N_SENT_FRAMES / (static.TX_BUFFER_SIZE - + # PERCENTAGE FOR TRANSMITTING if static.TX_BUFFER_SIZE > 0: - static.ARQ_TRANSMISSION_PERCENT = int(arq_rx_n_current_arq_frame / static.TX_BUFFER_SIZE) * 100 + # PERCENTAGE FOR RECEIVING elif arq_n_arq_frames_per_data_frame > 0: - static.ARQ_TRANSMISSION_PERCENT = int(arq_rx_n_current_arq_frame / arq_n_arq_frames_per_data_frame) * 100 + static.ARQ_TRANSMISSION_PERCENT = int((static.ARQ_RX_N_CURRENT_ARQ_FRAME / static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME) * 100) + else: static.ARQ_TRANSMISSION_PERCENT = 0.0 - print(static.ARQ_TRANSMISSION_PERCENT) + print("static.ARQ_TRANSMISSION_PERCENT: " + str(static.ARQ_TRANSMISSION_PERCENT)) + print("static.ARQ_BYTES_PER_MINUTE: " + str(static.ARQ_BYTES_PER_MINUTE)) + print("static.ARQ_BITS_PER_SECOND: " + str(static.ARQ_BITS_PER_SECOND)) 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/modem.py b/tnc/modem.py index 3f305c28..b33d0e02 100644 --- a/tnc/modem.py +++ b/tnc/modem.py @@ -496,7 +496,7 @@ class RF(): if nbytes == bytes_per_frame and bytes(bytes_out[1:2]) == static.MYCALLSIGN_CRC8 or bytes(bytes_out[6:7]) == static.MYCALLSIGN_CRC8 or bytes(bytes_out[1:2]) == b'\x01': self.calculate_snr(freedv) - + helpers.calculate_transfer_rate() # CHECK IF FRAMETYPE IS BETWEEN 10 and 50 ------------------------ frametype = int.from_bytes(bytes(bytes_out[:1]), "big") frame = frametype - 10 diff --git a/tnc/sock.py b/tnc/sock.py index 5c248c1f..cdc1085d 100644 --- a/tnc/sock.py +++ b/tnc/sock.py @@ -186,6 +186,7 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): "ARQ_RX_N_CURRENT_ARQ_FRAME": str(static.ARQ_RX_N_CURRENT_ARQ_FRAME), "ARQ_N_ARQ_FRAMES_PER_DATA_FRAME": str(int.from_bytes(bytes(static.ARQ_N_ARQ_FRAMES_PER_DATA_FRAME), "big")), "ARQ_BYTES_PER_MINUTE" : str(static.ARQ_BYTES_PER_MINUTE), + "ARQ_BYTES_PER_MINUTE_BURST" : str(static.ARQ_BYTES_PER_MINUTE_BURST), "ARQ_TRANSMISSION_PERCENT" : str(static.ARQ_TRANSMISSION_PERCENT), "TOTAL_BYTES" : str(static.TOTAL_BYTES), diff --git a/tnc/static.py b/tnc/static.py index 06cdd5e3..4cb3a275 100644 --- a/tnc/static.py +++ b/tnc/static.py @@ -118,7 +118,8 @@ ARQ_TX_N_CURRENT_ARQ_FRAME = 0 ## # RX -ARQ_N_ARQ_FRAMES_PER_DATA_FRAME = b'\x00\x00' # 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_N_ARQ_FRAMES_PER_DATA_FRAME = 0 # total number of arq frames per data frame ARQ_RX_N_CURRENT_ARQ_FRAME = 0 ## @@ -179,9 +180,12 @@ ARQ_DATA_CHANNEL_LAST_RECEIVED = 0 # BIT RATE MESSUREMENT ARQ_START_OF_TRANSMISSION = 0 ARQ_START_OF_BURST = 0 +TOTAL_TRANSMISSION_TIME = 0 #ARQ_END_OF_TRANSMISSION = 0 ARQ_BITS_PER_SECOND = 0 ARQ_BYTES_PER_MINUTE = 0 +ARQ_BITS_PER_SECOND_BURST = 0 +ARQ_BYTES_PER_MINUTE_BURST = 0 ARQ_TRANSMISSION_PERCENT = 0 TOTAL_BYTES = 0