2013-06-26 31 views
5

不使用AT命令如何获得3G调制解调器的信号强度? gdbus object for NetworkManager没有任何方法,如getSignalStrength。 网络管理器正在锁定设备文件以防止使用AT命令。如何在C++ linux中获得3G调制解调器信号强度?

nm-applet能够在系统托盘中显示信号强度。所以应该有一种方法来获得网络管理员的信号强度!

nmcli是nm-applet的命令行计数器部分。我可以使用nmcli获得信号强度吗?在其手册中没有提到信号强度。

回答

0

我正在做一个家庭作业,在那里我必须通过建筑物中的接入点的信号强度来确定室内位置。为了看得到附近的接入点的信号强度我是用

iwlist为wlan0扫描

命令。然后我在Bash中处理它的输出并将其重定向到C++可执行文件,这在Bash中很容易。我希望它能帮助你。

+0

我的设备是3G调制解调器。我可以使用'iwlist ppp0扫描'吗?我会尝试。 – neckTwi

+0

它工作吗?我正在寻找一个C++库来做同样的事情,但我无法做到。虽然我在Android中找到了。然后这样Bash + C++已经有效地解决了我的问题。希望它也适合你。 – Tlos

+0

但我没有尝试它。我正在关注这个[link](http://arachnoid.com/linux/linux_mobile_internet_access.html)。它也可以帮助你。 – neckTwi

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端口。所以当连接AT端口 时,不能发送AT命令来收集信号质量。 您需要使用更多AT端口获得更好的调制解调器,或者将 切换到非AT调制解调器,如QMI或MBIM供电的调制解调器。 - 亚历山大·莫尔加多

人们可以听使用

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

问:代理信号每次有在信号强度的变化asynchonously或ModemManager投票调制解调器定期获得信号质量org.freedesktop.ModemManager.Modem.Gsm.Network.GetSignalQuality信号?答:这取决于正在使用的调制解调器;如果调制解调器支持不请自来的质量改变指示,我们将使用它们;否则MM将轮询每个信号质量值的30秒。一旦我们获得新值(或多或少),界面中的属性值将会更新为 。 - Aleksander Morgado

2

NetworkManager使用ModemManager用于移动宽带调制解调器控制。您可以查看ModemManager,而不是查看NetworkManager DBus API,它将实际公开连接/注册详细信息,包括信号质量。如果使用C++开发应用程序以从调制解调器收集信息,我建议使用libmm-glib(基于GLib的库)透明地访问ModemManager DBus API(即,而不需要知道DBus)。

相关问题