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 . /lib/functions.sh
start_service() { start_service() {
config_load qmodem config_load qmodem
config_foreach _mk_rundir modem-device config_foreach _mk_rundir modem-device
config_get block_auto_probe main block_auto_probe 0 config_get block_auto_probe main block_auto_probe 0
@ -16,7 +15,10 @@ start_service() {
config_get try_preset_pcie main try_preset_pcie 1 config_get try_preset_pcie main try_preset_pcie 1
#once enabled, skip all check or scan #once enabled, skip all check or scan
[ "$block_auto_probe" -eq 1 ] && return [ "$block_auto_probe" -eq 1 ] && return
#auto add option driver for usb device
config_foreach _usb_option_driver modem-device
#enabled by default #enabled by default
if [ "$try_preset_pcie" -eq 1 ];then if [ "$try_preset_pcie" -eq 1 ];then
_try_vendor_preset_pcie _try_vendor_preset_pcie
@ -131,3 +133,22 @@ _try_device()
/usr/share/qmodem/modem_scan.sh disable "$1" /usr/share/qmodem/modem_scan.sh disable "$1"
fi 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 procd_set_param timeout 30
config_load qmodem config_load qmodem
config_foreach _soft_reboot modem-device config_foreach _soft_reboot modem-device
} }
_soft_reboot() { _soft_reboot() {
config_get soft_reboot $1 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
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") response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
retries=3 echo "$response" | grep -qi "ok" && break
while ! echo "$response" | grep -qi "ok" && [ $retries -gt 0 ]; do sleep 1
sleep 1 done
response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
retries=$((retries - 1)) for i in $(seq 1 15); do
done [ ! -e "$at_port" ] && {
max_retries=15 echo "Device disconnected after $i seconds"
while [ -e "$at_port" ] && [ $max_retries -gt 0 ]; do return 0
sleep 1 }
max_retries=$((max_retries - 1)) sleep 1
done done
fi
echo "Device did not disconnect within timeout period"
return 0
} }

View File

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

View File

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