pico-sdr/util/bridge.py

59 lines
1.4 KiB
Python
Executable file

#!/usr/bin/env python
import time
from codecs import encode
from socket import AF_INET, SO_SNDBUF, SOCK_STREAM, SOL_SOCKET, socket
import click
import serial
@click.command()
@click.option("-f", "--frequency", default=40680000, help="Frequency to tune to")
@click.option("--rx", default=10, help="Receive pin")
@click.option("--bias", default=11, help="Bias pin")
def bridge(frequency, rx, bias):
sock = socket(AF_INET, SOCK_STREAM)
sock.setsockopt(SOL_SOCKET, SO_SNDBUF, 1024 * 100)
with serial.Serial("/dev/ttyACM0", baudrate=10_000_000) as fp:
print("Resetting...")
fp.write(b"\r\n")
time.sleep(0.1)
while fp.in_waiting:
fp.read(fp.in_waiting)
time.sleep(0.1)
print("Connecting to localhost:1234...")
sock.connect(("localhost", 1234))
print(f"Starting RX {rx}/{bias} at {frequency}...")
fp.write(f"brx {rx} {bias} {frequency}\r\n".encode("ascii"))
fp.read_until(b"$")
try:
while True:
bstr = fp.read(64)
assert len(bstr) == 64
try:
assert len(bstr) == sock.send(bstr)
except ConnectionRefusedError:
pass
except ConnectionError:
pass
except KeyboardInterrupt:
pass
finally:
fp.write(b"\r\n")
print("Bye.")
if __name__ == "__main__":
bridge()