summaryrefslogtreecommitdiff
path: root/test/web/serial.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/web/serial.py')
-rw-r--r--test/web/serial.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/web/serial.py b/test/web/serial.py
new file mode 100644
index 0000000..83833a4
--- /dev/null
+++ b/test/web/serial.py
@@ -0,0 +1,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:]