wvdial이 명령에 대한 응답을 기다리도록 지시하는 방법이 있습니까?

wvdial이 명령에 대한 응답을 기다리도록 지시하는 방법이 있습니까?

일부 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"])

관련 정보