usbmodeswitch: Updated to v.1.2.6 from shibby's branch.
[tomato.git] / release / src / router / others / switch3g
bloba9f6c51cdef531504c2e51e3198a2d68dd2d21ad
1 #!/bin/sh
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
10 exit 0
11 else
13 PIN=`nvram get modem_pin`
14 IS_PIN=`nvram get modem_pin | wc -w`
15 DEVNR=`nvram get modem_dev`
17 # is modem ready?
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
29 rm $LOCK
30 break;
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
37 rm $LOCK
38 break;
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
45 rm $LOCK
46 break;
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
53 rm $LOCK
54 break;
55 else
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`
63 # vendor:product
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`
74 else
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
85 done
87 #trying option and sierra module first
88 modprobe cdc-acm
89 modprobe option
90 modprobe sierra
91 sleep 2
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
101 rm $LOCK
102 break;
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
109 rm $LOCK
110 break;
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
117 rm $LOCK
118 break;
119 else
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...
123 rmmod sierra
124 rmmod option
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
131 rmmod 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
144 rm $LOCK
145 break;
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
160 rm $LOCK
161 break;
162 else
163 logger 3G MODEM - loading module
164 rmmod usbserial
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
171 rm $LOCK
172 break;
175 else
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`
181 rmmod usbserial
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
189 NO=0
190 if [ "$IS_PIN" == "1" ]; then
191 echo -e "AT+CPIN=$PIN\r" > /dev/$DEVNR
193 rm $LOCK
194 break;
195 else
196 NO=1
198 done
203 if [ "$NO" == "1" ]; then
204 logger 3G MODEM not found ... sorry
207 #end script
210 #remove lock
211 rm $LOCK