From ec6d5a2083ef124889ce76eb293ce86a38cff9a4 Mon Sep 17 00:00:00 2001 From: DJ2LS <75909252+DJ2LS@users.noreply.github.com> Date: Sun, 7 Mar 2021 21:25:07 +0100 Subject: [PATCH] first tnc gui test --- tools/tnc_gui/tnc_gui.py | 106 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tools/tnc_gui/tnc_gui.py diff --git a/tools/tnc_gui/tnc_gui.py b/tools/tnc_gui/tnc_gui.py new file mode 100644 index 00000000..1786a2ce --- /dev/null +++ b/tools/tnc_gui/tnc_gui.py @@ -0,0 +1,106 @@ +import socket +import random +import threading +import time +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk + +def create_string(length): + random_string = '' + for _ in range(length): + # Considering only upper and lowercase letters + random_integer = random.randint(97, 97 + 26 - 1) + flip_bit = random.randint(0, 1) + # Convert to lowercase if the flip bit is on + random_integer = random_integer - 32 if flip_bit == 1 else random_integer + # Keep appending random characters using chr(x) + random_string += (chr(random_integer)) + #print("STR:" + str(random_string)) + + return random_string + + +def send_command(command): + + #ip, port = builder.get_object('host').get_text(), int(builder.get_object('port').get_text()) + + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + sock.connect((ip, port)) + if isinstance(command, str): + command = bytes(command, 'utf-8') + + sock.sendall(command + b'\n') + response = str(sock.recv(1024), 'utf-8') + +def get_arq_state(): + while True: + time.sleep(0.04) + command = bytes('GET:ARQ_STATE', 'utf-8') + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + sock.connect((ip, port)) + time.sleep(0.01) + sock.sendall(command + b'\n') + received = str(sock.recv(1024), "utf-8") + print(received) + builder.get_object('arq_state').set_text(received) + +def get_channel_state(): + while True: + time.sleep(0.04) + command = bytes('GET:CHANNEL_STATE', 'utf-8') + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + sock.connect((ip, port)) + time.sleep(0.01) + sock.sendall(command + b'\n') + received = str(sock.recv(1024), "utf-8") + print(received) + builder.get_object('channel_state').set_text(received) + + +class Handler: + def onDestroy(self, *args): + Gtk.main_quit() + + def setCallsign(self, button): + call = builder.get_object('callsign').get_text() + send_command('SET:MYCALLSIGN:' + call) + + def ping(self, button): + call = builder.get_object('callsign').get_text() + send_command('PING:' + call) + + def connect(self, button): + call = builder.get_object('callsign').get_text() + send_command('ARQ:CONNECT:' + call) + + def disconnect(self, button): + send_command('ARQ:DISCONNECT') + + def send_arq_data(self, button): + datalength = int(builder.get_object('arqbytes').get_text()) + data = create_string(datalength) + data = bytes("ARQ:DATA:" + data, 'utf-8') + send_command(data) + + def send_cq(self, button): + send_command('CQCQCQ') + +builder = Gtk.Builder() +builder.add_from_file("tnc_gui.glade") +builder.connect_signals(Handler()) + +window = builder.get_object("main_window") +window.show_all() + +ip, port = builder.get_object('host').get_text(), int(builder.get_object('port').get_text()) + +GET_ARQ_STATE_THREAD = threading.Thread(target=get_arq_state, name="FREEDV_DECODER_THREAD") +GET_ARQ_STATE_THREAD.start() + +GET_CHANNEL_STATE_THREAD = threading.Thread(target=get_channel_state, name="FREEDV_DECODER_THREAD") +GET_CHANNEL_STATE_THREAD.start() + + +Gtk.main() +