如何在c++linux下获取3g调制解调器信号强度

how to get 3g modem signal strength in c++ linux?

本文关键字:调制解调器 信号 3g 获取 c++linux      更新时间:2023-10-16

如果不使用AT命令,我们如何获得3g调制解调器的信号强度?NetworkManager的gdbus对象没有任何类似getSignalStrength的方法。网络管理器正在锁定设备文件,阻止使用AT命令。

nm小程序能够在系统托盘中显示信号强度。所以应该有一种方法可以从网络管理器中获得信号强度!

nmcli是nm小程序的命令行计数器部分。我可以使用nmcli获得信号强度吗?它的手册页中没有提到任何关于信号强度的内容。

终于得到了答案!

在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供电的调制解调器Aleksander Morgado

使用可以收听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将每隔信号质量值为30s。接口中的属性值将一旦我们得到新的值(或多或少),就会更新。——Aleksander Morgado

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

如果目标是开发一个使用C++从调制解调器收集信息的应用程序,我建议使用libmm-glib(基于glib-based库)透明地访问ModemManager DBus API(即不需要知道DBus)。

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

iwlist wlan0扫描

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