Comment envoyer des commandes AT à un modem sous Linux?

13

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 ATet j'obtiens un OK. Je tape de la merde, j'obtiens un ERROR.

Il semble que modem1pour 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 que je peux utiliser des configurations pour modem1de minicom (je ne sais pas comment trouver / voir cette configuration)?

Information additionnelle

La socatcommande donnée est-elle correcte? Dois-je jouer avec certaines options? Avec l' -voption, 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
Alex
la source
vous pouvez peut-être le faire fonctionner en jouant avec ces options TERMIOS mais je n'ai jamais vérifié.
Alex
Recherchez dans ce site Web à la recherche de "modem socat". Il y a 5 résultats, voyez si l'un d'eux est utile. Je n'ai pas de configuration pour les essayer, je ne peux donc pas vraiment aider au-delà. ( unix.stackexchange.com/search?q=socat+modem )
slm
Les conseils ne sont pas utiles. Il me semble que j'ai un vrai problème de base, car socat devrait fonctionner. Cela a fonctionné auparavant. Mais je ne sais pas quel est le problème. Est la commande ci-dessus correcte est ma première question.
Alex

Réponses:

9

Essayer 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 deviez lui dire de ramener le chariot en position 0 sur la page - ergo, un retour de chariot - ainsi que de lui dire de déplacer le papier d'une ligne .

Aaron Mason
la source
5

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 des commandes AT à un modem à partir de la ligne de commande.

Vous pouvez l'utiliser pour tester si un modem est opérationnel et 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 pour laquelle vous utilisez les commandes AT.

hlovdal
la source
4

Je suis tombé sur ce post de projet Chromium qui montre ce que vous voulez. Il s'intitule: 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 les commandes AT 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 appareil Chromium OS avec une image de test installée (ou vous pouvez utiliser gmerge socat si vous connaissez 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.

slm
la source
1
Aucune commande AT ne fonctionne! C'est mon problème! Dois-je configurer quelque chose? La ligne de commande est-elle correcte? Dois-je faire une grosse erreur?
Alex
@Alex - comme je l'ai dit, je n'ai aucun de ces matériels, il est donc difficile de vous aider au-delà de la fourniture d'informations comme celle-ci. Vous devrez le déboguer. J'essaierais d'éteindre et d'éteindre les appareils en question et de voir s'ils sont bloqués, consultez le dmesgjournal pour plus d'informations. Désolé, je ne peux pas vous aider plus que cela.
slm
1
Ne pouvez-vous pas simplement faire écho "AT + DONTREMEMBERZMODEM"> / dev / modemtty?
mikeserv