first tnc gui test

This commit is contained in:
DJ2LS 2021-03-07 21:25:07 +01:00 committed by GitHub
parent a5c5d0f61c
commit ec6d5a2083
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

106
tools/tnc_gui/tnc_gui.py Normal file
View file

@ -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()