ZTE 3gモデムがあります。接続を確立するには、携帯電話会社が提供するダイヤラを使用してください。 ppp接続が有効になったら、いくつかのATコマンド(信号強度クエリなど)を送信したいと思いますAT+CSQ
。しかし、私が使用しているダイヤラは、モデム/dev/ttyUSB0
にATコマンドを送信するためのコマンドポートであるポートをロックします。もしそうなら、接続がアクティブになった後にコマンドを送信する方法はありますか?
編集:追加のポート/dev/ttyUSB1も試しました。ただし、ポートはモデムから任意のデータを送信しています。以下に例を示します。
T^PREFMODE??
^PREFMODE:8
OK
TC
^DSDORMANT:1
+CSQ:19, 99
OK
T^SYSINFO
^SYSINFO:2,3,0,4,255
OK
TT^SYSINFO?
^SYSINFO:2,3,0,4,255
私のコマンドを追加しようとしましたが、出力も得ました。しかし、反応はあまりありませんでした。ほとんどの場合、ATコマンドは目立たない。
答え1
デバイスがpppトラフィックに使用されている限り、ATコマンド1を同時に実行することはできません。したがって、すべての最新のモデムは、/dev/ttyUSB0 および /dev/ttyUSB1 (または Linux の USB CDC モデムの場合 /dev/ttyACM0 および /dev/ttyACM1) などの複数のシリアルインタフェースを提供します。
電話にRS-232互換コネクタ(IrDAが取り付けられている可能性があります)があったとき、3GPPは多重化プロトコルを次のように標準化しました。07.10物理的な制限を克服するためにPCに特別なドライバが必要でしたが、決して成功しませんでした。今日、USBのユニークな多重化機能を使用すると、複数のシリアルインタフェース(通常は2つのみ提供)を提供しない理由はありません。
コメントですでに述べたように、別のシリアルデバイスを使用する必要があります/dev/ttyUSB1
。
1理論的には、モデムは、+++
接続中にATコマンドを実行できるようにエスケープをサポートできます。ただし、これらのコマンドを挿入して応答を抽出するには、任意の方法でダイヤラを変更する必要があります。 。
答え2
さらに、多くのモデムは、単一の物理uartに複数の仮想uartを実装するためにマルチプレクサ層をサポートしています。
通常、モデムで mux を設定するには at コマンド (AT+CMUX) が必要で、pppos に 1 つの仮想ポートを使用し、at コマンドに別の仮想ポートを使用できます。
これは、多重化層のホスト側を実装するLinuxドライバです。 https://www.kernel.org/doc/html/latest/driver-api/serial/n_gsm.html