4 # Copyright (C) 2011 shibby
7 LOCK
="/tmp/switch3g.lock"
8 if [ -f $LOCK ]; then #lock exist
9 logger
3G MODEM
- previous proces of switch3g still working
13 PIN
=`nvram get modem_pin`
14 IS_PIN
=`nvram get modem_pin | wc -w`
15 DEVNR
=`nvram get modem_dev`
18 DEV0
=`cat /proc/bus/usb/devices | grep Driver | grep cdc_acm | wc -l`
19 DEV1
=`cat /proc/bus/usb/devices | grep Driver | grep option | wc -l`
20 DEV2
=`cat /proc/bus/usb/devices | grep Driver | grep sierra | wc -l`
21 DEV3
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
23 if [ "$DEV0" -gt 0 ]; then
24 logger
3G MODEM already found
- using cdc-acm module
25 nvram
set 3g_module
=cdc-acm
26 if [ "$IS_PIN" == "1" ]; then
27 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
31 elif [ "$DEV1" -gt 0 ]; then
32 logger
3G MODEM already found
- using option module
33 nvram
set 3g_module
=option
34 if [ "$IS_PIN" == "1" ]; then
35 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
39 elif [ "$DEV2" -gt 0 ]; then
40 logger
3G MODEM already found
- using sierra module
41 nvram
set 3g_module
=sierra
42 if [ "$IS_PIN" == "1" ]; then
43 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
47 elif [ "$DEV3" -gt 0 ]; then
48 logger
3G MODEM already found
- using usbserial module
49 nvram
set 3g_module
=usbserial
50 if [ "$IS_PIN" == "1" ]; then
51 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
56 #modem not found, try detect
58 DEVICES
=`lsusb | awk '{print $6}'`
60 for SWITCH
in $DEVICES; do
61 SEARCH
=`ls /etc/usb_modeswitch.d/$SWITCH | wc -l`
65 if [ "$SEARCH" == "1" ]; then
66 logger
3G MODEM FOUND
- $SWITCH - Switching ...
67 DV
=`echo $SWITCH | cut -d ":" -f1`
68 DP
=`echo $SWITCH | cut -d ":" -f2`
69 /usr
/sbin
/usb_modeswitch
-Q -c /etc
/usb_modeswitch.d
/$SWITCH -v $DV -p $DP
71 TEST1
=`cat /etc/usb_modeswitch.d/$SWITCH | grep "TargetVendor" | cut -d "=" -f2 | wc -l`
72 if [ "$TEST1" == "1" ]; then
73 VENDOR
=`cat /etc/usb_modeswitch.d/$SWITCH | grep "TargetVendor" | cut -d "=" -f2 | cut -d "x" -f2`
75 VENDOR
=`echo $SWITCH | cut -d ":" -f1`
78 TEST2
=`lsusb | awk '{print $6}' | grep $VENDOR | wc -l`
79 if [ "$TEST2" == "1" ]; then
80 PRODUCT
=`lsusb | awk '{print $6}' | grep $VENDOR | cut -d ":" -f2`
81 logger
3G MODEM ready
- $VENDOR:$PRODUCT
82 echo "$VENDOR:$PRODUCT" > /tmp
/3g.detect
87 #trying option and sierra module first
92 DEV0
=`cat /proc/bus/usb/devices | grep Driver | grep cdc_acm | wc -l`
93 DEV1
=`cat /proc/bus/usb/devices | grep Driver | grep option | wc -l`
94 DEV2
=`cat /proc/bus/usb/devices | grep Driver | grep sierra | wc -l`
95 if [ "$DEV0" -gt 0 ]; then
96 logger
3G MODEM ready
- using cdc-acm module
97 nvram
set 3g_module
=cdc-acm
98 if [ "$IS_PIN" == "1" ]; then
99 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
103 elif [ "$DEV1" -gt 0 ]; then
104 logger
3G MODEM ready
- using option module
105 nvram
set 3g_module
=option
106 if [ "$IS_PIN" == "1" ]; then
107 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
111 elif [ "$DEV2" -gt 0 ]; then
112 logger
3G MODEM ready
- using sierra module
113 nvram
set 3g_module
=sierra
114 if [ "$IS_PIN" == "1" ]; then
115 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
120 logger
3G MODEM not found by cdc-acm
, option or sierra module. Trying usbserial ...
122 #rmmod cdc_acm //we can`t do that. I don`t know why...
126 IS_VENDOR
=`echo $VENDOR | wc -w`
127 if [ "$IS_VENDOR" -gt 0 ]; then
128 IS_PRODUCT
=`echo $PRODUCT | wc -w`
129 if [ "$IS_PRODUCT" -gt 0 ]; then
130 logger
3G MODEM
- loading module usbserial
132 insmod usbserial vendor
=0x
$VENDOR product
=0x
$PRODUCT maxSize
=4096
133 echo "$VENDOR:$PRODUCT" > /tmp
/3g.detect
137 DEV
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
138 if [ "$DEV" -gt 0 ]; then
139 logger
3G MODEM ready
- using usbserial module
140 nvram
set 3g_module
=usbserial
141 if [ "$IS_PIN" == "1" ]; then
142 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
146 elif [ -f /tmp
/3g.detect
]; then
147 VENDOR
=`cat /tmp/3g.detect | cut -d ":" -f1`
148 PRODUCT
=`cat /tmp/3g.detect | cut -d ":" -f2`
149 TEST3
=`lsusb | grep $VENDOR | grep $PRODUCT | wc -l`
150 if [ "$TEST3" == "1" ]; then
151 logger
3G MODEM FOUND
- already switched
- Last know
$VENDOR:$PRODUCT
153 DEV
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
154 if [ "$DEV" -gt 0 ]; then
155 logger
3G MODEM ready
- using usbserial module
156 nvram
set 3g_module
=usbserial
157 if [ "$IS_PIN" == "1" ]; then
158 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
163 logger
3G MODEM
- loading module
165 insmod usbserial vendor
=0x
$VENDOR product
=0x
$PRODUCT maxSize
=4096
166 echo "$VENDOR:$PRODUCT" > /tmp
/3g.detect
167 nvram
set 3g_module
=usbserial
168 if [ "$IS_PIN" == "1" ]; then
169 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
176 #last change. try load usbserial for each usb devices
177 DEVICES
=`lsusb | awk '{print $6}'`
178 for SWITCH
in $DEVICES; do
179 VENDOR
=`echo $SWITCH | cut -d ":" -f1`
180 PRODUCT
=`echo $SWITCH | cut -d ":" -f2`
182 insmod usbserial vendor
=0x
$VENDOR product
=0x
$PRODUCT maxSize
=4096
184 DEV
=`cat /proc/bus/usb/devices | grep Driver | grep usbserial | wc -l`
185 if [ "$DEV" -gt 0 ]; then
186 logger
3G MODEM ready
- using usbserial module
187 nvram
set 3g_module
=usbserial
188 echo "$VENDOR:$PRODUCT" > /tmp
/3g.detect
190 if [ "$IS_PIN" == "1" ]; then
191 echo -e "AT+CPIN=$PIN\r" > /dev
/$DEVNR
203 if [ "$NO" == "1" ]; then
204 logger
3G MODEM not found ... sorry