3G ppp chat script

 ( wowbagger | 2010. szeptember 30., csütörtök - 20:07 )

A mobilnetemhez hegesztenék egy csinos kis chat scriptet, amiben kajastancos kolléga egy kódfoszlánya is segítséget jelentett. A problémát viszont éppen ez okozza.
Azt szeretném megoldani, hogy a szkript - ha szükséges -, akkor adja meg a PIN kódot a 3G modemnek (ha nem szükséges, akkor lépjen tovább), és ellenőrizze, hogy sikerült-e beregisztrálni a hálózatra.
A probléma éppen abban rejlik, hogy amennyiben PIN megadása szükséges, akkor még kell a modemnek pár másodperc a regisztráláshoz, ellenben a chat scriptben nincs rá lehetőség, hogy várakoztassuk a végrehajtást, egy rövid ideig.
Így, mivel a szkript rögtön a PIN megadása után ellenőriz, akkor a chat script kilép, mivel a modem még nem regisztrált sikeresen...
A tapasztaltabbakat kérdem, hogy ezt hogyan lehet megoldani a chat scriptben feltételes alpárbeszédekkel, vagy más módon.

(Még mielőtt valaki ajánlaná: nem akarom kikapcsolni a PIN kód kérését.)

Íme a kód:

###########################################
# Suggested chat script called by PPPD
# File: /etc/ppp/vodafone-connect
###########################################
TIMEOUT 3
ABORT BUSY
ABORT 'NO CARRIER'
ABORT VOICE
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT DELAYED
'' ATZ
OK AT+CPIN? READY-AT+CPIN=WXYZ-OK AT+CREG? '+CREG: 0,1' AT
OK 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0'
OK 'AT+CGDCONT=1,"IP","internet.vodafone.net"'
SAY "Calling Vodafone 3G Service\n"
OK 'ATDT*99***1#'
CONNECT
###########################################

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

senki?
-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 13.1 | 2.6.34.1-janos

\d-vel tudsz 1 masodpercet kesleltetni.

Köszönöm az ötletet. Rövidesen kipróbálom élesben.
-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 13.1 | 2.6.34.1-janos

Egyelőre így béz ki a chat scriptem:

###########################################
# Suggested chat script called by PPPD
# File: /etc/ppp/vodafone-connect
###########################################
TIMEOUT 5
ABORT BUSY
ABORT 'NO CARRIER'
ABORT VOICE
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT DELAYED
'' ATZ
OK AT+CPIN? READY-AT+CPIN=WXYZ-OK '\d\d\dAT+CREG?' '+CREG: 0,1'-''
OK 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0'
OK 'AT+CGDCONT=1,"IP","internet.vodafone.net"'
SAY "Calling Vodafone 3G Service\n"
OK 'ATDT*99***1#'
CONNECT

Még annyi kérdésem lenne, hogy miután a script leellenőrizte, hogy kell-e PIN kód (és ha kell megadta), és a hálózatba való regisztrációt ellenőrzi, de valamiért nem '+CREG: 0,1' választ kap, akkor essen hasra a szkript, ne jusson tovább az adott pontról. (ABORT, BREAK, vagy mi szükséges hozzá?) Ha pedig a megfelelő választ kapja, akkor pedig csak üres sztringet küldjön, hogy a visszakapott OK státusszal folytathassa a párbeszédet a következő sorban.

-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 13.1 | 2.6.34.1-janos

Ez lett belőle végül. A tesztek alapján az elvárható működést nyújtja, bár lehet, hogy nem a legelegánsabb megoldás...

###########################################
# Suggested chat script called by PPPD
# File: /etc/ppp/vodafone-connect
###########################################
TIMEOUT 5
ABORT BUSY
ABORT VOICE
ABORT DELAYED
ABORT 'NO CARRIER'
ABORT '+CREG: 0,2' 
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
'' ATZ
OK AT+CPIN? READY-AT+CPIN=4663-OK '\d\d\dAT+CREG?' '+CREG: 0,1' ''
OK 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0'
OK 'AT+CGDCONT=1,"IP","internet.vodafone.net"'
SAY "Calling Vodafone 3G Service\n"
OK 'ATDT*99***1#'
CONNECT
###########################################

-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 13.1 | 2.6.34.1-janos

ezt hogy lehet megcsinálni, hogy:
OK AT+CPIN? READY-AT+CPIN=4663-OK '\d\d\dAT+CREG?' '+CREG: 0,1' ''
esetén a +CREG: 0,5 is elfogadható érték? (Registered, roaming)


------------------------
uint8_t *data; // tipussal megszorozzuk az adatot. wtf?

Szia!

Én a következők egyikét próbálnám, hátha megy:
OK AT+CPIN? READY-AT+CPIN=4663-OK '\d\d\dAT+CREG?' '+CREG: 0,' ''
Ez elvileg elfogad bármit, ami nem biztos, hogy neked megfelel.

Vagy ezt:
OK AT+CPIN? READY-AT+CPIN=4663-OK '\d\d\dAT+CREG?' '+CREG: 0,1'-AT+CREG?-'+CREG: 0,5' ''

Ennek elvileg el kellene fogadnia a 0,1 és a 0,5 értéket is.

De meg kell valljam, ez a topic több mint 9 éves, akkor a fenti verziót kireszeltem, azóta nem is foglalkoztam ezzel a témakörrel.
-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux current | 4.19.61-janos

én lehet, hogy nem ppp chatscriptben próbálkoznék ezzel, hanem felraknám az expect nevű programot.

OFF: WOW! Egy ideje foglalkozom Linux -al de még nem találkoztam ezzel a jószággal, érdekes.

Viszont a ppp kommunikáció felépítéáséhez mindig a chat programot használják:
$ man chat
chat - Automated conversational script with a modem

Tény, én mindig kivettem a sim kártyából a védelmet.

* Én egy indián vagyok. Minden indián hazudik.