#!/bin/bash

# LED控制器串口测试脚本
# 使用前请安装: sudo apt-get install screen 或使用其他串口工具

SERIAL_PORT="/dev/ttyUSB0"
BAUD_RATE="9600"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 检查串口设备是否存在
check_serial_port() {
    if [ ! -e "$SERIAL_PORT" ]; then
        echo -e "${RED}错误: 串口设备 $SERIAL_PORT 不存在${NC}"
        echo "可用的串口设备:"
        ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null || echo "未找到串口设备"
        exit 1
    fi
}

# 使用 stty 或 screen 发送命令
send_command() {
    local cmd="$1"
    local delay="${2:-0.5}"
    
    echo -e "${YELLOW}发送: $cmd${NC}"
    
    # 方法1: 使用 echo 和 stty
    echo "$cmd" > "$SERIAL_PORT"
    sleep "$delay"
    
    # 读取响应（如果有cat可用）
    if command -v cat &> /dev/null; then
        timeout 0.1 cat "$SERIAL_PORT" 2>/dev/null || true
    fi
}

# 使用 screen 进行交互测试（推荐）
test_with_screen() {
    echo -e "${GREEN}使用 screen 进行串口通信${NC}"
    echo "启动 screen: screen $SERIAL_PORT $BAUD_RATE"
    echo "在 screen 中手动测试命令:"
    echo "  HELP, WHITE, WARM, NATURAL, HIGH, LOW, GEAR N, OFF, STATUS"
    echo "退出 screen: Ctrl+A 然后按 K，再按 Y"
    echo ""
    read -p "按回车键启动 screen..." -n 1
    screen "$SERIAL_PORT" "$BAUD_RATE"
}

# 自动测试流程
auto_test() {
    echo -e "${GREEN}=== LED控制器自动测试 ===${NC}\n"
    
    # 注意：自动测试需要配置串口权限和正确的工具
    echo "请确保已设置串口权限: sudo chmod 666 $SERIAL_PORT"
    echo "或使用 sudo 运行此脚本"
    echo ""
    
    # 测试命令列表
    commands=(
        "HELP"
        "WHITE"
        "sleep 1"
        "WARM"
        "sleep 1"
        "NATURAL"
        "sleep 1"
        "HIGH"
        "HIGH"
        "LOW"
        "GEAR 64"
        "GEAR 100"
        "STATUS"
        "OFF"
    )
    
    for cmd in "${commands[@]}"; do
        if [[ "$cmd" == sleep* ]]; then
            sleep_duration=$(echo "$cmd" | cut -d' ' -f2)
            sleep "$sleep_duration"
        else
            send_command "$cmd"
        fi
    done
    
    echo -e "${GREEN}=== 测试完成 ===${NC}"
}

# 主菜单
main_menu() {
    clear
    echo -e "${GREEN}LED控制器串口测试工具${NC}"
    echo "串口: $SERIAL_PORT"
    echo "波特率: $BAUD_RATE"
    echo ""
    echo "请选择测试模式:"
    echo "1) 自动测试"
    echo "2) 交互模式 (使用 screen)"
    echo "3) 设置串口参数"
    echo "4) 退出"
    echo ""
    read -p "选择 [1-4]: " choice
    
    case $choice in
        1) auto_test ;;
        2) test_with_screen ;;
        3) 
            read -p "输入串口设备 (如 /dev/ttyUSB0): " SERIAL_PORT
            read -p "输入波特率 (默认 9600): " BAUD_RATE
            BAUD_RATE=${BAUD_RATE:-9600}
            main_menu
            ;;
        4) exit 0 ;;
        *) 
            echo "无效选择"
            sleep 1
            main_menu
            ;;
    esac
}

# 脚本入口
check_serial_port
main_menu