From a1d2d752d4771941b015450ba14f36d35c72497b Mon Sep 17 00:00:00 2001 From: DJ2LS <75909252+DJ2LS@users.noreply.github.com> Date: Fri, 19 Mar 2021 11:16:24 +0100 Subject: [PATCH] added frames per burst selector --- data_handler.py | 30 +++++++++++++++++++++++------- sock.py | 6 +++++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/data_handler.py b/data_handler.py index 44be84ed..e6995344 100644 --- a/data_handler.py +++ b/data_handler.py @@ -269,7 +269,7 @@ def arq_transmit(data_out): static.ARQ_N_SENT_FRAMES = 0 # SET N SENT FRAMES TO 0 FOR A NEW SENDING CYCLE while static.ARQ_N_SENT_FRAMES <= static.TX_BUFFER_SIZE: - static.ARQ_TX_N_FRAMES_PER_BURST = get_n_frames_per_burst() + #static.ARQ_TX_N_FRAMES_PER_BURST = get_n_frames_per_burst() # ----------- CREATE FRAME TOTAL PAYLOAD TO BE ABLE TO CREATE CRC FOR IT try: # DETECT IF LAST BURST TO PREVENT INDEX ERROR OF BUFFER @@ -411,7 +411,7 @@ def arq_transmit(data_out): logging.log(25, "ARQ | RX | FRAME ACK RECEIVED - DATA TRANSMITTED! :-)") break - elif not static.ARQ_FRAME_ACK_RECEIVED: # == False and static.ARQ_RX_FRAME_TIMEOUT == True: + elif not static.ARQ_FRAME_ACK_RECEIVED and time.time() > frameacktimeout: # == False and static.ARQ_RX_FRAME_TIMEOUT == True: logging.error("ARQ | TX | NO FRAME ACK RECEIVED") break @@ -437,7 +437,7 @@ def arq_transmit(data_out): # BURST MACHINE TO DEFINE N BURSTS PER FRAME ---> LATER WE CAN USE CHANNEL MESSUREMENT TO SET FRAMES PER BURST def get_n_frames_per_burst(): #n_frames_per_burst = randrange(1,10) - n_frames_per_burst = 1 + n_frames_per_burst = 2 return n_frames_per_burst @@ -475,19 +475,35 @@ def burst_rpt_received(data_in): # ############################################################################################################ -def open_dc_and_transmit(data_out): +def open_dc_and_transmit(data_out, mode, n_frames): if not static.ARQ_READY_FOR_DATA: - asyncio.run(arq_open_data_channel()) + + + if n_frames != 0: + static.ARQ_TX_N_FRAMES_PER_BURST = int(n_frames) + + else: + static.ARQ_TX_N_FRAMES_PER_BURST = get_n_frames_per_burst() + + + asyncio.run(arq_open_data_channel(mode)) # wait until data channel is open while not static.ARQ_READY_FOR_DATA: time.sleep(0.01) # transmit data arq_transmit(data_out) + -async def arq_open_data_channel(): - static.ARQ_DATA_CHANNEL_MODE = get_best_mode_for_transmission() +async def arq_open_data_channel(mode): + print(type(mode)) + if mode == 0: + static.ARQ_DATA_CHANNEL_MODE = get_best_mode_for_transmission() + print(static.ARQ_DATA_CHANNEL_MODE) + else: + static.ARQ_DATA_CHANNEL_MODE = int(mode) + static.ARQ_DATA_CHANNEL_LAST_RECEIVED = int(time.time()) while static.CHANNEL_STATE == 'SENDING_SIGNALLING': diff --git a/sock.py b/sock.py index d1c45882..609e2e23 100644 --- a/sock.py +++ b/sock.py @@ -118,10 +118,14 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): data_out = bytes(received_json["data"], 'utf-8') + mode = int(received_json["mode"]) + + n_frames = int(received_json["n_frames"]) + #ARQ_DATA_THREAD = threading.Thread(target=data_handler.arq_transmit, args=[data_out], name="ARQ_DATA") #ARQ_DATA_THREAD.start() - ARQ_DATA_THREAD = threading.Thread(target=data_handler.open_dc_and_transmit, args=[data_out], name="ARQ_DATA") + ARQ_DATA_THREAD = threading.Thread(target=data_handler.open_dc_and_transmit, args=[data_out, mode, n_frames], name="ARQ_DATA") ARQ_DATA_THREAD.start() # asyncio.run(data_handler.arq_transmit(data_out))