Skip to content
Snippets Groups Projects
Commit 008e5ff1 authored by Neil Gershenfeld's avatar Neil Gershenfeld
Browse files

working on serialserver.py

parent 31b892ae
Branches
No related tags found
No related merge requests found
......@@ -12,23 +12,69 @@
# as is; no warranty is provided, and users accept all
# liability.
#
import sys,serial,time,threading,os,time,asyncio,websockets
#from Tkinter import *
async def hello(websocket, path):
# imports
#
import sys,serial,asyncio,websockets,json
#
# command line
#
if (len(sys.argv) != 3):
print("command line: serialserver.py address port")
print(" address = client address")
print(" port = port")
sys.exit()
client = sys.argv[1]
port = int(sys.argv[2])
#
# WebSocket handler
#
async def receive(websocket,path):
while (1):
name = await websocket.recv()
print("< {}".format(name))
start_server = websockets.serve(hello, 'localhost', 1234)
msg = await websocket.recv()
address = websocket.remote_address[0]
if (address != client):
print("connection rejected from "+address)
continue
print("connection accepted from "+address)
vars = json.loads(msg)
if (vars['type'] == 'open'):
#
# open port
#
device = vars['device']
speed = int(vars['baud'])
flow = vars['flow']
print(f"open {device} at {speed} with {flow}")
try:
if (flow == "xonxoff"):
s = serial.Serial(
device,baudrate=speed,xonxoff=True, timeout=0)
elif (flow == "rtscts"):
s = serial.Serial(
device,baudrate=speed,rtscts=True, timeout=0)
elif (flow == "dsrdtr"):
s = serial.Serial(
device,baudrate=speed,dsrdtr=True, timeout=0)
elif (flow == "none"):
s = serial.Serial(
device,baudrate=speed,timeout=0)
s.flushInput()
s.flushOutput()
except serial.SerialException as err:
print(err)
await websocket.send(str(err))
elif (vars['type'] == 'command'):
print('command')
elif (vars['type'] == 'file'):
print('file')
#
# start server
#
start_server = websockets.serve(receive,'localhost',port)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
WINDOW = 400 # window size
RUN = 0
PAUSE = 1
state = RUN
"""
#
# send routine
#
......@@ -69,85 +115,4 @@ def send(canvas,data,s):
canvas.update()
s.close()
os._exit(0)
#
# pause routine
#
def pause():
global state
if (state == RUN):
state = PAUSE
pause_button.config(text="continue")
elif (state == PAUSE):
state = RUN
pause_button.config(text="pause")
#
# cancel routine
#
def cancel():
global s
s.close()
sys.exit()
#
# quit routine
#
def quit():
s.close()
sys.exit()
#
# command line
#
if (len(sys.argv) != 4):
print("command line: mod_serial.py port speed flow")
print(" port = serial port")
print(" speed = comm speed")
print(" flow = flow control (none | xonxoff | rtscts | dsrdtr )")
sys.exit()
port = sys.argv[1]
speed = sys.argv[2]
flow = sys.argv[3]
filename = sys.argv[4]
"""
#
# open file
#
f = open(filename)
data = f.read()
f.close()
#
# open port
#
if (flow == "xonxoff"):
s = serial.Serial(port, baudrate=speed, xonxoff=True, timeout=0)
elif (flow == "rtscts"):
s = serial.Serial(port, baudrate=speed, rtscts=True, timeout=0)
elif (flow == "dsrdtr"):
s = serial.Serial(port, baudrate=speed, dsrdtr=True, timeout=0)
elif (flow == "none"):
s = serial.Serial(port, baudrate=speed, timeout=0)
s.flushInput()
s.flushOutput()
#
# set up GUI
#
root = Tk()
root.title('mod_serial.py')
canvas = Canvas(root, width=WINDOW, height=.25*WINDOW, background='white')
canvas.create_text(.5*WINDOW,.1*WINDOW,text="",font=("Helvetica",24),tags="text",fill="#0000b0")
canvas.pack()
pause_button = Button(root,text="pause",command=pause)
pause_button.pack()
cancel_button = Button(root,text="cancel",command=cancel)
cancel_button.pack()
#
# start sending thread
#
tstart = time.time()
t = threading.Thread(target=send,args=(canvas,data,s))
t.start()
#
# start UI loop
#
root.mainloop()
"""
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment