1
ewconfig/scripts/kxlisten
2023-11-30 18:37:20 -05:00

63 lines
1.7 KiB
Python
Executable File

#! /usr/bin/env python3
import argparse
import sys
import logging
import serial
logger = logging.getLogger(__name__)
def main() -> int:
# Handle program arguments
ap = argparse.ArgumentParser(
prog="kxlisten", description="Route inbound CW text to STDOUT"
)
ap.add_argument("--stop", help="Stop listening", action="store_true")
ap.add_argument("--device", "-d", help="Serial device", default="/dev/ttyUSB0")
ap.add_argument("--baud", "-b", help="Serial baud rate", default=38400, type=int)
ap.add_argument(
"-v", "--verbose", help="Enable verbose logging", action="store_true"
)
args = ap.parse_args()
# Configure logging
logging.basicConfig(
level=logging.DEBUG if args.verbose else logging.INFO,
format="%(levelname)s: %(message)s",
stream=sys.stderr,
)
# Connect to the radio
logger.debug(f"Connecting to radio: {args.device}")
serial_conn = serial.Serial(args.device, args.baud)
# Handle stopping
if args.stop:
cmd = "TT0;"
logger.debug(f"Sending command: {cmd}")
serial_conn.write(cmd.encode("ascii"))
return 0
# Otherwise, start listening
cmd = "TT1;"
logger.debug(f"Sending command: {cmd}")
serial_conn.write(cmd.encode("ascii"))
# Listen for text
try:
while True:
next_char = serial_conn.read().decode("ascii")
print(next_char, end="")
sys.stdout.flush()
except KeyboardInterrupt:
logger.info("Stopping")
cmd = "TT0;"
logger.debug(f"Sending command: {cmd}")
serial_conn.write(cmd.encode("ascii"))
return 0
if __name__ == "__main__":
sys.exit(main())