diff --git a/applications/luci-app-modem/root/etc/init.d/modem b/applications/luci-app-modem/root/etc/init.d/modem index 3d7f711..86e5b4b 100755 --- a/applications/luci-app-modem/root/etc/init.d/modem +++ b/applications/luci-app-modem/root/etc/init.d/modem @@ -14,13 +14,6 @@ MODEM_RUN_CONFIG="${MODEM_RUNDIR}/config.cache" #导入组件工具 source "${SCRIPT_DIR}/modem_scan.sh" -# === 添加开始 === -# 确保 TDTech (鼎桥) 的特定函数库被加载 -# 请将 modem_tdtech.sh 替换为包含 tdtech_set_mode 等函数的实际文件名 -[ -f "${SCRIPT_DIR}/tdtech.sh" ] && source "${SCRIPT_DIR}/tdtech.sh" -# 如果 m_log 函数在 modem_util.sh 中,也需要确保它被加载 -[ -f "${SCRIPT_DIR}/modem_util.sh" ] && source "${SCRIPT_DIR}/modem_util.sh" -# === 添加结束 === #设置拨号模式 # $1:拨号模式 @@ -628,9 +621,6 @@ dial() local username #用户名 local password #密码 local auth #认证类型 - # === 添加开始 === - local desired_mode # 用户期望的拨号模式 (从UCI读取) - # === 添加结束 === config_get remarks $1 remarks config_get network $1 network @@ -641,82 +631,27 @@ dial() config_get username $1 username config_get password $1 password config_get auth $1 auth - # === 添加开始 === - # 从拨号配置段读取用户期望的模式,如果未设置,可以给一个默认值 (例如 ecm) - config_get desired_mode $1 mode "ecm" - # === 添加结束 === #获取模块序号 get_modem_no "${network}" [ -z "${modem_no}" ] && return 0 - + #获取模组的拨号模式 local time=20 - local mode # 存储当前实际模式 + local mode for i in $(seq 1 ${time}); do - mode=$(get_mode ${modem_no}) # get_mode 应该能调用 tdtech_get_mode + mode=$(get_mode ${modem_no}) [ -n "$mode" ] && [ "$mode" != "unknown" ] && break sleep 5s done #获取不到拨号模式 [ -z "$mode" ] || [ "$mode" = "unknown" ] && { - m_log "error" "Modem $modem_no: Could not get current dial mode. Disabling config $id." uci set modem.$1.enable=0 uci commit modem return 0 } - # === 添加开始: 设置期望的拨号模式 === - local current_mode="$mode" # 保存获取到的当前模式 - local at_port=$(uci -q get modem.modem${modem_no}.at_port) - local manufacturer=$(uci -q get modem.modem${modem_no}.manufacturer) - - # 检查是否是 TDTech 模组,并且当前模式与期望模式不同 - if [ "$manufacturer" = "tdtech" ] && [ -n "$at_port" ] && [ -n "$desired_mode" ] && [ "$current_mode" != "$desired_mode" ]; then - m_log "info" "Modem $modem_no: Current mode '$current_mode', desired mode '$desired_mode'. Attempting to set..." - # 检查设置函数是否存在 - if type tdtech_set_mode > /dev/null 2>&1; then - tdtech_set_mode "$at_port" "$desired_mode" - # 切换模式后,模组可能需要时间重启或重新初始化USB接口 - m_log "info" "Modem $modem_no: Sent mode set command. Waiting 8 seconds..." # 等待时间可能需要调整 - sleep 8 - - # 重新获取模式以确认是否设置成功 - mode=$(get_mode ${modem_no}) - m_log "info" "Modem $modem_no: Mode after setting attempt is '$mode'." - - if [ "$mode" != "$desired_mode" ]; then - m_log "error" "Modem $modem_no: Failed to set desired mode '$desired_mode'. Current mode is '$mode'. Disabling config $id." - uci set modem.$1.enable=0 - uci commit modem - return 0 - else - m_log "info" "Modem $modem_no: Mode successfully set to '$desired_mode'." - current_mode="$mode" # 更新当前模式变量以进行后续判断 - fi - else - m_log "error" "Modem $modem_no: Function 'tdtech_set_mode' not found. Cannot set mode. Disabling config $id." - uci set modem.$1.enable=0 - uci commit modem - return 0 - fi - elif [ "$manufacturer" = "tdtech" ] && [ "$current_mode" = "$desired_mode" ]; then - m_log "info" "Modem $modem_no: Already in desired mode '$desired_mode'." - fi - # 如果不是 TDTech 模组,则跳过此设置逻辑,依赖其自身的模式保持能力或 get_mode 获取的当前模式 - # === 添加结束 === - - # 再次检查模式,确保后续流程使用正确的模式变量 (即使是从上面设置逻辑更新后的) - if [ -z "$current_mode" ] || [ "$current_mode" = "unknown" ]; then - m_log "error" "Modem $modem_no: Mode became unknown after setting attempt. Disabling config $id." - uci set modem.$1.enable=0 - uci commit modem - return 0 - fi - # 使用确认后的模式 current_mode 进行后续操作 - mode="$current_mode" # 确保后续逻辑使用确认或未改变的模式 - #查看该移动网络是否已经有拨号配置在运行 mkdir -m 0755 -p "${MODEM_RUNDIR}" if [ ! -f "${MODEM_RUN_CONFIG}" ] || ! grep -q "${network}" "${MODEM_RUN_CONFIG}"; then @@ -725,13 +660,12 @@ dial() #获取网络接口 local network_interface=$(uci -q get modem.modem${modem_no}.network_interface) - #设置网络接口 (应基于确认后的 mode) + #设置网络接口 set_interface "${modem_no}" "${network_interface}" else local config_id=$(awk -v network="${network}" -F',' '!/^#/ && $0 ~ network { print $2 }' "${MODEM_RUN_CONFIG}") #该移动网络已存在,且已有其他拨号配置在运行 if [ "$id" != "$config_id" ]; then - m_log "warn" "Modem $modem_no: Network '$network' is already being used by config '$config_id'. Disabling this config '$id'." uci set modem.$1.enable=0 uci commit modem return 0 @@ -741,7 +675,7 @@ dial() #设置网络预设 connect_presets - #根据不同的拨号模式拨号 (应基于确认后的 mode) + #根据不同的拨号模式拨号 if [ "$mode" = "qmi" ]; then qmi elif [ "$mode" = "gobinet" ]; then @@ -754,8 +688,6 @@ dial() rndis elif [ "$mode" = "ncm" ]; then ncm - else - m_log "error" "Modem $modem_no: Unsupported mode '$mode' for dialing." fi # sleep 15