#!/bin/bash

# USB Hub串口测试脚本
# 用法: ./test_usbhub.sh [串口设备]

SERIAL_DEVICE="${1:-/dev/ttyUSB0}"
BAUD_RATE="9600"

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

# 检查串口设备
check_serial_device() {
    if [ ! -e "$SERIAL_DEVICE" ]; then
        echo -e "${RED}Error: Serial device $SERIAL_DEVICE not found${NC}"
        echo "Available serial devices:"
        ls /dev/tty* | grep -E "tty(USB|ACM|S)" | head -10
        exit 1
    fi
}

# 初始化串口
setup_serial() {
    stty -F $SERIAL_DEVICE $BAUD_RATE cs8 -cstopb -parenb ignbrk -brkint -icrnl -imaxbel \
        -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh \
        -ixon -crtscts
}

# 发送命令
send_command() {
    local command="$1"
    echo -e "${YELLOW}Sending: $command${NC}"
    echo -e "$command\r" > $SERIAL_DEVICE
    
    # 等待响应
    sleep 0.5
    echo -n -e "${GREEN}Response: ${NC}"
    
    # 读取响应
    timeout 1 cat $SERIAL_DEVICE 2>/dev/null || echo "No response"
    echo "----------------------------------------"
}

# 运行测试
run_tests() {
    echo -e "${BLUE}Starting USB Hub tests...${NC}"
    
    # 基本测试
    send_command "HELP"
    send_command "STATUS"
    
    echo -e "\n${BLUE}Testing POWER mode:${NC}"
    for channel in 1 3 5; do
        send_command "POWER $channel"
        send_command "STATUS"
    done
    
    echo -e "\n${BLUE}Testing DATA mode:${NC}"
    for channel in 2 4 6; do
        send_command "DATA $channel"
        send_command "STATUS"
    done
    
    echo -e "\n${BLUE}Testing boundary channels:${NC}"
    send_command "POWER 1"
    send_command "DATA 8"
    
    echo -e "\n${BLUE}Testing OFF command:${NC}"
    send_command "OFF"
    send_command "STATUS"
    
    echo -e "\n${BLUE}Testing case-insensitivity:${NC}"
    send_command "help"
    send_command "power 7"
    send_command "data 1"
    send_command "off"
    send_command "status"
    
    echo -e "\n${BLUE}Testing mode switching:${NC}"
    commands=("POWER 1" "DATA 1" "POWER 2" "DATA 2" "OFF" "DATA 3" "POWER 4" "OFF")
    for cmd in "${commands[@]}"; do
        send_command "$cmd"
        send_command "STATUS"
        sleep 0.2
    done
    
    echo -e "\n${GREEN}All tests completed${NC}"
}

# 主程序
main() {
    check_serial_device
    setup_serial
    run_tests
}

# 运行主程序
main "$@"