123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- #!/bin/sh
- #Barry Kauler 2007 LGPL
- #called from /usr/sbin/modemprobe, pupdial
- #v405 overhauled.
- #v408 rerwin: bugfix.
- #v465 rerwin: v413 move init string to Init3
- #v477 rerwin: v413 wait longer for modem response; add splash message during sleep
- #v424 rerwin: reset skip-PIN flag
- #101203 bk: message modification.
- #101220 bk: info box if get empty string.
- #120201 rodin.s: internationalized.
- #120329 Xdialog bug --yesno supposed to "yes" "No" buttons, but they are "OK" "Cancel".
- export TEXTDOMAIN=modemtest
- export TEXTDOMAINDIR=/usr/share/locale
- export OUTPUT_CHARSET=UTF-8
- eval_gettext () {
- local myMESSAGE=$(gettext "$1")
- eval echo \"$myMESSAGE\"
- }
- export LANGORG=$LANG
- Yes_lbl="$(gettext 'Yes')"
- No_lbl="$(gettext 'No')"
- #[ ! $1 ] && exit
- DEVM=$1
- PARAM2=$2
- MODEMDEV=""
- if [ -h /dev/modem ];then
- MODEMDEV="`readlink /dev/modem`"
- fi
- #a fallback if user runs this script directly...
- [ "$DEVM" = "" ] && [ "$MODEMDEV" = "" ] && exit
- [ "$DEVM" = "" ] && [ "$MODEMDEV" != "" ] && DEVM="$MODEMDEV"
- if [ "$PARAM2" = "initonly" ];then
- MSGSUCCESS="`gettext \"Okay, the modem was probed and it responded, confirming that it does exist,\n
- now the probe can be done to determine a suitable initialization string.\n
- Click the 'Yes' button to do this (recommended), or\n
- 'No' if you already have a suitable initialization string for this modem in\n
- /etc/wvdial.conf (the configuration file for PupDial) ...that would probably\n
- be the case if you had used this modem the last time that you ran PupDial.\n
- \n
- Note: For some modern modems, the default 'ATZ' initialization string is\n
- sufficient and you do not have to do this probe, however it does not do any\n
- harm to do so (and gives further confirmation the modem works)...\"`"
- else
- MSGSUCCESS="`eval_gettext \"Success, the modem responds as \\\$DEVM! (The modem is there; getting it to dial out is another matter!)\n
- Click the 'yes' button if you would like /dev/modem to be a link to \\\${DEVM} and the Wvdial\n
- configuration file /etc/wvdial.conf set with entry 'Modem = /dev/\\\${DEVM}. An attempt will\n
- also be made to determine appropriate modem initialization strings.\"`"
- fi
- #return the IRQ that respond to a given device...
- irq_from_device_func() { #device passed in, ex: /dev/ttyS0
- #v1.0.2 it seems that setserial may be more trouble than its worth...
- #in the case of linmodems it often doesn't work...
- case ${1} in
- /dev/ttyS[0-9])
- set -- `setserial -v -b ${1} auto_irq skip_test autoconfig session_lockout`
- [ "$6" ] && echo $6 | tr -d \)
- ;;
- esac
- }
- #talk to modem, wait for response...
- chat_with_func() { #device passed in.
- rm -f /tmp/answer.txt
- #TODO maybe send +++ to return modem to command-mode.
- #hangs if modem unplugged or turned off (contrary to what docs say)...
- modem-stats -c "ATZ" $1 > /tmp/answer.txt &
- sleep 5 #v413
- killall modem-stats
- if [ -e /tmp/answer.txt ];then
- if [ -s /tmp/answer.txt ];then #nonzero size.
- grep "^OK" /tmp/answer.txt > /dev/null 2>&1
- [ $? -eq 0 ] && return 0 #success
- fi
- fi
- return 1
- }
- #v433 Set config file Modem line(s), including possible alternate USB modem device.
- modem_device_to_conf_func() {
- #Argument is modem device for config file - current or tested
- DEVMCONF="$1"
- DEVMALT="`get_modem_alternate_device $DEVM`"
- if [ "$DEVMALT" = "" ];then
- if [ "$DEVM" = "$MODEMDEV" -a "$PARAM2" = "" ];then
- grep -q '^#Modem =' /etc/wvdial.conf \
- || return 1
- fi
- aPATTERN="s%^Modem = .*%Modem = /dev/${DEVMCONF}%"
- else
- aPATTERN="s%^Modem = .*%Modem = /dev/${DEVMCONF}\n#Modem = /dev/${DEVMALT}%"
- fi
- sed -i \
- -e '/#Modem =/d' \
- -e "$aPATTERN" /etc/wvdial.conf
- return 0
- } #v433 end
- modem_test_func() {
- [ "$DEVM" = "" ] && DEVM='invalid'
- /usr/lib/gtkdialog/box_splash -outline 0 -margin 4 -text "$(gettext 'Verifying modem is present...')" &
- X8PID=$! #v413
- IRQM=$(irq_from_device_func /dev/${DEVM})
- fuser -k /dev/${DEVM} 2>/dev/null #kill processing attached to device.
- chat_with_func /dev/$DEVM
- if [ $? -eq 0 ];then
- kill $X8PID #v413
- modem_device_to_conf_func $DEVM #v433 set tested dev
- if [ "$DEVM" = "$MODEMDEV" -a "$PARAM2" = "" ];then
- Xdialog --left --wmclass "pupdial" --title "$(gettext 'PupDial: modem test')" --no-cancel --msgbox "`eval_gettext \"Success, the modem responds as \\\$DEVM! (The modem is there; getting it to dial out is another matter!)\"`" 0 0
- else
- Xdialog --left --wmclass "pupdial" --title "$(gettext 'PupDial: modem test')" --ok-label "$Yes_lbl" --cancel-label "$No_lbl" --yesno "${MSGSUCCESS}" 0 0
- if [ $? -eq 0 ];then
- /usr/lib/gtkdialog/box_splash -outline 0 -margin 4 -text "$(gettext 'Please wait, updating settings...')" &
- X9PID=$!
- ln -snf $DEVM /dev/modem
- waitmax 29 gen_modem_init_string > /dev/null #writes to /tmp/mymodeminitstring
- FLAGBADINITSTRING='no' #101220
- if [ -s /tmp/mymodeminitstring ];then
- INITSTRING="`cat /tmp/mymodeminitstring | sed 's/\&/\\\&/g' | tr -s ' '`" #v433 sed problem with &
- if [ "$INITSTRING" = "" -o "$INITSTRING" = " " ];then #101220
- FLAGBADINITSTRING='yes' #101220
- else
- bPATTERN="s/^Init3.*/Init3 = ${INITSTRING}/" #v413
- sed -i -e "$bPATTERN" /etc/wvdial.conf #v433
- fi
- else
- FLAGBADINITSTRING='yes' #101220
- fi
- kill $X9PID
- if [ "$FLAGBADINITSTRING" = "yes" ];then #101220
- Xdialog --left --wmclass "pupdial" --title "$(gettext 'PupDial: Initialization string')" --msgbox "$(gettext 'There is a problem, probing did not generate an initialization string. You could try\n
- unplugging the modem, reboot Puppy then plug-in the modem and try again with PupDial.\n
- Alternatively, in the PupDial main GUI window, try one of these strings in the second\n
- initialization-string entry box (write them down!)'):\n\n
- AT &FE0 V1 X1 &D2 &C1 s0=0\n
- AT Q0 V1 E1 S0=0 &C1 &D2" 0 0
- fi
- else
- #101203...
- INIT3="`cat /etc/wvdial.conf | grep '^Init3' | tr -d ' ' | cut -f 2-9 -d '='`"
- if [ "$INIT3" ];then
- Xdialog --left --wmclass "pupdial" --title "$(gettext 'PupDial: Initialization string')" --ok-label "$Yes_lbl" --cancel-label "$No_lbl" --yesno "`gettext \"The PupDial configuration file /etc/wvdial.conf does have initialization\n
- strings in it from previous usage of PupDial. Would you like to reset\n
- them to the default ('ATZ' only)?\n
- Note, you might want to do this if you have changed modems and you know\n
- that the defaults are sufficient. If in doubt, click 'No'...\"`" 0 0
- if [ $? -eq 0 ];then
- #modify [Dialer Defaults] only...
- echo -n "" > /tmp/wvdial.conf-modemtest
- cat /etc/wvdial.conf |
- while read ONELINE
- do
- if [ "`echo -n "$ONELINE" | cut -c 1`" = "[" ];then
- WVSECTION=0
- [ "$ONELINE" = "[Dialer Defaults]" ] && WVSECTION=1
- fi
- if [ $WVSECTION -eq 1 ];then
- NEWONE="`echo -n "$ONELINE" | sed -e 's%^Init3 =.*%Init3 = %' -e 's%^Init2 =.*%Init2 = ATZ%' -e 's%^Init1 =.*%Init1 = %'`"
- echo "$NEWONE" >> /tmp/wvdial.conf-modemtest
- else
- echo "$ONELINE" >> /tmp/wvdial.conf-modemtest
- fi
- done
- cp -f /tmp/wvdial.conf-modemtest /etc/wvdial.conf
- fi
- fi
- fi
- rm -f /tmp/.pupdial_pin_sent #v433
- fi
- touch /tmp/.pupdial-modem_detected #v433
- else
- kill $X8PID #v413
- modem_device_to_conf_func $MODEMDEV #v433 set current dev
- Xdialog --left --wmclass "pupdial" --title "$(gettext 'PupDial: modem test')" --no-cancel --msgbox "$(gettext 'Sorry, the modem was not detected as') $DEVM." 0 0
- rm -f /tmp/.pupdial_pin_sent #v433
- rm -f /tmp/.pupdial-modem_detected #v433
- fi
- }
- modem_test_func
- ###END###
|