#! /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())