web-dev-qa-db-fra.com

Comment envoyer des commandes AT à un modem sous Linux?

Sous Linux (Ubuntu), j'essaie d'envoyer des commandes AT à un modem à /dev/ttyACM0. J'ai essayé de le faire comme:

Sudo socat - /dev/ttyACM0

mais lorsque je tape quelque chose, je reçois juste une ligne répétant cette commande (je m'attends à un OK).

Quand je fais

Sudo minicom modem1

cela semble fonctionner. Je tape un AT et j'obtiens un OK. Je tape de la merde, j'obtiens un ERROR.

Il paraît que modem1 pour minicom est en quelque sorte configuré pour utiliser le modem à /dev/ttyACM0.

Comment puis-je utiliser socat pour envoyer des commandes AT? Dois-je configurer quelque chose? Peut-être puis-je utiliser des configurations pour modem1 de minicom (je ne sais pas comment trouver/voir cette configuration)?

Information additionnelle

La commande socat donnée est-elle correcte? Dois-je jouer avec certaines options? Avec le -v option je vois ce qui suit:

AT
> 2013/10/23 17:10:28.917413  length=3 from=0 to=2
AT
< 2013/10/23 17:10:28.921598  length=3 from=0 to=2
AT
AT
ksjdhfjdgfhjkdfh
> 2013/10/23 17:10:30.244923  length=17 from=3 to=19
ksjdhfjdgfhjkdfh
< 2013/10/23 17:10:30.251383  length=29 from=3 to=31
ksjdhfjdgfhjk\b \bd\b \bf\b \bh\b \b
ksjdhfjdgfhj 

Le périphérique lui-même se trouve avec la sortie dmesg suivante:

[5983726.808063] usb 2-1: USB disconnect, device number 3
[5983730.800021] usb 2-1: new full-speed USB device number 4 using uhci_hcd
[5983730.920014] usb 2-1: device descriptor read/64, error -71
[5983733.629524] usb 2-1: New USB device found, idVendor=0572, idProduct=1329
[5983733.629533] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[5983733.629539] usb 2-1: Product: USB Modem
[5983733.629544] usb 2-1: Manufacturer: Conexant
[5983733.629549] usb 2-1: SerialNumber: 24680246
[5983733.632673] cdc_acm 2-1:1.0: ttyACM0: USB ACM device

Et le tty est configuré comme suit:

speed 57600 baud; line = 0;
eof = ^A; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo -echoe
13
Alex

Essayez socat - /dev/ttyUSB2,crnl

Cela indique à socat d'envoyer un retour chariot ainsi qu'un saut de ligne.

Clarification - cela remonte aux jours sombres des machines à écrire électriques, où vous auriez à lui dire de ramener le chariot à la position 0 sur la page - ergo, un retour de chariot - ainsi que de le dire pour déplacer le papier d'une ligne vers le haut.

9
Aaron Mason

La meilleure façon d'envoyer des commandes AT à un modem sous Linux est d'utiliser le programme atinout qui est écrit dans le seul but d'envoyer AT commandes vers un modem à partir de la ligne de commande.

Vous pouvez l'utiliser pour tester si un modem est opérationnel , faire une sauvegarde du répertoire téléphonique:

$ atinout - /dev/ttyACM0 ten_first_phonebook_entries.txt <<EOF
at+cscs="UTF-8"
at+cpbs="SM"; +cpbr=1,10
at+cpbs="ME"; +cpbr=1,10
EOF
$

ou toute autre chose que vous utilisez des commandes AT pour.

5
hlovdal

Je suis tombé sur ce post de projet Chromium qui montre ce que vous voulez. Il est intitulé: Débogage d'un modem cellulaire .

extrait de cette page

Communiquer directement avec un modem avec le jeu de commandes AT

La plupart des modems prennent en charge AT commandes qui contrôlent le modem et demandent des informations. Sur un appareil Chromium OS avec le mode développeur activé, vous pouvez utiliser la commande socat pour communiquer avec le modem. Vous avez besoin d'un Chromium Périphérique OS avec une image de test installée (ou vous pouvez utiliser gmerge socat si vous êtes familier avec le serveur de développement). Par exemple:

  • Tapez CTRL + ALT + T pour entrer dans la coquille crosh.
  • Tapez Shell pour entrer dans le shell bash.
  • Déterminez avec quel périphérique USB utiliser: ls/dev/ttyACM */dev/ttyUSB *
  • Arrêter le gestionnaire de modem s'il est en cours d'exécution: Sudo stop modemmanager
  • Tapez Sudo socat -/dev/ttyACM1, crnl ou Sudo socat -/dev/ttyUSB0 pour communiquer avec le modem.
  • Assurez-vous que le modem est activé avec la commande: "AT + CFUN = 1"

Par exemple:

    crosh> Shell
    chronos@localhost ~ $ Sudo stop modemmanager
    chronos@localhost ~ $ ls /dev/ttyACM* /dev/ttyUSB*
    /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
    chronos@localhost ~ $ socat - /dev/ttyUSB1
    ATZ
    OK
    AT+CFUN=1
    OK
    ATI
    Manufacturer: Qualcomm Incorporated
    Model: ......
    Revision:....
    ESN: 0x80d...
    +GCAP: +CIS707A, ....

    chronos@localhost ~ $ 

Selon le modem, vous pouvez essayer différentes commandes AT, par exemple "AT + CGMI", "AT + CGSN", etc.

4
slm