home *** CD-ROM | disk | FTP | other *** search
/ HAKERIS 11 / HAKERIS 11.ISO / linux / system / LinuxConsole 0.4 / linuxconsole0.4install-en.iso / opt0.4.lcm / bin / probe_device.sh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  2004-02-26  |  5.8 KB  |  284 lines

  1. #!/bin/sh
  2.  
  3. # probe device's VIDs and PIDs
  4.  
  5.  
  6. function version()
  7. {
  8.     echo "$VERSION"
  9.     exit 0
  10. }
  11.  
  12. function commandlinehelp()
  13. {
  14.     echo "usage:"
  15.     echo "          $BASE [<switch>..]"
  16.     echo "switches:"
  17.     echo "          --dry-run              test mode (only perform neutral operations)"
  18.     echo "          --version or -v        show version number then exit"
  19.     echo "          --help or -h           show this help then exit"
  20. #    echo "          --smart                use smart mode: only show uninitialized devices"
  21. ##    echo "          --auto                 device auto selection"
  22.     exit $1
  23. }
  24.  
  25. function display_device()
  26. {
  27.     test -n "$PRODUCT" && echo -n " $PRODUCT" || echo -n " ?"
  28.     test -n "$MANUFACTURER" && echo -n "$MANUFACTURER"
  29.     test -n "$ID" && echo " ($ID)" || echo " (?$SEP?)"
  30.     test -n "$ID_TABLE" && ID_TABLE="$ID_TABLE|$ID" || ID_TABLE="$ID"
  31.     test -n "$PRODUCT_TABLE" && PRODUCT_TABLE="$PRODUCT_TABLE|$PRODUCT" || PRODUCT_TABLE="$PRODUCT"
  32.     test -n "$MANUFACTURER_TABLE" && MANUFACTURER_TABLE="$MANUFACTURER_TABLE|$MANUFACTURER" || MANUFACTURER_TABLE="$MANUFACTURER"
  33. }
  34.  
  35. function list_devices()
  36. {
  37.     let CNT=0
  38.     ID_TABLE=""
  39.     PRODUCT_TABLE=""
  40.     MANUFACTURER_TABLE=""
  41.     local ID=""
  42.     local PRODUCT=""
  43.     local MANUFACTURER=""
  44.     local OLDIFS=$IFS
  45.     IFS=$'\n'
  46.     for LINE in $(cat $DEVICES)
  47.     do
  48.         case ${LINE:0:2} in
  49.         "T:")    
  50.                 test $CNT -ne 0 && display_device
  51.                 let CNT+=1
  52.                 echo -n "$CNT: "
  53.                 ID=""
  54.                 PRODUCT=""
  55.                 MANUFACTURER=""
  56.                 ;;
  57.         "P:")    
  58.                 if [ -z "$ID" ]
  59.                 then
  60.                     ID=$(echo "$LINE" | grep -i "prodid=" | awk '{print $2,$3}')
  61.                     if [ $? -eq 0 -a -n "$ID" ]
  62.                     then
  63.                         ID=$(echo "$ID" | tr -s ' ' '=' | cut -d '=' -f 2,4 | tr -s '=' $SEP)
  64.                     fi
  65.                 fi
  66.                 ;;
  67.         "S:")    
  68.                 if [ -z "$PRODUCT" ]
  69.                 then
  70.                     PRODUCT=$(echo "$LINE" | grep -i "product=" | cut -d '=' -f 2-)
  71.                 fi
  72.                 if [ -z "$MANUFACTURER" ]
  73.                 then
  74.                     MANUFACTURER=$(echo "$LINE" | grep -i "manufacturer=" | cut -d '=' -f 2-)
  75.                     if [ $? -eq 0 -a -n "$MANUFACTURER" ]
  76.                     then
  77.                         MANUFACTURER=" / $MANUFACTURER"
  78.                     fi
  79.                 fi
  80.                 ;;
  81.         esac
  82.     done
  83.     IFS=$OLDIFS
  84.     test $CNT -ne 0 && display_device
  85.     if [ $CNT -lt 1 ]
  86.     then
  87.         echo "no USB device found!"
  88.         exit 1
  89.     fi
  90. }
  91.  
  92. function get_ID()
  93. {
  94.     OLDIFS=$IFS
  95.     IFS="|"
  96.     let CNT=0
  97.     ID=""
  98.     for LINE in $ID_TABLE
  99.     do
  100.         let CNT+=1
  101.         if [ $CNT -eq $DEVNUM ]
  102.         then
  103.             test -n "$LINE" && ID="$LINE"
  104.             break
  105.         fi
  106.     done
  107.     IFS=$OLDIFS
  108. }
  109.  
  110. function get_product()
  111. {
  112.     OLDIFS=$IFS
  113.     IFS="|"
  114.     let CNT=0
  115.     PRODUCT="?"
  116.     for LINE in $PRODUCT_TABLE
  117.     do
  118.         let CNT+=1
  119.         if [ $CNT -eq $DEVNUM ]
  120.         then
  121.             test -n "$LINE" && PRODUCT="$LINE"
  122.             break
  123.         fi
  124.     done
  125.     IFS=$OLDIFS
  126. }
  127.  
  128. function get_manufacturer()
  129. {
  130.     OLDIFS=$IFS
  131.     IFS="|"
  132.     let CNT=0
  133.     MANUFACTURER=""
  134.     for LINE in $MANUFACTURER_TABLE
  135.     do
  136.         let CNT+=1
  137.         if [ $CNT -eq $DEVNUM ]
  138.         then
  139.             test -n "$LINE" && MANUFACTURER="$LINE"
  140.             break
  141.         fi
  142.     done
  143.     IFS=$OLDIFS
  144. }
  145.  
  146. # <CONFIG>
  147. BIN_DIR="/usr/local/bin"
  148. ETC_DIR="/etc"
  149. CONF_DIR="/etc/eciadsl"
  150. PPPD_DIR="/etc/ppp"
  151. VERSION=""
  152. # </CONFIG>
  153.  
  154. BASE=${0##*/}
  155. VID1_TABLE=""
  156. VID2_TABLE=""
  157. PID1_TABLE=""
  158. PID2_TABLE=""
  159. VID1="????"
  160. PID1="????"
  161. VID2="????"
  162. PID2="????"
  163.  
  164. DEVICES=/proc/bus/usb/devices
  165. SEP=":"
  166. declare -i TESTONLY=0 RET=0 CNT
  167. #declare -i SMART=0 AUTO=0
  168.  
  169. while [ -n "$1" ]
  170. do
  171.     case "$1" in
  172.         "--dry-run")        let TESTONLY=1;;
  173. #        "--smart")            let SMART=1;;
  174. #        "--auto")            let AUTO=1;;
  175.         "--version"|"-v")    version;;
  176.         "--help"|"-h")        commandlinehelp 0;;
  177.         *)                    echo "unrecognized switch $1"
  178.                             commandlinehelp 1
  179.                             ;;
  180.     esac
  181.     shift
  182. done
  183.  
  184. if [ $UID -ne 0 ]
  185. then
  186.     echo -e "\nyou must be root to run this script!"
  187.     exit 1
  188. fi
  189.  
  190. # disclaimer
  191. echo -e "\nWARNING: before probing, please ensure that your USB devices are plugged in"
  192. echo "and that your system's USB support is properly configured"
  193. echo -e "\nUSB modem to probe must be UNinitialized, it will surely appear as an unknown"
  194. echo "device (because it is not initialized yet), for instance: ? (0547:2131)"
  195.  
  196. ECILOAD1_OPTIONS=""
  197. if [ -f "$CONF_DIR/eciadsl.conf" ]; then
  198.     FIRMWARE=`grep -E "^[ \t]*FIRMWARE[ \t]*=" "$CONF_DIR/eciadsl.conf" | tail -1 | cut -f 2 -d '=' | tr -s "\t" " "`
  199.     ECILOAD1_OPTIONS=`grep -E "^[ \t]*ECILOAD1_OPTIONS[ \t]*=" "$CONF_DIR/eciadsl.conf" | tail -1 | cut -f 2 -d '=' | tr -s "\t" " "`
  200.     echo -e "\nconfig read from $CONF_DIR/eciadsl.conf"
  201. else
  202.     echo -e "\ndefault config assumed"
  203. fi
  204. test -z "$FIRMWARE" && FIRMWARE=$CONF_DIR/firmware00.bin
  205.  
  206. if [ ! -f "$DEVICES" ]
  207. then
  208.     echo -e "\nUSB devices file not found!"
  209.     exit 1
  210. fi
  211.  
  212. # list USB devices
  213. echo -e "\nyour USB devices:"
  214. list_devices
  215.  
  216. # prompt for a device number
  217. echo -en "\nenter device to probe (1-$CNT): "
  218. read DEVNUM
  219. while [ $DEVNUM -lt 1 -o $DEVNUM -gt $CNT ]
  220. do
  221.     echo "incorrect value"
  222.     echo -en "\nenter device to probe (1-$LINES): "
  223.     read DEVNUM
  224. done
  225.  
  226. # get device info from table
  227. get_ID
  228. get_product
  229. get_manufacturer
  230.  
  231. # get VID1/PID1
  232. if [ ${#ID} -eq 9 -a "${ID:4:1}" == "$SEP" ]
  233. then
  234.     VID1=${ID:0:4}
  235.     PID1=${ID:5:4}
  236. else
  237.     echo -e "\ncannot determine VID1/PID1 for device $PRODUCT$MANUFACTURER ($ID)"
  238.     exit 1
  239. fi
  240.  
  241. type $BIN_DIR/eci-load1 > /dev/null 2>&1
  242. if [ $? -ne 0 ]
  243. then
  244.     echo -e "\ncannot find $BIN_DIR/eci-load1 in \$PATH, test mode assumed"
  245.     let RET+=1
  246. #    let TESTONLY=1
  247. fi
  248.  
  249. if [ $TESTONLY -eq 0 ]
  250. then
  251.     echo -e "\nprobing, please wait.."
  252.     $BIN_DIR/eci-load1 0x$VID1 0x$PID1 0xDEAD 0xFACE $FIRMWARE > /dev/null 2>&1
  253.  
  254.     # list USB devices
  255.     echo -e "\nyour USB devices now:"
  256.     list_devices
  257.  
  258.     # get device info from table
  259.     get_ID
  260.     get_product
  261.     get_manufacturer
  262.  
  263.     if [ ${#ID} -eq 9 -a "${ID:4:1}" == "$SEP" ]
  264.     then
  265.         VID2=${ID:0:4}
  266.         PID2=${ID:5:4}
  267.     else
  268.         echo -e "\ncannot determine VID2/PID2 for device $PRODUCT$MANUFACTURER ($ID)"
  269.         let RET+=1
  270.     fi
  271. fi
  272.  
  273. # display results
  274. echo -e "\nprobed USB device: $PRODUCT$MANUFACTURER"
  275. echo "VID1=$VID1, PID1=$PID1"
  276. echo "VID2=$VID2, PID2=$PID2"
  277. if [ "$VID1" == "$VID2" -a "$PID1" == "$PID2" ]
  278. then
  279.     echo "Did you really unplug/replug your modem before launching this script?"
  280.     let RET+=1
  281. fi
  282.  
  283. exit $RET
  284.