在ARM Debian上使用wpa_supplicant 2.4。
有没有办法获得我目前连接的无线网络的分贝或百分比信号电平?
STATUS命令仅返回下列的一组值:BSSID,频率,SSID,ID,模式,pairwise_cipher,group_cipher,key_mgmt这,wpa_state,IP_ADDRESS P2P_DEVICE_ADDRESS,地址,UUID
我之后可以运行SCAN,等待结果并按SSID搜索。但这很慢且容易出错,我想做得更好。
驱动程序应该已经知道这些信息(因为已连接,并调整了节能的传输级别),有没有办法只查询它?
这个问题与通用计算硬件和软件无关。我通过wpa_ctrl.h
标头中定义的C API使用wpa_supplicant,通过一对unix与服务进行交互域套接字(一个用于命令,另一个用于未经请求的事件)。
我不喜欢当前SCAN
+ SCAN_RESULT
解决方案的一个原因是,它不适用于隐藏的SSID网络。扫描找不到网络,因此我没有以这种方式获得信号电平。另一个问题是应用程序启动时出现轻微的视觉故障我的应用由systemd After=multi-user.target
启动。除非是第一次发布,否则Linux已经连接到Wi-Fi了。在我的应用程序的GUI(该产品将具有触摸屏),我渲染类似手机的状态栏,其中包括WiFi信号强度图标。目前,它最初显示最低级别(我知道它已连接,因为STATUS
命令显示SSID),仅在约1秒后我从wpa_supplicant获得CTRL-EVENT-SCAN-RESULTS
事件,运行{{1}命令并将信号强度更新为正确的值。
在API级别上,我的代码很简单。我有两个线程,都调用SCAN_RESULT
,命令线程调用wpa_ctrl_open
,事件线程有一个无限循环调用poll
传递wpa_ctrl_request
描述符和{{1 }事件掩码,后跟wpa_ctrl_get_fd()
和POLLIN
。
这是/ sys / class / net / wlan0中的文件列表:
wpa_ctrl_pending
答案 0 :(得分:2)
您可以通过wpa_supplicant cmd获取已连接wifi的信号电平SIGNAL_POLL
wpa_supplicant会返回:
RSSI=-60
LINKSPEED=867
NOISE=9999
FREQUENCY=5745
RSSI的值是信号电平。
您可以通过wpa_supplicant cmd BSS <bssid>
获取已连接wifi的信号电平。
关于连接的wifi的bssid,你可以从wpa_supplicant cmd STATUS
获得。
答案 1 :(得分:1)
以下命令给出当前站(也称为AP)信号强度:
iw dev wlp2s0 station dump -v
如果您需要C API,只需挖掘iw的source code。
快速浏览一下后,您需要的功能是here
对于broadcom设备,请尝试搜索broadcom wl。它是密切的来源,不知道是否提供了C API。