5

AT コマンドを使用せずに、どうすれば 3g モデムの信号強度を取得できますか? NetworkManagerのgdbus オブジェクトには、 のようなメソッドはありませんgetSignalStrength。ネットワーク マネージャがデバイス ファイルをロックしているため、AT コマンドを使用できません。

nm-applet は、システム トレイに信号強度を表示できました。したがって、ネットワークマネージャーから信号強度を取得する方法があるはずです!

nmclinm-applet のコマンドラインカウンター部分です。を使用して信号強度を取得できますnmcliか? そのマニュアルページには、信号強度については何も言及されていません。

4

3 に答える 3

4

ついに答えが出ました!

C++ では、libnm-glib を使用して dbus プロキシを操作します。コマンドラインから使用..

gdbus call --system --dest org.freedesktop.ModemManager --object-path /org/freedesktop/ModemManager/Modems/0 --method org.freedesktop.ModemManager.Modem.Gsm.Network.GetSignalQuality

gsm モデムの信号強度を示します。

接続中に MM が信号品質を取得できないと言う場合、それはすべてのコマンドとデータに対して AT ポートが 1 つしかないためです。そのため、AT ポートが接続されている場合、AT コマンドを送信して信号品質を収集することはできません。より多くの AT ポートを備えたより優れたモデムを入手するか、QMI または MBIM を搭載したものなどの非 AT モデムに切り替える必要があります。-- アレクサンダー・モルガド

org.freedesktop.ModemManager.Modem.Gsm.Network.GetSignalQualityを使用して信号を聞くことができます

gdbus monitor --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager/Modems/0

Q. プロキシは、信号強度が変化するたびに非同期で信号を送りますか、それとも ModemManager は定期的にモデムをポーリングして信号品質を取得しますか?

A. 使用しているモデムによって異なります。モデムが未承諾の品質変更指示をサポートしている場合は、それらを使用します。それ以外の場合、MM は 30 秒ごとに信号品質値をポーリングします。インターフェイスのプロパティ値は、新しい値を取得すると (多かれ少なかれ) 更新されます。-- アレクサンダー・モルガド

于 2013-06-27T15:56:56.247 に答える
2

NetworkManager は、ModemManagerを使用してモバイル ブロードバンド モデムを制御します。NetworkManager DBus API を見る代わりに、信号品質を含む接続/登録の詳細を実際に公開するModemManager API を見ることができます。

C++ を使用してモデムから情報を収集するアプリケーションを開発する場合は、libmm-glib (GLib ベースのライブラリ) を使用して ModemManager DBus API に透過的にアクセスすることをお勧めします (つまり、DBus を知る必要はありません)。

于 2014-11-18T17:15:56.200 に答える
-1

私は宿題に取り組んでいました。そこでは、建物内のアクセス ポイントの信号強度を使用して屋内の場所を特定する必要がありました。使っていました

iwlist wlan0 スキャン

コマンドを使用して、近くのアクセス ポイントの信号強度を取得します。次に、その出力を Bash で処理し、それを C++ 実行可能ファイルにリダイレクトしました。これは Bash では簡単です。お役に立てば幸いです。

于 2013-06-26T19:27:30.350 に答える