如何在c++linux下获取3g调制解调器信号强度
how to get 3g modem signal strength in c++ linux?
如果不使用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很容易。我希望它能帮助你。
- C++函数包装器来捕获某些信号
- Coursera :自动评分器的未知信号 11
- Coursera自动评分器给了我未知信号11
- 没有信号处理程序的POSIX定时器的目的是什么?
- 运行时错误地址清理器:LEETCODE 中的致命信号
- CPLEX MIP 优化器崩溃并显示0x9信号
- Linux 计时器挂起信号
- 代码在我的系统中运行良好,但 coursera 自动评分器给了我未知的信号
- 为什么此串行/调制解调器代码弄乱了我的终端显示
- 如何在连接到PC的gsm调制解调器中管理收到的短信?
- 如何解决 Linux 计时器信号处理程序
- Udp 在 QT 定时器信号中写入数据报
- 调用:: C 中的调制解调器的CreateFile总是返回error_sharing_violation
- 如何将数据发送到QT中打开的tty0tty null调制解调器模拟器端口
- 如何在c++linux下获取3g调制解调器信号强度
- Qt:发送AT命令到GPRS调制解调器
- 使用gammu时自动检测调制解调器端口
- WriteFile到调制解调器后的ReadFile只返回通过WriteFile发送的内容
- 如何与GSM调制解调器通信的c++代码
- 在第一次使用ISDN调制解调器(c#)拨号时挂断电话