Existe uma maneira de dizer ao wvdial para esperar pela resposta de um comando?

4

Alguns comandos AT em wvdial retornam suas respostas com um atraso. Este período de tempo depende do comando. Por exemplo, quando você deseja procurar redes disponíveis, você pode usar o comando AT+COPS=? . O processo de varredura demora cerca de 30 segundos, mas wvdial não espera até que seja concluído e reenvie o comando. Após a segunda tentativa, wvdial desiste com o seguinte erro:

# wvdial info-scan
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: AT+COPS=?
--> Re-Sending: AT+COPS=?
--> Modem not responding.

Após algum tempo (30s), posso emitir outro comando via wvdial , pode ser qualquer coisa, por exemplo ATZ+CFUN=1 , que não faz nada quando o modem já está ligado, mas depois de enviar o comando, recebo o comando saída da anterior:

# wvdial modem-start
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ+CFUN=1
+COPS: (2,"T-Mobile.pl","TM PL","26002",2),(1,"T-Mobile.pl","TM
PL","26002",7),(3,"Plus","PLUS","26001",7),
(3,"Play","Play","26006",7),(3,"Orange","Orange","26003",7),
(3,"Play","Play","26006",2),(3,"Orange","Orange","26003",2),
(3,"Plus","PLUS","26001",2),,(0,1,2,3,4),(0,1,2)
OK

Então existe uma maneira de definir algum tempo de espera para os comandos para que eles possam obter a resposta atrasada?

    
por Mikhail Morfikov 29.03.2016 / 19:47

1 resposta

0

Eu resolvi este problema com algum truque para criar este script python, ele irá esperar aproximadamente 40 segundos ou um minuto:

import serial
import subprocess
import time

ser = serial.Serial('/dev/modem0', 460800, timeout=2)

cmd = 'AT+COPS=0\r\n'
ser.write(cmd)
ser.sendBreak()

s = []
time_now = time.time()
while(time.time()-time_now)<=40:
    newdata = ser.read()
    if newdata is not None or newdata!="":
            global s
            s.append(newdata)
ser.close
print "".join(s)

subprocess.Popen(["wvdial"])
    
por 14.11.2017 / 10:23

Tags