Newsgroup: it.comp.os.linux.iniziare
Titolo: Comunicare col modem: chat e controllo baud

Il mio modem:
nokia 6230 collegato via usb al pc ---> /dev/ttyACM0 usando i
moduli cdc-acm.
Con programmi di comunicazione come minicom o pppd si riesce a
controllare il baud ovvero la "velocita" con cui comunicare col
modem. Con minicom questo viene impostato in fase di
configurazione della porta /dev/ttyACM0, mentre con pppd si
definisce o in uno script oppure anche da riga di comando:
pppd /dev/ttyACM0 57600
dove 57600 è appunto il valore del baud in bps.
Per vari motivi ho bisogno di comunicare col modem piuttosto
lentamente. Quindi in certi casi, mi occorre impostare il baud
piuttosto basso.
Ok, mettiamo un'attimo da parte tutto questo.
---
Sto facendo alcune prove di invio dei comandi AT al modem e
valutazione delle rispsote che ritorna.
Ho provato a fare uno script bash capace di inviare comandi AT
appunto e guardare quale sia l'esito del comando inviato, quindi
prendere alcune decisioni eseguendo un'operazione piuttosto che
un'altra.
Per comunicare al modem i comandi ho utilizzato il programma
"chat" reindirizzando l'input e l'output al/dal device
/dev/ttyACM0. La sessione può essere guardata dal terminale
(std-output) con un semplice "cat" sul /dev/ttyACM0:
in pratica da un terminale invio i comandi e in un'altro guardo
quello che riceve e risponde.
Per tradurre tutto questo in uno script ho rediretto l'output e
l'error del cat verso un file di testo, su questo file viene
valutato automaticamente il responso del modem usando grep.
A scanso d'equivoci prima dell'invio di ogni comando con chat, il
file di testo viene riplito con "echo > $LOG" dove appunto $LOG è
il nostro file di testo.
In pratica una cosa del genere:
===
LOG=/home/johnny/chat.prove/log
cat /dev/ttyACM0 > $LOG 2>&1&
echo > $LOG
chat -v -t 10 "" 'AT+CGATT?' > /dev/ttyACM0 < /dev/ttyACM0
while ! grep '+CGATT: 1' $LOG; do
 sleep 5
 echo > $LOG
 chat -v -t 10 "" 'AT+CGATT=1' > /dev/ttyACM0 < /dev/ttyACM0
 sleep 2
 echo > $LOG
 chat -v -t 10 "" 'AT+CGATT?' > /dev/ttyACM0 < /dev/ttyACM0
 sleep 2
done
===
---------
Bene ora facendo mente locale su quanto detto all'inizio a
proposito del baud cerco di riassumere la mia domanda cui spero
possiate rispondere:
il comando
chat -v -t 10 "$EXPECT" "$SEND" > /dev/ttyACM0 < /dev/ttyACM0
invia al device il comando AT che ho chiamato genericamente
"$SEND", senza alcun controllo in merito alla velocità con cui
viene inviato.
Non mi pare che chat invii tutto ciò autoimpostando un certo
valore di baud.
Io vorrei usare chat liscio, in modo da poterlo infilare in uno
script bash come esemplificato sopra, tuttavia vorrei anche
provare ad impostare in qualche modo la velocità con la quale
chat invia la coppia send expect al modem.
Dal man chat non ho trovato nulla.
Potrebbe anche essere che chat si limiti ad inviare coppie send
expect senza preoccuparsi di "come" inviarle, demandando quindi
la velocità di comunicazione ad altri, per esempio a pppd.
Non c'è qualche scappatoia per riuscirvi?
Visto che potrei aver esposto l'argomento in modo un po'
contorto, vi esorto a richiedermi ulteriori precisazioni se
vorreste rispondere ma la mia spiegazione vi frena in qualche
modo.  ;-)          Non esitate!  :-P
Ringrazio in anticipo. Saluti!  :-)
PS. L'argomento è piuttosto tecnico...
    Non è proprio da ICOLI, tuttavia visto l'affollamento del ng
    ho pensato di crosspostare su ICOLS e ICOLI, con "follwup-to:"
    verso ICOLI, spero che sia la scelta giusta.
    Anzi se aveste consigli in merito, non esitate mi raccomando!
    ;-)

 Ringrazio in anticipo. Saluti!  :-)
prima di tutto ripondo alla tua domanda
per cambiare le impostazioni della seriale di un dispositivo seriale si
usa stty
cambiare "solo un parametro" si fa il giochino dela redirezione :
es per cambiare solo il baud
stty speed 19200 </dev/ttyS0 >/dev/ttyS0
per controlare a che punto stanno i parametri settati:
stty </dev/ttyS0
(lo lanci prima e dopo il comando sopra per controllare che sia cambiato
solo quel parametro)
detto questo, mi sembra che il tuo script stia iniziando a voler essere un
po' troppo interattivo per l'uso di bash, quindi: perch nn usi un
linguaggio più completo come python? ;)

 quindi: perch nn usi un linguaggio più completo come python? ;)
Per due motivi:
Perchè alla fine, quando lo script sarà funzionante ed in grado
di controllare "nella maggiorparte dei casi" il modem, non dovrà
essere interattivo, anzi dovrà fare tutto da solo.
Inoltre il mago del python sei tu!  mica io.... ;-)
Avevo iniziato a legiucchiare qualcosa in merito, ma poi alla
fine sono rimasto a quell'inizio senza andare oltre.  :-|
Pazienza, finche riesco a cavarmela con bash mi va bene così
anche se formalmente tante cose sono più semplici da programmare
in python.

 in python.
Un giorno o l'altro dovrai impararlo, visto l'utilizzo che ti piace fare
del pc!

 del pc!
Può essere...  ;-)
Grazie di tutto, per avere un responso sul funzionamento devo
fare un po' di testing.
Saluti.