| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #!/usr/bin/env python3
- import serial
- import asyncio
- import websockets
- import sys
- ser = None # serial connection
- ws = None # websocket connection
- async def bridge(url, tty, speed):
- "Initializes connection to websocket and local serial port"
- global ser, ws
- ser = serial.Serial(tty, speed, parity=serial.PARITY_EVEN,
- bytesize=7, timeout=1,stopbits=serial.STOPBITS_ONE,
- xonxoff=False,rtscts=False)
- ws = await websockets.connect(url, ping_interval=None)
- ser.write(b'\x07\x0c\x1f\x40\x41connexion\x0a')
- # cancel local echo (keyboard > modem > screen)
- ser.write(b'\x1b\x3b\x60\x58\x52')
- async def w2m():
- "websocket > minitel"
- while (True):
- #data = await ws.recv()
- try:
- data = await ws.recv()
- except websockets.exceptions.ConnectionClosedError:
- print("Connection closed by remote host.")
- exit(-1)
- except websockets.exceptions.ConnectionClosedOK:
- exit(0)
- ser.write(data.encode())
- async def m2w():
- "websocket < minitel"
- while (True):
- if ser.inWaiting() > 0:
- tosend = ser.read(ser.inWaiting()).decode()
- await ws.send(tosend)
- else:
- await asyncio.sleep(0.1)
- if __name__ == '__main__':
- loop = asyncio.get_event_loop()
- loop.run_until_complete(bridge(sys.argv[1], sys.argv[2], sys.argv[3]))
- loop.run_until_complete(asyncio.gather(w2m(), m2w()))
|