不使用 AT 命令如何获得 3g 调制解调器的信号强度?NetworkManager的gdbus 对象没有像getSignalStrength
. 网络管理器正在锁定设备文件以防止使用 AT 命令。
nm-applet 能够在系统托盘中显示信号强度。所以应该有一种方法可以从网络管理器中获取信号强度!
nmcli
是 nm-applet 的命令行计数器部分。我可以使用获得信号强度nmcli
吗?其手册页中没有提及信号强度。
不使用 AT 命令如何获得 3g 调制解调器的信号强度?NetworkManager的gdbus 对象没有像getSignalStrength
. 网络管理器正在锁定设备文件以防止使用 AT 命令。
nm-applet 能够在系统托盘中显示信号强度。所以应该有一种方法可以从网络管理器中获取信号强度!
nmcli
是 nm-applet 的命令行计数器部分。我可以使用获得信号强度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 供电的调制解调器。——亚历山大·莫尔加多
可以使用收听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 秒轮询一次信号质量值。一旦我们获得新值(或多或少),界面中的属性值将被更新。——亚历山大·莫尔加多
NetworkManager 使用ModemManager进行移动宽带调制解调器控制。您可以查看ModemManager API,而不是查看 NetworkManager DBus API,它实际上会公开连接/注册详细信息,包括信号质量。
如果目标是使用 C++ 开发应用程序以从调制解调器收集信息,我建议使用libmm-glib(基于 GLib 的库)透明地访问 ModemManager DBus API(即无需了解 DBus)。
我正在做一项家庭作业,其中我必须通过建筑物中接入点的信号强度来确定室内位置。我正在使用
iwlist wlan0 扫描
命令以查看获取附近接入点的信号强度。然后我在 Bash 中处理它的输出并将其重定向到 C++ 可执行文件,这在 Bash 中很容易。我希望它会帮助你。