luci-app-qmodem: perf: auto add option_driver

This commit is contained in:
sfwtw 2025-05-22 16:53:24 +08:00
parent 558918bec8
commit 68cf55631f
4 changed files with 48 additions and 17 deletions

View File

@ -6,7 +6,6 @@ USE_PROCD=1
. /lib/functions.sh
start_service() {
config_load qmodem
config_foreach _mk_rundir modem-device
config_get block_auto_probe main block_auto_probe 0
@ -17,6 +16,9 @@ start_service() {
#once enabled, skip all check or scan
[ "$block_auto_probe" -eq 1 ] && return
#auto add option driver for usb device
config_foreach _usb_option_driver modem-device
#enabled by default
if [ "$try_preset_pcie" -eq 1 ];then
_try_vendor_preset_pcie
@ -131,3 +133,22 @@ _try_device()
/usr/share/qmodem/modem_scan.sh disable "$1"
fi
}
_usb_option_driver()
{
[ "$(config_get "$1" data_interface)" = "usb" ] && [ "$(config_get "$1" option_driver)" = "1" ] || return
local path=$(config_get "$1" path)
local slot_vid=$(cat "${path}/idVendor" 2>/dev/null)
local slot_pid=$(cat "${path}/idProduct" 2>/dev/null)
if [ -n "$slot_vid" ] && [ -n "$slot_pid" ]; then
if echo "$slot_vid $slot_pid" > /sys/bus/usb-serial/drivers/option1/new_id 2>/dev/null; then
logger -t modem_init "Set option driver for $1 (VID:$slot_vid PID:$slot_pid)"
else
logger -t modem_init "Failed to set option driver for $1 (VID:$slot_vid PID:$slot_pid)"
fi
else
logger -t modem_init "Unable to get VID/PID for device $1"
fi
}

View File

@ -11,24 +11,29 @@ stop_service() {
procd_set_param timeout 30
config_load qmodem
config_foreach _soft_reboot modem-device
}
_soft_reboot() {
config_get soft_reboot $1 soft_reboot
if [ "$soft_reboot" == "1" ]; then
[ "$soft_reboot" != "1" ] && return 0
config_get at_port $1 at_port
[ -z "$at_port" ] && return 0
for i in $(seq 1 3); do
response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
retries=3
while ! echo "$response" | grep -qi "ok" && [ $retries -gt 0 ]; do
echo "$response" | grep -qi "ok" && break
sleep 1
response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
retries=$((retries - 1))
done
max_retries=15
while [ -e "$at_port" ] && [ $max_retries -gt 0 ]; do
for i in $(seq 1 15); do
[ ! -e "$at_port" ] && {
echo "Device disconnected after $i seconds"
return 0
}
sleep 1
max_retries=$((max_retries - 1))
done
fi
echo "Device did not disconnect within timeout period"
return 0
}

View File

@ -36,6 +36,10 @@
"3466:3301": {
"name": "mt5700m-cn",
"option_driver": 1
},
"2c7c:8101": {
"name": "rg801",
"option_driver": 1
}
}
}

View File

@ -492,6 +492,7 @@ EOF
for at_port in $at_ports; do
uci add_list qmodem.$section_name.ports="/dev/$at_port"
done
[ "$option_driver" == "1" ] && uci set qmodem.$section_name.option_driver="1"
uci commit qmodem
mkdir -p /var/run/qmodem/${section_name}_dir
lock -u /tmp/lock/modem_add_$slot