4 # Copyright (C) 2015 shibby
7 MODE
=`nvram get wan_proto`
8 LOCK
="/tmp/switch4g.lock"
10 if [ ! "$MODE" == "lte" ]; then
15 APN
=`nvram get modem_apn`
16 DEV
=`nvram get modem_dev4g`
17 TYP
=`nvram get modem_type`
18 IFA
=`nvram get wan_4g`
20 logger
4G MODEM
- connecting ...
22 if [ "$TYP" == "non-hilink" ]; then
25 if [ -z "$DEV" ]; then
26 logger
4G MODEM
- DIAG interface not found
- connection terminated
30 while [ $CONNECTED == "0" ]; do
31 MODE
="AT^NDISDUP=1,1,\"$APN\"" gcom
-d $DEV -s /etc
/gcom
/setverbose.gcom
> /tmp
/4g.mode
33 MODE
="AT+CGCONTRDP" gcom
-d $DEV -e -s /etc
/gcom
/setverbose.gcom
> /tmp
/4g.check
34 CHECK1
=`cat /tmp/4g.check | grep ERROR | wc -l`
35 CHECK2
=`cat /tmp/4g.check | grep open | wc -l`
36 if [ "$CHECK1" == "1" ]; then
37 logger
4G MODEM
- device
$DEV not connected yet ...
39 elif [ "$CHECK2" == "1" ]; then
40 logger
4G MODEM
- device
$DEV not ready ...
43 logger
4G MODEM
- connected ...
50 while [ $GO = "0" ]; do
53 CHECKIFA
=`ifconfig | grep $IFA | wc -l`
54 if [ "$CHECKIFA" == "1" ]; then
56 logger
4G MODEM
- WAN configured ...
62 DEV
=`nvram get modem_dev4g`
63 TYP
=`nvram get modem_type`
65 logger
4G MODEM
- disconnecting ...
68 if [ "$TYP" == "non-hilink" ]; then
69 MODE
="AT^NDISDUP=1,0" gcom
-d $DEV -s /etc
/gcom
/setmode.gcom
74 if [ -f $LOCK ]; then #lock exist
75 logger
4G MODEM
- previous proces of switch4g still working
83 PIN
=`nvram get modem_pin`
84 IS_PIN
=`nvram get modem_pin | wc -w`
87 if [ "$IS_PIN" == "1" -a "$TYPE" == "non-hilink" ]; then #only for non-hilink
88 PINCODE
="$PIN" gcom
-d $DEVNR -s /etc
/gcom
/setpin.gcom
93 MODULES
="cdc_ether cdc_ncm"
95 for MODULE
in $MODULES; do
104 while [ $FOUND == "0" ]; do
105 #modem not found, try detect
106 DEVICES
=`lsusb | awk '{print $6}'`
108 for SWITCH
in $DEVICES; do
109 SEARCH
=`ls /etc/usb_modeswitch.d/$SWITCH | wc -l`
113 if [ "$SEARCH" == "1" ]; then
114 logger
4G MODEM FOUND
- $SWITCH - Switching ...
115 DV
=`echo $SWITCH | cut -d ":" -f1`
116 DP
=`echo $SWITCH | cut -d ":" -f2`
117 /usr
/sbin
/usb_modeswitch
-Q -c /etc
/usb_modeswitch.d
/$SWITCH -v $DV -p $DP
119 TEST1
=`cat /etc/usb_modeswitch.d/$SWITCH | grep "TargetVendor" | cut -d "=" -f2 | wc -l`
120 if [ "$TEST1" == "1" ]; then
121 VENDOR
=`cat /etc/usb_modeswitch.d/$SWITCH | grep "TargetVendor" | cut -d "=" -f2 | cut -d "x" -f2`
123 VENDOR
=`echo $SWITCH | cut -d ":" -f1`
126 TEST2
=`lsusb | awk '{print $6}' | grep $VENDOR | wc -l`
127 if [ "$TEST2" == "1" ]; then
128 PRODUCT
=`lsusb | awk '{print $6}' | grep $VENDOR | cut -d ":" -f2`
129 logger
4G MODEM ready
- $VENDOR:$PRODUCT
130 echo "$VENDOR:$PRODUCT" > /tmp
/4g.detect
136 HL
=`cat /proc/bus/usb/devices | grep Driver | grep cdc_ether | wc -l`
137 NHL
=`cat /proc/bus/usb/devices | grep Driver | grep cdc_ncm | wc -l`
139 if [ "$HL" -gt 0 ]; then
140 logger
4G MODEM found
- Hilink
- using cdc_ether module
143 elif [ "$NHL" -gt 0 ]; then
144 logger
4G MODEM found
- non-Hilink
- using cdc_ncm module
149 if [ "$COUNT" == "5" ]; then
150 logger
4G MODEM not found
- process terminated
!
153 logger
4G MODEM not found
- count
: $COUNT
154 COUNT
=`expr $COUNT + 1`
164 while [ $FOUND == "0" ]; do
165 for MODULE
in $MODULES; do
166 SEARCH
=`cat /proc/bus/usb/devices | grep Driver | grep $MODULE | wc -l`
168 if [ "$SEARCH" -gt 0 ]; then
169 if [ "$MODULE" == "cdc_ether" ]; then
171 elif [ "$MODULE" == "cdc_ncm" ]; then
177 logger
4G MODEM NDIS found
- $TYPE - using
$MODULE module
178 nvram
set 4g_module
=$MODULE
182 if [ "$COUNT" == "5" ]; then
183 logger
4G MODEM NDIS not found
- process terminated
!
187 logger
4G MODEM NDIS not found
- $MODULE - count
: $COUNT
188 COUNT
=`expr $COUNT + 1`
195 #search WAN interface (usbX or ethX)
199 KERNEL
=`uname -r | cut -d "." -f1,2,3`
201 while [ $FOUND == "0" ]; do
202 if [ "$KERNEL" == "2.6.36" ]; then #ARM
203 WAN
=`dmesg | grep $MODULE | grep register | grep "'" | cut -d " " -f3 | cut -d ":" -f1 | tail -1`
205 WAN
=`dmesg | grep $MODULE | grep register | grep "'" | cut -d ":" -f1 | tail -1`
208 IS_WAN
=`echo $WAN | wc -w`
210 if [ "$IS_WAN" -gt 0 ]; then
211 logger
4G MODEM WAN found
- $TYPE - using
$WAN as WAN
212 nvram
set wan_4g
="$WAN"
213 nvram
set modem_type
=$TYPE
216 if [ "$COUNT" == "5" ]; then
217 logger
4G MODEM WAN not found
- connection process terminated
!
221 logger
4G MODEM WAN not found
- count
: $COUNT
222 COUNT
=`expr $COUNT + 1`
230 if [ "$TYPE" == "non-hilink" ]; then #only for non-hilink
234 US
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
236 if [ "$US" -gt 0 ]; then
237 logger
4G MODEM found
- Diagnostic interface
- using usbserial module
240 IS_VENDOR
=`echo $VENDOR | wc -w`
241 if [ "$IS_VENDOR" -gt 0 ]; then
242 IS_PRODUCT
=`echo $PRODUCT | wc -w`
243 if [ "$IS_PRODUCT" -gt 0 ]; then
244 logger
4G MODEM
- loading module usbserial
246 insmod usbserial vendor
=0x
$VENDOR product
=0x
$PRODUCT
247 echo "$VENDOR:$PRODUCT" > /tmp
/4g.detect
251 DEV
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
252 if [ "$DEV" -gt 0 ]; then
253 logger
4G MODEM ready
- using usbserial module
255 nvram
set 4g_module
=usbserial
257 #last change. try load usbserial for each usb devices
258 DEVICES
=`lsusb | awk '{print $6}'`
259 for SWITCH
in $DEVICES; do
260 if [ "$FOUND" == "0" ]; then
261 VENDOR
=`echo $SWITCH | cut -d ":" -f1`
262 PRODUCT
=`echo $SWITCH | cut -d ":" -f2`
264 insmod usbserial vendor
=0x
$VENDOR product
=0x
$PRODUCT
266 DEV
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
267 if [ "$DEV" -gt 0 ]; then
268 logger
4G MODEM ready
- using usbserial module
269 nvram
set 4g_module
=usbserial
270 echo "$VENDOR:$PRODUCT" > /tmp
/4g.detect
279 #search diagnostic device
280 TTY
=`ls /dev/ttyUSB*`
283 CHECKTTY
=`gcom -d $i -e info | grep OK | wc -l`
284 if [ "$CHECKTTY" == "1" ]; then #found working interface
285 logger
4G MODEM DIAG found
- $i
286 nvram
set modem_dev4g
=$i
289 logger
4G MODEM DIAG not found
296 if [ "$TYPE" == "non-hilink" ]; then #only for non-hilink
297 #check signal strength
298 CSQ
=`gcom -d $DEVNR -s /etc/gcom/getstrength.gcom | grep "CSQ:" | cut -d " " -f2 | cut -d "," -f1`
300 logger
"4G MODEM Signal Strength: $DBM dBm"
305 ###################################################
307 if [ "$1" == "connect" ]; then
309 elif [ "$1" == "disconnect" ]; then
324 #force connection after detect 4G modem