#!/usr/bin/env python3
import os, termios, fcntl, select, time, array

port = '/dev/cu.usbmodem21302'

fd = os.open(port, os.O_RDWR | os.O_NOCTTY)
old = termios.tcgetattr(fd)
new = termios.tcgetattr(fd)
new[0] = 0
new[1] = 0
new[2] = termios.CS8 | termios.CREAD | termios.CLOCAL
new[3] = 0
new[6][termios.VMIN] = 0
new[6][termios.VTIME] = 1
new[4] = termios.B115200
new[5] = termios.B115200
termios.tcsetattr(fd, termios.TCSANOW, new)

fl = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, fl & ~os.O_NONBLOCK)

print("=" * 60)
print(" UART0 上电监听工具")
print("=" * 60)
print(f"监听串口: {port}")
print("请立即重新给车机上电（插电源/按电源键）")
print("监听 15 秒...")
print("-" * 60)

all_data = b''
start = time.time()
while time.time() - start < 15:
    ready, _, _ = select.select([fd], [], [], 0.05)
    if ready:
        try:
            chunk = os.read(fd, 4096)
            if chunk:
                all_data += chunk
                text = chunk.decode('utf-8', errors='replace')
                print(text, end='', flush=True)
        except:
            break

print("\n" + "-" * 60)
print("【结果】")

lower = all_data.lower()
if b'realtek>' in lower:
    print("✅ 发现 Realtek> 提示符！")
    print("   这是 UART0（升级串口）")
    print("   请直接输入: boot ru")
elif b'd/g/r>' in lower:
    print("✅ 发现 d/g/r> 提示符！")
    print("   这是空片烧录模式（UART0）")
elif len(all_data) == 0:
    print("❓ 15 秒内无任何数据")
    print("   可能原因：")
    print("   - 车机未上电或处于休眠")
    print("   - 这不是 UART0")
    print("   - 波特率不是 115200（可尝试修改脚本为 921600）")
else:
    print("⚠️  有数据但未发现 Realtek>")
    print(f"   总数据量: {len(all_data)} 字节")
    print("   可能情况：")
    print("   1. 这是二进制协议口（非 UART0）")
    print("   2. 波特率不匹配（当前 115200）")
    print("   3. 上电太早/太晚，错过 BootROM 输出窗口")

termios.tcsetattr(fd, termios.TCSADRAIN, old)
os.close(fd)
