mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
improved logging
This commit is contained in:
parent
88c883f85b
commit
9a964b77f0
3 changed files with 42 additions and 38 deletions
10
main.py
10
main.py
|
@ -10,6 +10,7 @@ Created on Tue Dec 22 16:58:45 2020
|
||||||
import socketserver
|
import socketserver
|
||||||
import threading
|
import threading
|
||||||
import argparse
|
import argparse
|
||||||
|
import logging
|
||||||
|
|
||||||
import tnc
|
import tnc
|
||||||
import static
|
import static
|
||||||
|
@ -32,14 +33,21 @@ static.AUDIO_OUTPUT_DEVICE = args.audio_output_device
|
||||||
static.PORT = args.socket_port
|
static.PORT = args.socket_port
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------- DEFINE LOGGER
|
||||||
|
logger = logging.getLogger()
|
||||||
|
logger.setLevel("INFO") #DEBUG>INFO>WARNING>ERROR>CRITICAL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------START AUDIO THREAD
|
#--------------------------------------------START AUDIO THREAD
|
||||||
|
logging.info("STARTING AUDIO THREAD")
|
||||||
static.MODEM_RECEIVE = True
|
static.MODEM_RECEIVE = True
|
||||||
audio_receiver_thread = threading.Thread(target=modem.Receive, name="Audio Listener")
|
audio_receiver_thread = threading.Thread(target=modem.Receive, name="Audio Listener")
|
||||||
audio_receiver_thread.start()
|
audio_receiver_thread.start()
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------START SERVER
|
#--------------------------------------------START SERVER
|
||||||
print(static.PORT)
|
logging.info("STARTING TCP/IP SOCKET ON PORT " + str(static.PORT))
|
||||||
try:
|
try:
|
||||||
server = socketserver.TCPServer((static.HOST, static.PORT), tnc.TCPRequestHandler)
|
server = socketserver.TCPServer((static.HOST, static.PORT), tnc.TCPRequestHandler)
|
||||||
server.serve_forever()
|
server.serve_forever()
|
||||||
|
|
33
modem.py
33
modem.py
|
@ -12,6 +12,7 @@ import pathlib
|
||||||
import pyaudio
|
import pyaudio
|
||||||
import audioop
|
import audioop
|
||||||
import sys
|
import sys
|
||||||
|
import logging
|
||||||
|
|
||||||
import static
|
import static
|
||||||
|
|
||||||
|
@ -22,7 +23,6 @@ class RF():
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.p = pyaudio.PyAudio()
|
self.p = pyaudio.PyAudio()
|
||||||
self.defaultFrames = static.DEFAULT_FRAMES
|
self.defaultFrames = static.DEFAULT_FRAMES
|
||||||
self.audio_input_device = static.AUDIO_INPUT_DEVICE
|
self.audio_input_device = static.AUDIO_INPUT_DEVICE
|
||||||
|
@ -37,17 +37,12 @@ class RF():
|
||||||
self.stream = None
|
self.stream = None
|
||||||
|
|
||||||
|
|
||||||
|
#self.data_input = "stdin"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.data_input = "stdin"
|
|
||||||
self.data_input = "audio"
|
self.data_input = "audio"
|
||||||
self.data_output = "stdout"
|
#self.data_output = "stdout"
|
||||||
self.data_output = "audio"
|
self.data_output = "audio"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
libname = pathlib.Path().absolute() / "codec2/build_linux/src/libcodec2.so"
|
libname = pathlib.Path().absolute() / "codec2/build_linux/src/libcodec2.so"
|
||||||
self.c_lib = ctypes.CDLL(libname)
|
self.c_lib = ctypes.CDLL(libname)
|
||||||
|
|
||||||
|
@ -66,11 +61,6 @@ class RF():
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# MODULATION-OUT OBJECT
|
# MODULATION-OUT OBJECT
|
||||||
def ModulationOut(self):
|
def ModulationOut(self):
|
||||||
return (c_short * self.n_tx_modem_samples)
|
return (c_short * self.n_tx_modem_samples)
|
||||||
|
@ -116,7 +106,7 @@ class RF():
|
||||||
sys.stdout.flush() # flushing stdout
|
sys.stdout.flush() # flushing stdout
|
||||||
|
|
||||||
if self.data_output == "audio":
|
if self.data_output == "audio":
|
||||||
print(self.audio_channels)
|
#print(self.audio_channels)
|
||||||
stream_tx = self.p.open(format=self.format,
|
stream_tx = self.p.open(format=self.format,
|
||||||
channels=self.audio_channels,
|
channels=self.audio_channels,
|
||||||
rate=self.audio_sample_rate,
|
rate=self.audio_sample_rate,
|
||||||
|
@ -177,19 +167,20 @@ class RF():
|
||||||
|
|
||||||
# CHECK IF FRAME CONTAINS ACK------------------------
|
# CHECK IF FRAME CONTAINS ACK------------------------
|
||||||
if bytes(bytes_out[:6]) == b'REQACK':
|
if bytes(bytes_out[:6]) == b'REQACK':
|
||||||
print("REQACK FRAME ERKANNT!!!!")
|
|
||||||
print("ADD TO SEND BUFFER")
|
logging.info("RX | ACK REQUESTED!")
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
print("SEND ACK FRAME")
|
logging.info("TX | SENDING ACK FRAME")
|
||||||
self.Transmit(b'ACK')
|
self.Transmit(b'ACK')
|
||||||
#----------------------------------------------------
|
#----------------------------------------------------
|
||||||
|
|
||||||
# CHECK IF FRAME CONTAINS ACK------------------------
|
# CHECK IF FRAME CONTAINS ACK------------------------
|
||||||
if bytes(bytes_out[:3]) == b'ACK':
|
if bytes(bytes_out[:3]) == b'ACK':
|
||||||
print("ACK FRAME ERKANNT!!!!")
|
|
||||||
static.ACK_TIMEOUT = 1
|
logging.info("TX | ACK RCVD!")
|
||||||
static.ACK_RECEIVED = 1
|
static.ACK_TIMEOUT = 1 #Force timer to stop waiting
|
||||||
static.TX_RETRIES = 3
|
static.ACK_RECEIVED = 1 #Force data loops of TNC to stop and continue with next frame
|
||||||
|
|
||||||
#----------------------------------------------------
|
#----------------------------------------------------
|
||||||
|
|
||||||
#return bytes(bytes_out[:-2])
|
#return bytes(bytes_out[:-2])
|
||||||
|
|
33
tnc.py
33
tnc.py
|
@ -4,14 +4,18 @@
|
||||||
|
|
||||||
import socketserver
|
import socketserver
|
||||||
import threading
|
import threading
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
import modem
|
import modem
|
||||||
import static
|
import static
|
||||||
#from other import *
|
#from other import *
|
||||||
import other
|
import other
|
||||||
|
|
||||||
modem = modem.RF()
|
modem = modem.RF()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TCPRequestHandler(socketserver.BaseRequestHandler):
|
class TCPRequestHandler(socketserver.BaseRequestHandler):
|
||||||
|
|
||||||
def handle(self):
|
def handle(self):
|
||||||
|
@ -25,11 +29,11 @@ class TCPRequestHandler(socketserver.BaseRequestHandler):
|
||||||
# static.MODEM_RECEIVE = False
|
# static.MODEM_RECEIVE = False
|
||||||
|
|
||||||
|
|
||||||
print("{} wrote:".format(self.client_address[0]))
|
####print("{} wrote:".format(self.client_address[0]))
|
||||||
print(self.data)
|
####print(self.data)
|
||||||
|
|
||||||
# just send back the same data, but upper-cased
|
# 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':
|
#if self.data == b'TEST':
|
||||||
#logging.info("DER TEST KLAPPT! HIER KOMMT DER COMMAND PARSER HIN!")
|
#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:'):
|
if self.data.startswith(b'BC:'):
|
||||||
static.MODEM_RECEIVE = True ####### FALSE....
|
static.MODEM_RECEIVE = True ####### FALSE....
|
||||||
print(static.MODEM_RECEIVE)
|
#print(static.MODEM_RECEIVE)
|
||||||
|
|
||||||
data = self.data.split(b'BC:')
|
data = self.data.split(b'BC:')
|
||||||
daten = modem.Transmit(data[1])
|
daten = modem.Transmit(data[1])
|
||||||
|
|
||||||
static.MODEM_RECEIVE = True
|
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:'):
|
if self.data.startswith(b'ACK:'):
|
||||||
static.MODEM_RECEIVE = True ############## FALSE
|
static.MODEM_RECEIVE = True ############## FALSE
|
||||||
print(static.MODEM_RECEIVE)
|
#print(static.MODEM_RECEIVE)
|
||||||
|
|
||||||
data = self.data.split(b'ACK:')
|
data = self.data.split(b'ACK:')
|
||||||
data_out = data[1]
|
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 = [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)
|
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
|
for frame in range(static.TX_BUFFER_SIZE): # LOOP THROUGH DATA LIST
|
||||||
|
|
||||||
#--------------------------------------------- BUILD DATA PACKET
|
#--------------------------------------------- BUILD DATA PACKET
|
||||||
ack = b'REQACK'
|
ack = b'REQACK'
|
||||||
data_to_transmit = ack + static.TX_BUFFER[frame]
|
data_to_transmit = ack + static.TX_BUFFER[frame]
|
||||||
|
|
||||||
|
logging.info("TX | SENDING FRAME " + str(frame+1) + " / " + str(static.TX_BUFFER_SIZE))
|
||||||
print(len(data_to_transmit))
|
|
||||||
print(data_to_transmit)
|
|
||||||
#---------------------------------------------------------------
|
#---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
#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):
|
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
|
static.ACK_RECEIVED = 0
|
||||||
daten = modem.Transmit(data_to_transmit)
|
daten = modem.Transmit(data_to_transmit)
|
||||||
|
|
||||||
|
@ -85,7 +88,8 @@ class TCPRequestHandler(socketserver.BaseRequestHandler):
|
||||||
timer.start()
|
timer.start()
|
||||||
|
|
||||||
# --------------------------- WHILE TIMEOUT NOT REACHED AND NO ACK RECEIVED --> LISTEN
|
# --------------------------- 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:
|
while static.ACK_TIMEOUT == 0 and static.ACK_RECEIVED == 0:
|
||||||
static.MODEM_RECEIVE = True
|
static.MODEM_RECEIVE = True
|
||||||
|
|
||||||
|
@ -99,6 +103,7 @@ class TCPRequestHandler(socketserver.BaseRequestHandler):
|
||||||
if frame == static.TX_BUFFER_SIZE:
|
if frame == static.TX_BUFFER_SIZE:
|
||||||
break
|
break
|
||||||
|
|
||||||
print("NO MORE FRAMES IN TX QUEUE!")
|
logging.info("TX | BUFFER EMPTY")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue