From d361750293bda45101051904ff295891403dda01 Mon Sep 17 00:00:00 2001 From: DJ2LS <75909252+DJ2LS@users.noreply.github.com> Date: Wed, 10 Mar 2021 11:26:15 +0100 Subject: [PATCH] fall back to threading --> asyncio causes probs --- data_handler.py | 20 +++++++++++++------- modem.py | 2 +- sock.py | 5 ++++- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/data_handler.py b/data_handler.py index 5d30174a..0a02dd6d 100644 --- a/data_handler.py +++ b/data_handler.py @@ -11,7 +11,7 @@ import threading import time from random import randrange import asyncio -import trio +#import trio import static import modem @@ -19,7 +19,7 @@ modem = modem.RF() import helpers - +import sys ############################################################################################################# # ARQ DATA HANDLER @@ -227,7 +227,7 @@ def arq_data_received(data_in): logging.info("DATA ["+ str(static.MYCALLSIGN, 'utf-8') + "]<< >>["+ str(static.DXCALLSIGN, 'utf-8') + "] [BER."+str(static.BER)+"]") -async def arq_transmit(data_out): +def arq_transmit(data_out): # we need to set payload per frame manually at this point. maybe we can do this more dynmic. if static.ARQ_DATA_CHANNEL_MODE == 10: payload_per_frame = 512-2 @@ -295,7 +295,8 @@ async def arq_transmit(data_out): #TRANSMIT_ARQ_BURST_THREAD = threading.Thread(target=modem.transmit_arq_burst, name="TRANSMIT_ARQ_BURST") #TRANSMIT_ARQ_BURST_THREAD.start() #asyncio.run(modem.transmit_arq_burst()) - await modem.transmit_arq_burst() + #await modem.transmit_arq_burst() + modem.transmit_arq_burst() # lets wait during sending. After sending is finished we will continue while static.CHANNEL_STATE == 'SENDING_DATA': time.sleep(0.01) @@ -344,7 +345,8 @@ async def arq_transmit(data_out): #TRANSMIT_ARQ_BURST_THREAD = threading.Thread(target=modem.transmit_arq_burst, name="TRANSMIT_ARQ_BURST") #TRANSMIT_ARQ_BURST_THREAD.start() #asyncio.run(modem.transmit_arq_burst()) - await modem.transmit_arq_burst() + #await modem.transmit_arq_burst() + modem.transmit_arq_burst() # lets wait during sending. After sending is finished we will continue while static.ARQ_STATE == 'SENDING_DATA': time.sleep(0.01) @@ -463,10 +465,14 @@ async def arq_transmit(data_out): logging.info("ARQ | TX | BUFFER EMPTY") helpers.arq_reset_frame_machine() - await asyncio.sleep(2) + #await asyncio.sleep(2) + time.sleep(2) logging.info("DATA ["+ str(static.MYCALLSIGN, 'utf-8') + "]<< >>["+ str(static.DXCALLSIGN, 'utf-8') + "] [BER."+str(static.BER)+"]") arq_transmit_keep_alive() - + + # this should close our thread so we are saving memory... + #https://stackoverflow.com/questions/905189/why-does-sys-exit-not-exit-when-called-inside-a-thread-in-python + sys.exit() # BURST MACHINE TO DEFINE N BURSTS PER FRAME ---> LATER WE CAN USE CHANNEL MESSUREMENT TO SET FRAMES PER BURST diff --git a/modem.py b/modem.py index 2213310b..a86ca0cc 100644 --- a/modem.py +++ b/modem.py @@ -176,7 +176,7 @@ class RF(): #time.sleep(0.5) #-------------------------------------------------------------------------------------------------------- # GET ARQ BURST FRAME VOM BUFFER AND MODULATE IT - async def transmit_arq_burst(self): + def transmit_arq_burst(self): self.my_rig.set_ptt(self.hamlib_ptt_type,1) static.PTT_STATE = True diff --git a/sock.py b/sock.py index d0ba626b..a02d5bc2 100644 --- a/sock.py +++ b/sock.py @@ -96,6 +96,7 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): #ARQ_DISCONNECT_THREAD = threading.Thread(target=data_handler.arq_disconnect, name="ARQ_DISCONNECT") #ARQ_DISCONNECT_THREAD.start() asyncio.run(data_handler.arq_disconnect()) + ########self.request.sendall(bytes("DISCONNECTING", encoding)) #data_handler.arq_disconnect() @@ -114,8 +115,10 @@ class CMDTCPRequestHandler(socketserver.BaseRequestHandler): static.TNC_STATE = 'BUSY' arqdata = data.split('ARQ:') data_out = bytes(arqdata[1], 'utf-8') - asyncio.run(data_handler.arq_transmit(data_out)) + ARQ_DATA_THREAD = threading.Thread(target=data_handler.arq_transmit, args=[data_out], name="ARQ_DATA") + ARQ_DATA_THREAD.start() + #asyncio.run(data_handler.arq_transmit(data_out)) # SETTINGS AND STATUS --------------------------------------------- if data.startswith('SET:MYCALLSIGN:'):