3

因此,作为我们公司大型机器人项目的一部分,我们有一个小型嵌入式 Linux 系统充当无线 (WiFi) 路由器。这并不重要,但它有一张配置为 5.8 GHz 无线 A 的卡(以防止它干扰其他事物)和另一张 900MHz 的特殊卡,可以为我们提供约 3 公里的范围。

我们的控制平板电脑连接到 5.8,数据包在 900MHz 上中继到机器人。因此,平板电脑和机器人都使用路由器盒作为接入点,因此我们正在运行 hostapd。作为我们用户界面的一部分,我们希望从系统的不同组件中收集 RSSI(信号强度/噪声/等)信息并将其全部显示出来。

机器人(也运行 linux)通过读取 /proc/net/wireless 然后将读取的数字发送到控制平板电脑来执行此操作。但是,在路由器上,如果网卡配置为 AP 模式(hostapd 运行),/proc/net/wireless 两个接口都有线路,但所有值均为 0。

如果我进行 iw 站转储,它会吐出一些 RSSI 数字,但我真的不想求助于 grepping 的输出。我(恕我直言)是一个相当有竞争力的 C 程序员(我写了一个实时内核),我想知道从内核获取这些信息的最佳方法是什么。我对使用 WEXT ioctl 接口有所了解,但是我最近发现 API 已被弃用,并且正在逐步采用新的无线配置/管理系统。

我可以写一些使用 WEXT 的东西,因为我们没有让我们的嵌入式 linux 安装更新到最前沿。但是,如果有人可以为我提供有关新 API 的教程/资源,我将不胜感激。或者,如果有一种方法可以使 /proc/net/wireless 与 hostapd 很好地工作,我也会接受:P

4

1 回答 1

1

SIOCGIWSTATS会给你统计数据/proc/net/wireless

包括/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

于 2014-05-23T08:25:41.050 回答