Como enviar comandos AT para um modem no Linux?

13

No Linux (Ubuntu), estou tentando enviar comandos AT para um modem em /dev/ttyACM0. Eu tentei fazê-lo como:

sudo socat - /dev/ttyACM0

mas ao digitar qualquer coisa, recebo uma linha repetindo esse comando (espero um OK).

Quando eu faço

sudo minicom modem1

parece funcionar. Eu digito ATe recebo um OK. Eu digito uma porcaria, recebo um ERROR.

Parece que o modem1minicom está 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 as configurações modem1do minicom (não sei como encontrar / ver esta configuração)?

Informação adicional

O socatcomando fornecido está correto? Devo jogar com algumas opções? Com a -vopção, 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 está configurado da seguinte maneira:

speed 57600 baud; line = 0;
eof = ^A; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo -echoe
Alex
fonte
talvez você consiga trabalhar com essas opções do TERMIOS , mas nunca verifiquei.
23413 Alex
Pesquise neste site procurando por "socat modem", existem 5 ocorrências, veja se alguma delas é útil. Eu não tenho uma configuração para testá-las, então não posso ajudar além disso. ( unix.stackexchange.com/search?q=socat+modem )
slm
As dicas não são úteis. Parece que tenho um problema básico real, porque o socat deve funcionar. Funcionou antes. Mas eu não sei qual é o problema. O comando acima está correto é minha primeira pergunta.
23413 Alex

Respostas:

9

Tentar socat - /dev/ttyUSB2,crnl

Isso informa ao socat para enviar um retorno de carro e 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 à posição 0 na página - portanto, um retorno de carro - e também para mover o papel uma linha .

Aaron Mason
fonte
5

A melhor maneira de enviar comandos AT para um modem no Linux é usar o programa atinout, que é escrito com o único objetivo de enviar comandos AT para um modem a partir da linha de comando.

Você pode usá-lo para testar se um modem está instalado e funcionando , faça 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 para a qual você use os comandos AT.

hlovdal
fonte
4

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

trecho dessa página

Comunicação direta com um modem com o conjunto de comandos AT

A maioria dos modems suporta comandos AT que controlam o modem e solicitam informações. Em um dispositivo Chromium OS com o modo de desenvolvedor ativado, você pode usar o comando socat para se comunicar com o modem. Você precisa de um dispositivo Chromium OS com uma imagem de teste instalada (ou pode usar o gmerge socat se estiver familiarizado com o servidor de desenvolvimento). Por exemplo:

  • Digite CTRL + ALT + T para inserir o shell crosh.
  • Digite shell para inserir o shell bash.
  • Figura em qual dispositivo USB usar: ls / dev / ttyACM * / dev / ttyUSB *
  • Pare o gerenciador de modem se estiver em execução: sudo stop modemmanager
  • Digite sudo socat - / dev / ttyACM1, crnl ou sudo socat - / dev / ttyUSB0 para se comunicar com o modem.
  • Verifique se o modem está ativado com o comando: "AT + CFUN = 1"

Por exemplo:

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

Dependendo do modem, você pode tentar diferentes comandos AT, por exemplo, "AT + CGMI", "AT + CGSN", etc.

slm
fonte
1
Nenhum comando AT está funcionando! Esse é meu problema! Preciso configurar alguma coisa? A linha de comando está ok? Eu cometi algum grande erro?
23413 Alex
@ Alex - como eu disse, não tenho nenhum desses hardwares, por isso é difícil ajudá-lo a fornecer informações como essa. Você terá que depurá-lo. Eu tentaria ligar e desligar os dispositivos em questão e verificar se eles estão travados. Procure informações no dmesglog. Desculpe, não posso ajudá-lo mais do que isso.
slm
1
Você não pode simplesmente repetir "AT + DONTREMEMBERZMODEM"> / dev / modemtty?
mikeserv