因此,我们公司有一个小型的嵌入式linux系统,可作为无线(WiFi)路由器,作为大型机器人项目的一部分。没关系,但是它有一张配置为5.8 GHz无线A(以防止干扰其他东西)的卡,另一张配置900MHz的特殊卡可以使我们达到约3公里的距离。
我们的控制平板电脑在5.8上进行连接,并且数据包在900MHz上中继到机器人。因此,平板电脑和机器人都将路由器盒用作访问点,因此我们正在运行hostapd。作为用户界面的一部分,我们希望从系统的不同组件中收集RSSI(信号强度/噪声/等)信息,并将其全部显示出来。
机器人(也运行linux)通过读取/proc/net/wireless然后将其读取的数字发送到控制平板电脑来执行此操作。但是,在路由器盒上,如果将卡配置为AP模式(hostapd正在运行),则/proc/net/wireless的两个接口(interface)均具有线路,但是所有值均为0。
如果我做一个iw站转储,它会吐出一些RSSI编号,但是我真的不想诉诸于grep此输出。我(IMHO)是一位颇有竞争力的C程序员(我已经编写了实时内核),我想知道从内核中获取此信息的最佳方法是什么。我对使用WEXT ioctl接口(interface)有些了解,但是最近我发现不赞成使用API,并且正在逐步采用新的无线配置/管理系统。
我可以写一些使用WEXT的东西,因为我们没有将嵌入式Linux安装更新到最新的水平。但是,如果有人可以指点我的教程/资源来了解新的API,那么我将不胜感激。或者,如果有一种方法可以使/proc/net/wireless与hostapd很好地配合工作,我也可以采用:P
最佳答案
SIOCGIWSTATS
将提供/proc/net/wireless
的统计信息
include/linux/wireless.h
#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
/* SIOCGIWSTATS is strictly used between user space and the kernel, and
* is never passed to the driver (i.e. the driver will never see it). */
但是,要直接从驱动程序获取RSSI值,您需要使用
ioctl
特定于您的wifi驱动程序。例如Broadcom有一个宏
WLC_GET_RSSI
,可以在SIOCDEVPRIVATE
中使用。有关更多信息,请引用OpenWRT源代码(https://dev.openwrt.org/browser/trunk/package/broadcom-wl/src?rev=15242)关于c - 在带有hostapd的Linux中以编程方式设置无线接口(interface)RSSI(信号强度)数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19550357/