2013-10-23 7 views
3

우리 회사의 대형 로봇 프로젝트의 일환으로 무선 (WiFi) 라우터 역할을하는 소형 임베디드 리눅스 시스템이 있습니다. 별로 중요하지 않지만 5.8GHz 무선 A (다른 장비와의 간섭을 막기 위해)와 900MHz를 말하는 또 다른 특수 카드로 구성된 카드 하나가 있습니다.무선 인터페이스 RSSI (신호 강도) 번호가 프로그래밍 방식으로 hostapd가있는 Linux에 있습니까?

우리의 제어 태블릿은 5.8에 연결되고 패킷은 900MHz의 로봇에 릴레이됩니다. 따라서 태블릿과 로봇 모두 라우터 박스를 액세스 포인트로 사용하므로 hostapd를 실행하고 있습니다. 사용자 인터페이스의 일부로 시스템의 다른 구성 요소에서 RSSI (신호 강도/잡음/기타) 정보를 수집하여 모두 표시하려고합니다.

로봇 (Linux도 실행)은/proc/net/wireless를 읽고이를 읽은 번호를 제어 타블렛으로 보냄으로써이를 수행합니다. 그러나 라우터 상자에서 카드가 AP 모드 (hostapd가 실행 중)로 구성되어 있으면/proc/net/wireless에 두 인터페이스에 대한 줄이 있지만 모든 값은 0입니다.

iw 스테이션 덤프 그것은 일부 RSSI 번호를 뱉어 내지 만, 나는 이것의 출력을 grepping하는 것에 정말로 의지하고 싶지 않다. 나는 (실시간 커널을 작성한) 다소 능력있는 C 프로그래머 (IMHO)이며 커널에서이 정보를 얻는 가장 좋은 방법은 무엇인지 궁금하다. 나는 WEXT ioctl 인터페이스를 사용하는 것에 대해 조금 알고 있습니다. 그러나 API가 사용되지 않고 새로운 무선 구성/관리 시스템이 단계적으로 도입되고 있음을 알게되었습니다.

WEXT를 사용하는 무언가를 쓸 수 없게되었습니다. 우리의 임베디드 리눅스 설치를 최신 상태로 유지하지 못하고 있습니다. 그러나 누군가 새로운 튜토리얼/리소스를 가르쳐 줄 수 있다면 새로운 API가 될 것이라고 나는 그것을 고맙게 생각합니다. hostapd와 친절은/proc/인터넷/무선 작업을 할 수있는 방법이 있는지 아니면, 내가 너무 걸릴 것 : P

답변

1

SIOCGIWSTATS/proc/net/wireless

은/리눅스/무선을 포함에서 당신에게 통계를 줄 것이다. 시간 그러나

#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)

을 참조하십시오.