fix: changed time out to 0.1. fixed infinite loop
This commit is contained in:
66
bridges/s3-bridge/s3_bridge.py
Normal file
66
bridges/s3-bridge/s3_bridge.py
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import serial
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import sys
|
||||||
|
|
||||||
|
REAL_PORT = "COM5" # MiniMate hardware
|
||||||
|
VIRTUAL_PORT = "COM4" # Bridge side of COM3<->COM4 pair
|
||||||
|
BAUD = 38400
|
||||||
|
|
||||||
|
|
||||||
|
def hex_dump(data):
|
||||||
|
return " ".join(f"{b:02X}" for b in data)
|
||||||
|
|
||||||
|
|
||||||
|
def forward(src, dst, label):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
data = src.read(1024) # blocking read
|
||||||
|
if data:
|
||||||
|
print(f"[{label}] {hex_dump(data)}")
|
||||||
|
dst.write(data)
|
||||||
|
except serial.SerialException as e:
|
||||||
|
print(f"[{label}] Serial error: {e}")
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[{label}] Unexpected error: {e}")
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("Opening ports...")
|
||||||
|
|
||||||
|
real = serial.Serial(
|
||||||
|
REAL_PORT,
|
||||||
|
BAUD,
|
||||||
|
timeout=0.1, # IMPORTANT: not zero
|
||||||
|
write_timeout=0.1
|
||||||
|
)
|
||||||
|
|
||||||
|
virt = serial.Serial(
|
||||||
|
VIRTUAL_PORT,
|
||||||
|
BAUD,
|
||||||
|
timeout=0.1,
|
||||||
|
write_timeout=0.1
|
||||||
|
)
|
||||||
|
|
||||||
|
print(f"Connected: {REAL_PORT} <-> {VIRTUAL_PORT}")
|
||||||
|
|
||||||
|
t1 = threading.Thread(target=forward, args=(virt, real, "BLASTWARE -> S3"), daemon=True)
|
||||||
|
t2 = threading.Thread(target=forward, args=(real, virt, "S3 -> BLASTWARE"), daemon=True)
|
||||||
|
|
||||||
|
t1.start()
|
||||||
|
t2.start()
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
time.sleep(1)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("Stopping bridge...")
|
||||||
|
real.close()
|
||||||
|
virt.close()
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user