2012-12-06 2 views
2

블루투스 연결의 RSSI를 얻는 방법에 대한 많은 stackoverflow 게시물을 읽었습니다. 안드로이드가 어떤 API를 통해서도이를 직접적으로 드러내지 않으며, 유일한 희망은 바로 bluez API에 곧바로 도달하는 것입니다. 나는이 사용 hcitool을하려고 할 때마다 그러나hcitool과 블루투스 연결의 RSSI가 충돌하여 충돌이 발생했습니다.

hcitool rssi E8:06:88:2F:D1:4E 

, 나는 점점 오전 : 당신이 블루투스 장치와 연결이되면

분명히, 당신은 같은 RSSI 또는 링크 품질을 얻을 수 hcitool을 사용할 수 있습니다 세그멘테이션 오류 :

130|[email protected]:/system/bin # hcitool rssi E8:06:88:2F:D1:4E 
RSSI return value: 0 
[1] + Stopped (signal)  hcitool rssi E8:06:88:2F:D1:4E 

내가 대신 BluetoothAdapter의, hcitool와의 연결을 만들려고해도 :

130|[email protected]:/system/bin # hcitool cc E8:06:88:2F:D1:4E 
Can't create connection: I/O error 
http://code.google.com/p/androidobex/downloads/detail?name=hcitool

그러나, 그것은 "안드로이드 데브 폰 버전"내가 분명히 G1보다 새로운 무언가를 사용하고 말한다 :

나는 hcitool의이 버전을 사용하고있다. 그러나 hcitool의 다른 버전을 찾을 수 없습니다.

+1

에서 누군가 도움이 될 것입니다

희망. com/forum /? fromgroups = #!topic/android-developers/8qXyalWHadY – TJD

+1

연결의 RSSI 값을 가져올 수 없으면 검색에서 검색 가능한 모드의 장치의 RSSI 만 가져올 수 있습니다. – gnychis

답변

1

hcitool 소스는 bluez 스택의 일부입니다. 올바른 버전의 Linux 공유 라이브러리에 대해 컴파일하려면 Android NDK가 필요합니다. 나는 4.0.4를위한 전체 안드로이드 소스를 다운로드했다, 그것의 거대한 얼룩, 그러나 그것은 효과적이다.

3

클럽에 오신 것을 환영합니다! 나는 hcitool에 똑같은 문제가있다. 문제는 잘못된 구현입니다.

나중에 ioctl() cmd에서 사용되는 각 명령에 대해 (cr) 할당 된 구조가 있습니다. 커널 구현을 살펴본 결과 필요한 바이트 수가 제공된 것보다 큽니다.

현재 저는 이것을 패치 할 수 없으므로, 각 malloc() 호출을 수정하여 안전 여백으로 100 바이트를 추가로 할당하는 간단한 lib를 작성했습니다. 그리고 어떤 충돌이 발생하지 :

#!/bin/bash 

if [ ! -z "$1" ]; then 
    export LD_PRELOAD="libmemsafe.so" 
    hcitool cc $1 
    hcitool rssi $1 
    hcitool lq $1 
    hcitool tpl $1 0 
    hcitool tpl $1 1 
else 
    echo "Usage: $0 <btAddr>" 
fi 
: 다양한 값을 얻을 수

gcc memsafe.c --shared -fPIC -O2 -ldl -o libmemsafe.so 

을 그리고 자신에게 bash는 스크립트를 작성 :

#define _GNU_SOURCE 

#include <stdio.h> 
#include <dlfcn.h> 

static void* (*real_malloc)(size_t)=NULL; 


void *malloc(size_t size) { 
    if (!real_malloc) { 
     real_malloc = dlsym(RTLD_NEXT, "malloc"); 
    } 

    return real_malloc(size + 100); 
} 

컴파일하려면 다음 줄을 사용 (또는 필요한 경우 귀하의 크로스 컴파일러를 삽입)

hcitool을 직접 컴파일 할 수있는 경우 다음과 같은 모든 줄을 찾습니다.

... 그리고으로 변경 ...

cr = malloc(sizeof(*cr) + sizeof(struct hci_conn_info) + 100); 

올바른 크기를 추정하는 데 관심이있는 경우, 구현을 수정 해 주시기 바랍니다. https://groups.google :이 답변은 아직 할 수 또는 여기에 설명 된대로`BluetoothDevice.EXTRA_RSSI` 메커니즘 반대로 당신이 hcitool를 사용해야 할 이유는 미래

관련 문제