File tree Expand file tree Collapse file tree 4 files changed +48
-17
lines changed
luci/luci-app-qmodem/root Expand file tree Collapse file tree 4 files changed +48
-17
lines changed Original file line number Diff line number Diff line change @@ -6,7 +6,6 @@ USE_PROCD=1
66. /lib/functions.sh
77
88start_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+ }
Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff line change 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 }
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments