2013-10-23 93 views
3

所以,我們已經有了充當無線(WIFI)路由器作爲我們公司一個更大的機器人項目的一部分,一個小的嵌入式Linux系統。這其實並不重要,但它配置爲5.8 GHz無線A(保持它與其他東西干擾),一個卡和900MHz的講話讓我們一〜3公里範圍另一個特別的卡片。無線接口RSSI(信號強度)的號碼編程與hostapd Linux呢?

我們的控制平板電腦連接到5.8,並且數據包被中繼到900MHz的機器人。因此,平板電腦和機器人都使用路由器盒作爲接入點,所以我們正在運行hostapd。作爲我們用戶界面的一部分,我們希望從系統的不同組件收集RSSI(信號強度/噪聲/等)信息,並將其全部顯示出來。

機器人(也運行linux)通過讀取/ proc/net/wireless然後將它讀取的數字發送到控制平板電腦來完成。但是,在路由器盒上,如果卡配置爲AP模式(hostapd正在運行),/ proc/net/wireless對於兩個接口都有線路,但所有值均爲0.

如果我執行iw站轉儲它吐出一些RSSI數字,但我並不想訴諸於這個輸出。我(恕我直言)相當competant C程序員(我寫了一個實時內核),我想知道什麼是最好的方式來獲得這些信息從內核。我知道一點關於使用WEXT ioctl接口,但是我最近發現API被棄用,並且新的無線配置/管理系統正在逐步進入。

我可以逃避寫一些使用WEXT的東西,因爲我們並沒有讓我們的嵌入式Linux安裝更新到最前沿。然而,如果有人可以指示我一個教程/資源,無論新的API將是什麼,我會很感激。或者,如果有一種方法,使的/ proc /淨/無線精美,hostapd的工作,我會拿太:P

回答

1

SIOCGIWSTATS會給你/proc/net/wireless

在include/linux /無線的統計信息。^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 具體到你的無線驅動程序。

Broadcom例如有一個宏WLC_GET_RSSI它可以在SIOCDEVPRIVATE中使用。欲瞭解更多關於此,請參閱的OpenWRT源代碼(https://dev.openwrt.org/browser/trunk/package/broadcom-wl/src?rev=15242