#!/usr/bin/env python3
"""
测试 DTR/RTS 对 radio_test 命令响应的影响
"""
import serial
import time

PORT = "/dev/cu.usbmodem1302"
BAUD = 921600
CMD = b"radio_test 4 1\r"


def test_with_dtr_rts(dtr: bool, rts: bool, name: str):
    print(f"\n{'='*60}")
    print(f"测试: {name} (DTR={dtr}, RTS={rts})")
    print(f"{'='*60}")

    try:
        with serial.Serial(
            port=PORT,
            baudrate=BAUD,
            bytesize=serial.EIGHTBITS,
            parity=serial.PARITY_NONE,
            stopbits=serial.STOPBITS_ONE,
            rtscts=False,
            dsrdtr=False,
            xonxoff=False,
            timeout=0.05,
        ) as ser:
            ser.dtr = dtr
            ser.rts = rts
            time.sleep(0.2)

            ser.reset_input_buffer()
            ser.reset_output_buffer()
            time.sleep(0.2)

            print(f"发送: {CMD!r}")
            ser.write(CMD)
            ser.flush()

            data = b""
            deadline = time.time() + 3.0
            while time.time() < deadline:
                rx = ser.read(ser.in_waiting or 1)
                if rx:
                    data += rx
                else:
                    time.sleep(0.02)

            print(f"收到 {len(data)} bytes")
            print(f"ASCII: {data[:400]!r}")

            text = data.decode("utf-8", errors="ignore").lower()
            if "ams" in text or "radio" in text or "freq" in text:
                print(">>> 可能包含 AMS 相关返回")
            if "command" in text:
                print(">>> 包含 command 字样")

    except Exception as e:
        print(f"错误: {e}")


def main():
    print(f"目标串口: {PORT}")

    # 不同 DTR/RTS 组合
    test_with_dtr_rts(False, False, "DTR=0, RTS=0")
    test_with_dtr_rts(True, True, "DTR=1, RTS=1")
    test_with_dtr_rts(True, False, "DTR=1, RTS=0")
    test_with_dtr_rts(False, True, "DTR=0, RTS=1")

    print("\n测试完成")


if __name__ == "__main__":
    main()
