Como enviar comandos AT para um modem no Linux?

6

No Linux (Ubuntu) estou tentando enviar comandos AT para um modem em /dev/ttyACM0 . Eu tentei fazer isso como:

sudo socat - /dev/ttyACM0

mas ao digitar qualquer coisa eu apenas obtenho uma linha repetindo este comando (eu espero um OK ).

Quando faço

sudo minicom modem1

parece funcionar. Eu digito um AT e obtenho um OK . Eu digito alguma porcaria, eu recebo um ERROR .

Parece que modem1 para minicom é de alguma forma configurado para usar o modem em /dev/ttyACM0 .

Como posso usar o socat para enviar comandos AT? Preciso configurar alguma coisa? Talvez eu possa usar configurações para modem1 do minicom (não sei como encontrar / ver essa configuração)?

Informações adicionais

O comando socat especificado está correto? Devo brincar com algumas opções? Com a opção -v , vejo o seguinte:

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 

O dispositivo em si é encontrado com a seguinte saída dmesg:

[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

E o tty é configurado da seguinte forma:

speed 57600 baud; line = 0;
eof = ^A; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo -echoe
    
por Alex 23.10.2013 / 14:26

3 respostas

4

Me deparei com este post do projeto Chromium que mostra o que você deseja. É intitulado: Depurando um modem celular .

trecho dessa página

Communicating directly with a modem with the AT command set

Most modems support AT commands which control the modem and query for information. On a Chromium OS device with the developer mode enabled, you can use the socat command to communicate with the modem. You need a Chromium OS device with a test image installed (or you can use gmerge socat if you are familiar with the dev server) . For example:

  • Type CTRL+ALT+T to enter the crosh shell.
  • Type shell to enter the bash shell.
  • Figure you which USB device to use with: ls /dev/ttyACM* /dev/ttyUSB*
  • Stop modem manager if it is running: sudo stop modemmanager
  • Type sudo socat - /dev/ttyACM1,crnl or sudo socat - /dev/ttyUSB0 to communicate with the modem.
  • Ensure that the modem is enabled with the command: "AT+CFUN=1"

For example:

    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 ~ $ 

Depending on the modem, you can try different AT commands, e.g. "AT+CGMI", "AT+CGSN", etc.

    
por 23.10.2013 / 16:59
4

Experimente socat - /dev/ttyUSB2,crnl

Isso diz ao socat para enviar um retorno de carro, assim como um avanço de linha.

Esclarecimento - isso remonta aos dias sombrios das máquinas de escrever elétricas, onde você teria que dizer para rolar o carro de volta para a posição 0 na página - ergo, um retorno de carro - bem como dizendo para mover o papel uma linha.

    
por 15.01.2015 / 02:00
2

A melhor maneira de enviar comandos AT para um modem no Linux é usar o programa no que é escrito com o único propósito de enviando comandos AT para um modem a partir da linha de comando.

Você pode usá-lo para testar se um modem está em funcionamento , fazer um backup da lista telefônica:

$ 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 qualquer outra coisa que você usa os comandos AT para.

    
por 09.05.2015 / 19:27