如何在c ++ linux中获得3g调制解调器信号强度?

时间:2013-06-26 13:58:03

标签: c++ linux network-programming gio

不使用AT命令如何获得3g调制解调器的信号强度? gdbus object for NetworkManager没有像getSignalStrength这样的方法。 网络管理器锁定设备文件,阻止使用AT命令。

nm-applet能够在系统托盘中显示信号强度。所以应该有办法从网络管理员那里获得信号强度!

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

3 个答案:

答案 0 :(得分: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供电的调制解调器。 - 亚历山大·莫尔加多

可以使用

收听org.freedesktop.ModemManager.Modem.Gsm.Network.GetSignalQuality信号
gdbus monitor --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager/Modems/0
  

Q值。每当信号强度发生异常变化或者ModemManager定期轮询调制解调器以获得信号质量时,代理是否会发出信号?

     

一个。这取决于使用的调制解调器;如果调制解调器支持未经请求   质量变化指示,我们将使用它们;否则MM会每次都进行投票   信号质量值为30秒。界面中的属性值将是   一旦我们获得新值(或多或少),就会更新。 - 亚历山大·莫尔加多

答案 1 :(得分:2)

NetworkManager使用 ModemManager 进行移动宽带调制解调器控制。您可以查看ModemManager,而不是查看NetworkManager DBus API,这将实际公开连接/注册详细信息,包括信号质量。

如果要使用C ++开发应用程序以从调制解调器收集信息,我建议使用libmm-glib(基于GLib的库)透明地访问ModemManager DBus API(即无需了解DBus)

答案 2 :(得分:0)

我正在做一个家庭作业,我必须通过建筑物中接入点的信号强度来确定室内位置。我正在使用

iwlist wlan0扫描

命令以查看获取附近接入点的信号强度。然后我在Bash中处理它的输出并将其重定向到C ++可执行文件,这在Bash中很容易。我希望它会对你有所帮助。