From 008e5ff1b7d8ee9b31d5c5a59b6a19a878b699f0 Mon Sep 17 00:00:00 2001 From: Neil Gershenfeld <gersh@cba.mit.edu> Date: Fri, 17 Jan 2020 21:50:21 +0530 Subject: [PATCH] working on serialserver.py --- py/serialserver.py | 153 +++++++++++++++++---------------------------- 1 file changed, 59 insertions(+), 94 deletions(-) diff --git a/py/serialserver.py b/py/serialserver.py index 9e2874d..92b74e0 100755 --- a/py/serialserver.py +++ b/py/serialserver.py @@ -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() -""" - -- GitLab