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