5

不使用 AT 命令如何获得 3g 调制解调器的信号强度?NetworkManager的gdbus 对象没有像getSignalStrength. 网络管理器正在锁定设备文件以防止使用 AT 命令。

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

nmcli是 nm-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端口。所以当 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 会定期轮询调制解调器以获取信号质量吗?

A. 这取决于所使用的调制解调器;如果调制解调器支持未经请求的质量变化指示,我们将使用它们;否则 MM 将每 30 秒轮询一次信号质量值。一旦我们获得新值(或多或少),界面中的属性值将被更新。——亚历山大·莫尔加多

于 2013-06-27T15:56:56.247 回答
2

NetworkManager 使用ModemManager进行移动宽带调制解调器控制。您可以查看ModemManager API,而不是查看 NetworkManager DBus 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 回答