From d2dc5c98d43640231e7badee728c8a8335ddf6b4 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Fri, 30 Dec 2022 21:29:22 +0100 Subject: [PATCH 01/10] reduced channel busy timeouts --- tnc/data_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 9cbf7b8c..ef179eca 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -1469,7 +1469,7 @@ class DATA: ) # wait while timeout not reached and our busy state is busy - channel_busy_timeout = time.time() + 30 + channel_busy_timeout = time.time() + 15 while static.CHANNEL_BUSY and time.time() < channel_busy_timeout: threading.Event().wait(0.01) @@ -1963,7 +1963,7 @@ class DATA: ) # wait while timeout not reached and our busy state is busy - channel_busy_timeout = time.time() + 30 + channel_busy_timeout = time.time() + 15 while static.CHANNEL_BUSY and time.time() < channel_busy_timeout: threading.Event().wait(0.01) From 5c19d6f90edb043e31f5c8caa83b09d90f0d44f6 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Fri, 30 Dec 2022 23:24:31 +0100 Subject: [PATCH 02/10] adjust search area to mode - this might avoid false positives when searching for already received data --- tnc/data_handler.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index ef179eca..da9e176a 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -685,7 +685,12 @@ class DATA: # static.RX_FRAME_BUFFER --> existing data # temp_burst_buffer --> new data # search_area --> area where we want to search - search_area = 510 - 3 # (3 bytes arq frame header) + + + data_mode = self.mode_list[self.speed_level] + payload_per_frame = modem.get_bytes_per_frame(data_mode) - 2 + search_area = payload_per_frame - 3 # (3 bytes arq frame header) + # search_area = 510 - 3 # (3 bytes arq frame header) search_position = len(static.RX_FRAME_BUFFER) - search_area # find position of data. returns -1 if nothing found in area else >= 0 From 36f80a5b0ae8d1754ecc1d2b1c2e26c021b80102 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sat, 31 Dec 2022 11:53:24 +0100 Subject: [PATCH 03/10] reverted search area mode change --- tnc/data_handler.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index da9e176a..908c846e 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -687,10 +687,10 @@ class DATA: # search_area --> area where we want to search - data_mode = self.mode_list[self.speed_level] - payload_per_frame = modem.get_bytes_per_frame(data_mode) - 2 - search_area = payload_per_frame - 3 # (3 bytes arq frame header) - # search_area = 510 - 3 # (3 bytes arq frame header) + #data_mode = self.mode_list[self.speed_level] + #payload_per_frame = modem.get_bytes_per_frame(data_mode) - 2 + #search_area = payload_per_frame - 3 # (3 bytes arq frame header) + search_area = 510 - 3 # (3 bytes arq frame header) search_position = len(static.RX_FRAME_BUFFER) - search_area # find position of data. returns -1 if nothing found in area else >= 0 From 28e8aaa595955e9ecc6c2c45d06613371f334402 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sat, 31 Dec 2022 11:55:41 +0100 Subject: [PATCH 04/10] if frame NACK, show received data --- tnc/data_handler.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 908c846e..e3288e12 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -978,7 +978,8 @@ class DATA: overflows=static.BUFFER_OVERFLOW_COUNTER, nacks=self.frame_nack_counter, duration=duration, - bytesperminute=static.ARQ_BYTES_PER_MINUTE + bytesperminute=static.ARQ_BYTES_PER_MINUTE, + data=data_frame, ) From a43d90f7d8c039a10ba2cf8f62a1aafd6a69968a Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sat, 31 Dec 2022 12:38:46 +0100 Subject: [PATCH 05/10] calculate timeleft for transmission until finished --- tnc/data_handler.py | 14 +++++++++++--- tnc/sock.py | 1 + tnc/static.py | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index e3288e12..3f33c6cb 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -744,7 +744,7 @@ class DATA: self.set_listening_modes(False, True, self.mode_list[self.speed_level]) # Create and send ACK frame - self.log.info("[TNC] ARQ | RX | SENDING ACK") + self.log.info("[TNC] ARQ | RX | SENDING ACK", finished=static.ARQ_SECONDS_UNTIL_FINISH, bytesperminute=static.ARQ_BYTES_PER_MINUTE) self.send_burst_ack_frame(snr) # Reset n retries per burst counter @@ -765,6 +765,7 @@ class DATA: bytesperminute=static.ARQ_BYTES_PER_MINUTE, mycallsign=str(self.mycallsign, 'UTF-8'), dxcallsign=str(self.dxcallsign, 'UTF-8'), + finished=static.ARQ_SECONDS_UNTIL_FINISH, ) elif rx_n_frame_of_burst == rx_n_frames_per_burst - 1: @@ -983,7 +984,7 @@ class DATA: ) - self.log.info("[TNC] ARQ | RX | Sending NACK") + self.log.info("[TNC] ARQ | RX | Sending NACK", finished=static.ARQ_SECONDS_UNTIL_FINISH, bytesperminute=static.ARQ_BYTES_PER_MINUTE) self.send_burst_nack_frame(snr) # Update arq_session timestamp @@ -1024,6 +1025,7 @@ class DATA: uuid=self.transmission_uuid, percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, + finished=static.ARQ_SECONDS_UNTIL_FINISH, mycallsign=str(self.mycallsign, 'UTF-8'), dxcallsign=str(self.dxcallsign, 'UTF-8'), ) @@ -1218,6 +1220,7 @@ class DATA: uuid=self.transmission_uuid, percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, + finished=static.ARQ_SECONDS_UNTIL_FINISH, irs_snr=self.burst_ack_snr, mycallsign=str(self.mycallsign, 'UTF-8'), dxcallsign=str(self.dxcallsign, 'UTF-8'), @@ -1243,6 +1246,7 @@ class DATA: uuid=self.transmission_uuid, percent=static.ARQ_TRANSMISSION_PERCENT, bytesperminute=static.ARQ_BYTES_PER_MINUTE, + finished=static.ARQ_SECONDS_UNTIL_FINISH, mycallsign=str(self.mycallsign, 'UTF-8'), dxcallsign=str(self.dxcallsign, 'UTF-8'), ) @@ -2778,10 +2782,12 @@ class DATA: static.ARQ_BYTES_PER_MINUTE = int( receivedbytes / (transmissiontime / 60) ) + static.ARQ_SECONDS_UNTIL_FINISH = int(((static.TOTAL_BYTES - receivedbytes) / static.ARQ_BYTES_PER_MINUTE) * 60) else: static.ARQ_BITS_PER_SECOND = 0 static.ARQ_BYTES_PER_MINUTE = 0 + static.ARQ_SECONDS_UNTIL_FINISH = 0 except Exception as err: self.log.error(f"[TNC] calculate_transfer_rate_rx: Exception: {err}") static.ARQ_TRANSMISSION_PERCENT = 0.0 @@ -2805,6 +2811,7 @@ class DATA: static.ARQ_BITS_PER_SECOND = 0 static.ARQ_TRANSMISSION_PERCENT = 0 static.TOTAL_BYTES = 0 + static.ARQ_SECONDS_UNTIL_FINISH = 0 def calculate_transfer_rate_tx( self, tx_start_of_transmission: float, sentbytes: int, tx_buffer_length: int @@ -2831,10 +2838,11 @@ class DATA: if sentbytes > 0: static.ARQ_BITS_PER_SECOND = int((sentbytes * 8) / transmissiontime) static.ARQ_BYTES_PER_MINUTE = int(sentbytes / (transmissiontime / 60)) - + static.ARQ_SECONDS_UNTIL_FINISH = int(((tx_buffer_length - sentbytes) / static.ARQ_BYTES_PER_MINUTE) * 60 ) else: static.ARQ_BITS_PER_SECOND = 0 static.ARQ_BYTES_PER_MINUTE = 0 + static.ARQ_SECONDS_UNTIL_FINISH = 0 except Exception as err: self.log.error(f"[TNC] calculate_transfer_rate_tx: Exception: {err}") diff --git a/tnc/sock.py b/tnc/sock.py index 4cc0099b..69dad8fd 100644 --- a/tnc/sock.py +++ b/tnc/sock.py @@ -625,6 +625,7 @@ def send_tnc_state(): "rx_msg_buffer_length": str(len(static.RX_MSG_BUFFER)), "arq_bytes_per_minute": str(static.ARQ_BYTES_PER_MINUTE), "arq_bytes_per_minute_burst": str(static.ARQ_BYTES_PER_MINUTE_BURST), + "arq_seconds_until_finish": str(static.ARQ_SECONDS_UNTIL_FINISH), "arq_compression_factor": str(static.ARQ_COMPRESSION_FACTOR), "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 c94dd163..e1105937 100644 --- a/tnc/static.py +++ b/tnc/static.py @@ -101,6 +101,7 @@ ARQ_BITS_PER_SECOND_BURST: int = 0 ARQ_BITS_PER_SECOND: int = 0 ARQ_COMPRESSION_FACTOR: int = 0 ARQ_TRANSMISSION_PERCENT: int = 0 +ARQ_SECONDS_UNTIL_FINISH: int = 0 ARQ_SPEED_LEVEL: int = 0 TOTAL_BYTES: int = 0 # set save to folder state for allowing downloading files to local file system From 756101ebe11da074c6063c1ab138e9af322d8b1c Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sat, 31 Dec 2022 12:59:10 +0100 Subject: [PATCH 06/10] first run with time left for gui --- gui/preload-main.js | 19 ++++++++++++++++++- gui/sock.js | 1 + gui/src/index.html | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gui/preload-main.js b/gui/preload-main.js index ab64178c..a3b43819 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -1589,7 +1589,24 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { var arq_bytes_per_minute_compressed = Math.round(arg.arq_bytes_per_minute * arg.arq_compression_factor); } document.getElementById("bytes_per_min_compressed").innerHTML = arq_bytes_per_minute_compressed; - + + // SET TIME LEFT UNTIL FINIHED + if (typeof(arg.arq_seconds_until_finish) == 'undefined') { + var time_left = 0; + } else { + var arq_seconds_until_finish = arg.arq_seconds_until_finish + var hours = Math.floor(arq_seconds_until_finish / 3600); + var minutes = Math.floor((arq_seconds_until_finish % 3600) / 60 ); + var seconds = arq_seconds_until_finish % 60; + + var time_left = "time left: ~ "+ minutes + "min" + " " + seconds + "s"; + + + } + console.log(time_left); + document.getElementById("transmission_timeleft").innerHTML = time_left; + + // SET SPEED LEVEL diff --git a/gui/sock.js b/gui/sock.js index 78018b93..0a928653 100644 --- a/gui/sock.js +++ b/gui/sock.js @@ -221,6 +221,7 @@ client.on('data', function(socketdata) { arq_rx_n_current_arq_frame: data['arq_rx_n_current_arq_frame'], arq_n_arq_frames_per_data_frame: data['arq_n_arq_frames_per_data_frame'], arq_bytes_per_minute: data['arq_bytes_per_minute'], + arq_seconds_until_finish: data['arq_seconds_until_finish'], arq_compression_factor: data['arq_compression_factor'], total_bytes: data['total_bytes'], arq_transmission_percent: data['arq_transmission_percent'], diff --git a/gui/src/index.html b/gui/src/index.html index c60467ae..533993b4 100644 --- a/gui/src/index.html +++ b/gui/src/index.html @@ -1100,6 +1100,7 @@
+

---

From bbb08ed7afa83179ca52bea3fe1b08a7b30e9e18 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sat, 31 Dec 2022 13:01:54 +0100 Subject: [PATCH 07/10] small code cleanup --- gui/preload-main.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/gui/preload-main.js b/gui/preload-main.js index a3b43819..087ada2b 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -1598,12 +1598,8 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { var hours = Math.floor(arq_seconds_until_finish / 3600); var minutes = Math.floor((arq_seconds_until_finish % 3600) / 60 ); var seconds = arq_seconds_until_finish % 60; - var time_left = "time left: ~ "+ minutes + "min" + " " + seconds + "s"; - - } - console.log(time_left); document.getElementById("transmission_timeleft").innerHTML = time_left; From 4c53cdc79b72ab982fb53493801b74b118ad49f3 Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sat, 31 Dec 2022 13:03:46 +0100 Subject: [PATCH 08/10] time adjustment if smaller 0 --- gui/preload-main.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gui/preload-main.js b/gui/preload-main.js index 087ada2b..1bc782bb 100644 --- a/gui/preload-main.js +++ b/gui/preload-main.js @@ -1598,6 +1598,16 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { var hours = Math.floor(arq_seconds_until_finish / 3600); var minutes = Math.floor((arq_seconds_until_finish % 3600) / 60 ); var seconds = arq_seconds_until_finish % 60; + + if(hours < 0) { + hours = 0; + } + if(minutes < 0) { + minutes = 0; + } + if(seconds < 0) { + seconds = 0; + } var time_left = "time left: ~ "+ minutes + "min" + " " + seconds + "s"; } document.getElementById("transmission_timeleft").innerHTML = time_left; @@ -1621,6 +1631,7 @@ ipcRenderer.on('action-update-tnc-state', (event, arg) => { if(arg.speed_level >= 4) { document.getElementById("speed_level").className = "bi bi-reception-4"; } + From 7831cdaa16bfbf76950e7318d7aaf27e09aff39e Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sat, 31 Dec 2022 13:16:10 +0100 Subject: [PATCH 09/10] some more fixes to time --- tnc/data_handler.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index 3f33c6cb..b47b7d91 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -846,8 +846,10 @@ class DATA: # transmittion duration duration = time.time() - self.rx_start_of_transmission - self.log.info("[TNC] ARQ | RX | DATA FRAME SUCCESSFULLY RECEIVED", nacks=self.frame_nack_counter,bytesperminute=static.ARQ_BYTES_PER_MINUTE, total_bytes=static.TOTAL_BYTES, duration=duration -) + self.calculate_transfer_rate_rx( + self.rx_start_of_transmission, len(static.RX_FRAME_BUFFER) + ) + self.log.info("[TNC] ARQ | RX | DATA FRAME SUCCESSFULLY RECEIVED", nacks=self.frame_nack_counter,bytesperminute=static.ARQ_BYTES_PER_MINUTE, total_bytes=static.TOTAL_BYTES, duration=duration) # Decompress the data frame data_frame_decompressed = lzma.decompress(data_frame) @@ -2782,7 +2784,7 @@ class DATA: static.ARQ_BYTES_PER_MINUTE = int( receivedbytes / (transmissiontime / 60) ) - static.ARQ_SECONDS_UNTIL_FINISH = int(((static.TOTAL_BYTES - receivedbytes) / static.ARQ_BYTES_PER_MINUTE) * 60) + static.ARQ_SECONDS_UNTIL_FINISH = int(((static.TOTAL_BYTES - receivedbytes) / (static.ARQ_BYTES_PER_MINUTE * static.ARQ_COMPRESSION_FACTOR)) * 60) else: static.ARQ_BITS_PER_SECOND = 0 @@ -2838,7 +2840,7 @@ class DATA: if sentbytes > 0: static.ARQ_BITS_PER_SECOND = int((sentbytes * 8) / transmissiontime) static.ARQ_BYTES_PER_MINUTE = int(sentbytes / (transmissiontime / 60)) - static.ARQ_SECONDS_UNTIL_FINISH = int(((tx_buffer_length - sentbytes) / static.ARQ_BYTES_PER_MINUTE) * 60 ) + static.ARQ_SECONDS_UNTIL_FINISH = int(((tx_buffer_length - sentbytes) / (static.ARQ_BYTES_PER_MINUTE* static.ARQ_COMPRESSION_FACTOR)) * 60 ) else: static.ARQ_BITS_PER_SECOND = 0 static.ARQ_BYTES_PER_MINUTE = 0 From bdc407aff9a85eeb60af8917282c5d14129443aa Mon Sep 17 00:00:00 2001 From: dj2ls Date: Sat, 31 Dec 2022 13:22:34 +0100 Subject: [PATCH 10/10] some more fixes to time --- tnc/data_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tnc/data_handler.py b/tnc/data_handler.py index b47b7d91..e338884d 100644 --- a/tnc/data_handler.py +++ b/tnc/data_handler.py @@ -2784,7 +2784,7 @@ class DATA: static.ARQ_BYTES_PER_MINUTE = int( receivedbytes / (transmissiontime / 60) ) - static.ARQ_SECONDS_UNTIL_FINISH = int(((static.TOTAL_BYTES - receivedbytes) / (static.ARQ_BYTES_PER_MINUTE * static.ARQ_COMPRESSION_FACTOR)) * 60) + static.ARQ_SECONDS_UNTIL_FINISH = int(((static.TOTAL_BYTES - receivedbytes) / (static.ARQ_BYTES_PER_MINUTE * static.ARQ_COMPRESSION_FACTOR)) * 60) -20 # offset because of frame ack/nack else: static.ARQ_BITS_PER_SECOND = 0