Estou tendo um problema com o pppd call provider
comando com um modem compatível com Hayes.
A versão do PPPD é a 2.4.7 que acredito ser a mais recente.
Ele falha apenas quando desligo o modem (ou seja, não responde a nenhum comando AT).
Meu script de bate-papo é simples:
ABORT "BUSY"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
TIMEOUT 30
"" AT
OK ATE0
...
Quando o modem é desligado, pppd call provider
emite isto:
... #bunch of pppd configurations
abort on (BUSY)
abort on (NO CARRIER)
abort on (NO DIALTONE)
abort on (ERROR)
abort on (NO ANSWER)
timeout set to 30 seconds
send (AT^M)
expect (OK)
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@....
Aqui eu tenho totalmente confuso.
Fatos:
- modem está desligado
- se eu mandar "" para o modem com minicom , ele não responde (como eu esperava)
- ^@ é impresso para sempre, não para após 30 segundos. Eu tenho que matá-lo manualmente com
killall -9 chat; killall -9 pppd
Mesmo se eu mudar "" AT
a linha para OK AT
(espere OK antes de enviar AT), esses caracteres ^@ estão chegando:
...
timeout set to 30 seconds
expect (OK)
^@^@^@^@^@^@^@^@^@^@...
Agora eu também testei catting este dispositivo:
cat /dev/ttyS0
^C
Esperei por mais de 10 segundos e nada foi impresso.
Então minhas perguntas são:
- O programa de chat deve dar erro se não receber a resposta esperada, por que este não está fazendo isso? (obviamente não recebe o OK)
- Por que é
^M
impresso após oAT
comando na saída? (Eu fiz dos2unix para o script de chat)
Você pode ter que ajustar S3 e S4 (configurações de CR e LF do modem) para corresponder ao esperado pelo software que está usando - ou ajustar as configurações do software de acordo.
Observe que ^@ é uma possível representação de ascii nul - o software tenta ler a porta serial, mas falha e obtém um caractere nulo da leitura ou falha em reconhecer o resultado de leitura vazio, mexendo na string end nul (0x00) - ou qualquer variação disso.
ref: https://en.wikipedia.org/wiki/Hayes_command_set