일부 AT
명령은 wvdial
응답 반환을 지연합니다. 이번에는 명령에 따라 다릅니다. 예를 들어, 사용 가능한 네트워크를 검색하려는 경우 이 AT+COPS=?
명령을 사용할 수 있습니다. 스캔 프로세스는 약 30초가 소요되지만 wvdial
완료될 때까지 기다리지 않고 명령을 다시 보냅니다. 두 번째 시도 후에 wvdial
포기했고 다음과 같은 오류가 발생했습니다.
# wvdial info-scan
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: AT+COPS=?
--> Re-Sending: AT+COPS=?
--> Modem not responding.
잠시 후(30초) 다른 명령을 실행하여 이 작업을 수행할 수 있습니다. wvdial
어떤 명령이든 가능합니다. 예를 들어 ATZ+CFUN=1
모뎀이 이미 켜져 있으면 아무 작업도 수행하지 않지만 명령을 보낸 후 이전 명령의 출력을 얻습니다.
# 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
그렇다면 명령에 대한 일종의 시간 초과를 설정하여 지연된 응답을 얻을 수 있는 방법이 있습니까?
답변1
나는 약 40초 또는 1분 동안 기다리는 Python 스크립트를 생성하는 몇 가지 트릭을 사용하여 이 문제를 해결했습니다.
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"])