#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2014 OpenWrt.org

START=16
STOP=16
USE_PROCD=1

# 运行模块配置
runModem() {
    local enabled
    config_get_bool enabled $1 enabled
    if [ "$enabled" != "1" ]; then
        echo "Modem not enabled, skipping." >> /tmp/log4g
        return
    fi

    echo "run runModem" >> /tmp/log4g

    local user password apn auth pincode device tool pdptype tty atcmd
    config_get user $1 user
    config_get password $1 password
    config_get apn $1 apn
    config_get auth $1 auth
    config_get pincode $1 pincode
    config_get device $1 device
    config_get tool $1 tool
    config_get pdptype $1 pdptype
    config_get tty $1 tty
    config_get atcmd $1 atcmd

    if [ -z "$device" ] || [ -z "$tool" ]; then
        echo "Critical configuration missing: device or tool is not set." >> /tmp/log4g
        return
    fi

    case "$pdptype" in
        "IPV4V6") pdptype='-4 -6' ;;
        "IPV6")   pdptype='-6' ;;
        *)        pdptype='' ;;
    esac

    local devname=$(basename "$device")
    local devpath=$(readlink -f "/sys/class/usbmisc/$devname/device/")
    local ifname=$(ls "$devpath/net" 2>/dev/null)

    # 构建命令参数
    local cmd_params=""
    if [ -n "$ifname" ]; then
        cmd_params="-i $ifname"
    fi
    cmd_params="$cmd_params -s $apn $pdptype"

    if [ -n "$password" ]; then
        cmd_params="$cmd_params $user $password $auth"
    fi

    if [ -n "$pincode" ]; then
        cmd_params="$cmd_params -p $pincode"
    fi

    procd_open_instance
    procd_set_param command $tool $cmd_params
    procd_set_param respawn
    echo "quectel-CM has started."
    procd_close_instance
}


service_triggers() {
    procd_add_reload_trigger "modem"
}

start_service() {
    config_load modem
    config_foreach runModem ndis
}

stop_service() {
    echo "runModem stop" >> /tmp/log4g
    killall quectel-CM  # 考虑使用更精确的方法来停止服务
    echo "quectel-CM has stopped."
}

reload_service() {
	restart
}
