websocket2minitel.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #!/usr/bin/env python3
  2. import serial
  3. import asyncio
  4. import websockets
  5. import sys
  6. ser = None # serial connection
  7. ws = None # websocket connection
  8. async def bridge(url, tty, speed):
  9. "Initializes connection to websocket and local serial port"
  10. global ser, ws
  11. ser = serial.Serial(tty, speed, parity=serial.PARITY_EVEN,
  12. bytesize=7, timeout=1,stopbits=serial.STOPBITS_ONE,
  13. xonxoff=False,rtscts=False)
  14. ws = await websockets.connect(url)
  15. ser.write(b'\x07\x0c\x1f\x40\x41connexion\x0a')
  16. # cancel local echo (keyboard > modem > screen)
  17. ser.write(b'\x1b\x3b\x60\x58\x52')
  18. async def w2m():
  19. "websocket > minitel"
  20. while (True):
  21. data = await ws.recv()
  22. ser.write(data.encode())
  23. async def m2w():
  24. "websocket < minitel"
  25. while (True):
  26. if ser.inWaiting() > 0:
  27. tosend = ser.read(ser.inWaiting()).decode()
  28. await ws.send(tosend)
  29. else:
  30. await asyncio.sleep(0.1)
  31. if __name__ == '__main__':
  32. loop = asyncio.get_event_loop()
  33. loop.run_until_complete(bridge(sys.argv[1], sys.argv[2], sys.argv[3]))
  34. loop.run_until_complete(asyncio.gather(w2m(), m2w()))