diff --git a/main.py b/main.py index c29cb454..ab5a1fa7 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,7 @@ Created on Tue Dec 22 16:58:45 2020 import socketserver import threading import argparse +import logging import tnc import static @@ -32,14 +33,21 @@ static.AUDIO_OUTPUT_DEVICE = args.audio_output_device static.PORT = args.socket_port +#-------------------------------------------- DEFINE LOGGER +logger = logging.getLogger() +logger.setLevel("INFO") #DEBUG>INFO>WARNING>ERROR>CRITICAL + + + #--------------------------------------------START AUDIO THREAD +logging.info("STARTING AUDIO THREAD") static.MODEM_RECEIVE = True audio_receiver_thread = threading.Thread(target=modem.Receive, name="Audio Listener") audio_receiver_thread.start() #--------------------------------------------START SERVER -print(static.PORT) +logging.info("STARTING TCP/IP SOCKET ON PORT " + str(static.PORT)) try: server = socketserver.TCPServer((static.HOST, static.PORT), tnc.TCPRequestHandler) server.serve_forever() diff --git a/modem.py b/modem.py index 4fc9af93..2ea0c5c7 100644 --- a/modem.py +++ b/modem.py @@ -12,6 +12,7 @@ import pathlib import pyaudio import audioop import sys +import logging import static @@ -21,8 +22,7 @@ class RF(): def __init__(self): - - + self.p = pyaudio.PyAudio() self.defaultFrames = static.DEFAULT_FRAMES self.audio_input_device = static.AUDIO_INPUT_DEVICE @@ -37,17 +37,12 @@ class RF(): self.stream = None - - - - - self.data_input = "stdin" + #self.data_input = "stdin" self.data_input = "audio" - self.data_output = "stdout" + #self.data_output = "stdout" self.data_output = "audio" - libname = pathlib.Path().absolute() / "codec2/build_linux/src/libcodec2.so" self.c_lib = ctypes.CDLL(libname) @@ -65,11 +60,6 @@ class RF(): - - - - - # MODULATION-OUT OBJECT def ModulationOut(self): @@ -116,7 +106,7 @@ class RF(): sys.stdout.flush() # flushing stdout if self.data_output == "audio": - print(self.audio_channels) + #print(self.audio_channels) stream_tx = self.p.open(format=self.format, channels=self.audio_channels, rate=self.audio_sample_rate, @@ -177,19 +167,20 @@ class RF(): # CHECK IF FRAME CONTAINS ACK------------------------ if bytes(bytes_out[:6]) == b'REQACK': - print("REQACK FRAME ERKANNT!!!!") - print("ADD TO SEND BUFFER") + + logging.info("RX | ACK REQUESTED!") time.sleep(5) - print("SEND ACK FRAME") + logging.info("TX | SENDING ACK FRAME") self.Transmit(b'ACK') #---------------------------------------------------- # CHECK IF FRAME CONTAINS ACK------------------------ if bytes(bytes_out[:3]) == b'ACK': - print("ACK FRAME ERKANNT!!!!") - static.ACK_TIMEOUT = 1 - static.ACK_RECEIVED = 1 - static.TX_RETRIES = 3 + + logging.info("TX | ACK RCVD!") + static.ACK_TIMEOUT = 1 #Force timer to stop waiting + static.ACK_RECEIVED = 1 #Force data loops of TNC to stop and continue with next frame + #---------------------------------------------------- #return bytes(bytes_out[:-2]) diff --git a/tnc.py b/tnc.py index 75903c77..b69cffde 100644 --- a/tnc.py +++ b/tnc.py @@ -4,14 +4,18 @@ import socketserver import threading +import logging + import modem import static #from other import * import other + modem = modem.RF() + class TCPRequestHandler(socketserver.BaseRequestHandler): def handle(self): @@ -25,11 +29,11 @@ class TCPRequestHandler(socketserver.BaseRequestHandler): # static.MODEM_RECEIVE = False - print("{} wrote:".format(self.client_address[0])) - print(self.data) + ####print("{} wrote:".format(self.client_address[0])) + ####print(self.data) # just send back the same data, but upper-cased - self.request.sendall(self.data.upper()) + #####self.request.sendall(self.data.upper()) #if self.data == b'TEST': #logging.info("DER TEST KLAPPT! HIER KOMMT DER COMMAND PARSER HIN!") @@ -38,13 +42,13 @@ class TCPRequestHandler(socketserver.BaseRequestHandler): if self.data.startswith(b'BC:'): static.MODEM_RECEIVE = True ####### FALSE.... - print(static.MODEM_RECEIVE) + #print(static.MODEM_RECEIVE) data = self.data.split(b'BC:') daten = modem.Transmit(data[1]) static.MODEM_RECEIVE = True - print(static.MODEM_RECEIVE) + #print(static.MODEM_RECEIVE) @@ -52,7 +56,7 @@ class TCPRequestHandler(socketserver.BaseRequestHandler): if self.data.startswith(b'ACK:'): static.MODEM_RECEIVE = True ############## FALSE - print(static.MODEM_RECEIVE) + #print(static.MODEM_RECEIVE) data = self.data.split(b'ACK:') data_out = data[1] @@ -60,22 +64,21 @@ class TCPRequestHandler(socketserver.BaseRequestHandler): static.TX_BUFFER = [data_out[i:i+24] for i in range(0, len(data_out), 24)] # split incomming bytes to size of 30bytes, create a list and loop through it static.TX_BUFFER_SIZE = len(static.TX_BUFFER) + logging.info("TX | TOTAL PAYLOAD BYTES/FRAMES TO SEND: " + str(len(data_out)) + " / " + str(static.TX_BUFFER_SIZE)) for frame in range(static.TX_BUFFER_SIZE): # LOOP THROUGH DATA LIST #--------------------------------------------- BUILD DATA PACKET ack = b'REQACK' data_to_transmit = ack + static.TX_BUFFER[frame] - - - print(len(data_to_transmit)) - print(data_to_transmit) + + logging.info("TX | SENDING FRAME " + str(frame+1) + " / " + str(static.TX_BUFFER_SIZE)) #--------------------------------------------------------------- - #static.TX_N_RETRIES = 1 + #--------------------------------------------- ATTEMPTS TO SEND A MESSAGE IF ACK FAILS for static.TX_N_RETRIES in range(static.TX_N_MAX_RETRIES): - #print("RETRY: " + str(static.TX_N_RETRIES)) - #print("SENDING") + + # --------------------------- SEND FRAME static.ACK_RECEIVED = 0 daten = modem.Transmit(data_to_transmit) @@ -85,7 +88,8 @@ class TCPRequestHandler(socketserver.BaseRequestHandler): timer.start() # --------------------------- WHILE TIMEOUT NOT REACHED AND NO ACK RECEIVED --> LISTEN - print("WAITING FOR ACK") + logging.info("TX | WAITING FOR ACK") + while static.ACK_TIMEOUT == 0 and static.ACK_RECEIVED == 0: static.MODEM_RECEIVE = True @@ -99,6 +103,7 @@ class TCPRequestHandler(socketserver.BaseRequestHandler): if frame == static.TX_BUFFER_SIZE: break - print("NO MORE FRAMES IN TX QUEUE!") + logging.info("TX | BUFFER EMPTY") + \ No newline at end of file