#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
激光模块开关测试脚本
平台：MaixPy (Sipeed MAIX)
功能：每2秒循环开启/关闭激光，验证硬件是否正常响应
作者：ZZH
"""

from maix import uart, pinmap, time

# === 配置 ===
UART_PORT = "/dev/ttyS1"   # 激光模块连接的串口（通常是 UART1）
BAUDRATE = 9600            # 波特率（根据你的模块调整）

# 引脚映射（根据你硬件连接修改）
pinmap.set_pin_function("A18", "UART1_RX")  # RX
pinmap.set_pin_function("A19", "UART1_TX")  # TX

# 激光控制指令（根据你的模块协议）
MODULE_ADDR = 0x00
LASER_ON_CMD  = bytes([0xAA, MODULE_ADDR, 0x01, 0xBE, 0x00, 0x01, 0x00, 0x01, 0xC1])
LASER_OFF_CMD = bytes([0xAA, MODULE_ADDR, 0x01, 0xBE, 0x00, 0x01, 0x00, 0x00, 0xC0])

# === 初始化串口 ===
print("🔧 正在初始化激光串口...")
laser_uart = uart.UART(UART_PORT, BAUDRATE)

# === 辅助函数 ===
def send_laser_cmd(cmd, name):
    """发送激光指令并尝试读取回包"""
    print(f"➡️ 发送指令: {name}")
    laser_uart.write(cmd)
    time.sleep_ms(50)  # 等待模块处理
    
    # 尝试读取回包（非必须，部分模块无返回）
    resp = laser_uart.read(20)
    if resp:
        print(f"✅ 收到回包 ({len(resp)}字节): {resp.hex()}")
    else:
        print("🔇 无回包（正常或模块不支持）")

# === 主测试循环 ===
print("\n🚀 开始激光开关测试（按 Ctrl+C 停止）")
print("周期：开1秒 → 关1秒\n")

try:
    while True:
        # 开启激光
        send_laser_cmd(LASER_ON_CMD, "LASER ON")
        time.sleep(1.0)  # 持续开启 1 秒

        # 关闭激光
        send_laser_cmd(LASER_OFF_CMD, "LASER OFF")
        time.sleep(1.0)  # 关闭 1 秒

except KeyboardInterrupt:
    print("\n🛑 测试被用户中断")
    # 最终确保激光关闭
    laser_uart.write(LASER_OFF_CMD)
    print("✅ 已发送最终关闭指令")