summaryrefslogtreecommitdiff
path: root/test/web/serial.py
blob: 83833a4bb80fa4e8416d433405be70efec459650 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
"""Raw PTY to local reference server: exercise a UART-like byte stream."""
import os
import pty
import select
import socket
import sys
import tty

master, slave = pty.openpty()
tty.setraw(slave)
host, port = sys.argv[1].split(":")
peer = socket.create_connection((host, int(port)))
print(os.ttyname(slave), flush=True)
while True:
    ready, _, _ = select.select([master, peer], [], [])
    for source in ready:
        data = os.read(master, 19) if source == master else peer.recv(23)
        if not data:
            sys.exit(0)
        if source == master:
            peer.sendall(data)
        else:
            while data:
                written = os.write(master, data)
                data = data[written:]