不使用AT命令如何获得3g调制解调器的信号强度? gdbus object for NetworkManager没有像getSignalStrength
这样的方法。
网络管理器锁定设备文件,阻止使用AT命令。
nm-applet能够在系统托盘中显示信号强度。所以应该有办法从网络管理员那里获得信号强度!
nmcli
是nm-applet的命令行计数器部分。我可以使用nmcli
获得信号强度吗?其手册页中没有提到信号强度。
答案 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中很容易。我希望它会对你有所帮助。