Skip to content

Commit 68cf556

Browse files
committed
luci-app-qmodem: perf: auto add option_driver
1 parent 558918b commit 68cf556

File tree

4 files changed

+48
-17
lines changed

4 files changed

+48
-17
lines changed

luci/luci-app-qmodem/root/etc/init.d/qmodem_init

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ USE_PROCD=1
66
. /lib/functions.sh
77

88
start_service() {
9-
109
config_load qmodem
1110
config_foreach _mk_rundir modem-device
1211
config_get block_auto_probe main block_auto_probe 0
@@ -16,7 +15,10 @@ start_service() {
1615
config_get try_preset_pcie main try_preset_pcie 1
1716
#once enabled, skip all check or scan
1817
[ "$block_auto_probe" -eq 1 ] && return
19-
18+
19+
#auto add option driver for usb device
20+
config_foreach _usb_option_driver modem-device
21+
2022
#enabled by default
2123
if [ "$try_preset_pcie" -eq 1 ];then
2224
_try_vendor_preset_pcie
@@ -131,3 +133,22 @@ _try_device()
131133
/usr/share/qmodem/modem_scan.sh disable "$1"
132134
fi
133135
}
136+
137+
_usb_option_driver()
138+
{
139+
[ "$(config_get "$1" data_interface)" = "usb" ] && [ "$(config_get "$1" option_driver)" = "1" ] || return
140+
141+
local path=$(config_get "$1" path)
142+
local slot_vid=$(cat "${path}/idVendor" 2>/dev/null)
143+
local slot_pid=$(cat "${path}/idProduct" 2>/dev/null)
144+
145+
if [ -n "$slot_vid" ] && [ -n "$slot_pid" ]; then
146+
if echo "$slot_vid $slot_pid" > /sys/bus/usb-serial/drivers/option1/new_id 2>/dev/null; then
147+
logger -t modem_init "Set option driver for $1 (VID:$slot_vid PID:$slot_pid)"
148+
else
149+
logger -t modem_init "Failed to set option driver for $1 (VID:$slot_vid PID:$slot_pid)"
150+
fi
151+
else
152+
logger -t modem_init "Unable to get VID/PID for device $1"
153+
fi
154+
}

luci/luci-app-qmodem/root/etc/init.d/qmodem_reboot

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,29 @@ stop_service() {
1111
procd_set_param timeout 30
1212
config_load qmodem
1313
config_foreach _soft_reboot modem-device
14-
1514
}
1615

1716
_soft_reboot() {
1817
config_get soft_reboot $1 soft_reboot
19-
if [ "$soft_reboot" == "1" ]; then
20-
config_get at_port $1 at_port
18+
[ "$soft_reboot" != "1" ] && return 0
19+
20+
config_get at_port $1 at_port
21+
[ -z "$at_port" ] && return 0
22+
23+
for i in $(seq 1 3); do
2124
response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
22-
retries=3
23-
while ! echo "$response" | grep -qi "ok" && [ $retries -gt 0 ]; do
24-
sleep 1
25-
response=$(tom_modem -d "$at_port" -o a -c "AT+CFUN=1,1")
26-
retries=$((retries - 1))
27-
done
28-
max_retries=15
29-
while [ -e "$at_port" ] && [ $max_retries -gt 0 ]; do
30-
sleep 1
31-
max_retries=$((max_retries - 1))
32-
done
33-
fi
25+
echo "$response" | grep -qi "ok" && break
26+
sleep 1
27+
done
28+
29+
for i in $(seq 1 15); do
30+
[ ! -e "$at_port" ] && {
31+
echo "Device disconnected after $i seconds"
32+
return 0
33+
}
34+
sleep 1
35+
done
36+
37+
echo "Device did not disconnect within timeout period"
38+
return 0
3439
}

luci/luci-app-qmodem/root/usr/share/qmodem/modem_port_rule.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
"3466:3301": {
3737
"name": "mt5700m-cn",
3838
"option_driver": 1
39+
},
40+
"2c7c:8101": {
41+
"name": "rg801",
42+
"option_driver": 1
3943
}
4044
}
4145
}

luci/luci-app-qmodem/root/usr/share/qmodem/modem_scan.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,7 @@ EOF
492492
for at_port in $at_ports; do
493493
uci add_list qmodem.$section_name.ports="/dev/$at_port"
494494
done
495+
[ "$option_driver" == "1" ] && uci set qmodem.$section_name.option_driver="1"
495496
uci commit qmodem
496497
mkdir -p /var/run/qmodem/${section_name}_dir
497498
lock -u /tmp/lock/modem_add_$slot

0 commit comments

Comments
 (0)