wvdialにコマンドへの応答を待つように指示する方法はありますか?

wvdialにコマンドへの応答を待つように指示する方法はありますか?

一部のATコマンドはwvdial応答の返却を遅らせます。今回はコマンドによって異なります。たとえば、利用可能なネットワークを検索する場合は、このAT+COPS=?コマンドを使用できます。スキャンプロセスは約30秒かかりますが、wvdial完了するまで待たずにコマンドを再送信します。 2回目の試行後に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"])

関連情報