0

기기의 RSSI 및 보정 된 전송 전력을 고려할 때 BLE 장치에 대한 예상 범위를 얻으려고합니다.Android BLE iBeacon 광고 패킷이 예상보다 큰

보정 된 txPower는 아마도 주변 장치 iBeacon 알림 패킷의 마지막 바이트로 방출됩니다. 발견 한 문서에 따르면 이러한 패킷은 길이가 30 바이트 여야합니다.

그러나 패킷에 대해 반환 된 byte[] 길이는 62 바이트입니다. 이 때문에 광고 데이터의 형식을 알 수 없습니다.

왜 이런 일이 벌어지고 62 바이트 패킷의 형식을 해독 할 수 있습니까?

답변

0

BLE 장치를 검색 할 때 Android API는 원시 광고 PDU뿐만 아니라 스캔 응답 PDU의 바이트도 반환합니다. 후자는 스캐닝 API에 의해 반환 된 바이트 배열에서 전자의 끝에 고정됩니다.

바이트 배열이 비콘 필드에 액세스하면 끝에서 음수 오프셋을 사용할 수 없습니다. 처음부터 양수 오프셋을 사용하는 것이 더 신뢰할 수 있지만, 심지어 당신이 신경 쓰는 제조자 광고 PDU 앞에 비정상적인 PDU가 삽입되면 실패 할 수도 있습니다.

100 % 신뢰성을 얻으려면 모든 PDU를 분석하고 제조업체의 광고를 찾은 다음 해당 바이트를 확인해야합니다. Android Beacon Library을 작성할 때 어려운 방법을 알게되었습니다. 오픈 소스이기 때문에 자신의 스캔을 굴리려는 경우에도 어떻게 스캔 하는지를 확인하는 것이 좋습니다.

+0

이상합니다. 주변 장치의 교정 된 txPower를 얻는 간단한 방법이 있습니까? 보정 상수는 광고에서 필요한 모든 것입니다. – Orbit

+0

보급 알림의 바이트에서 상수를 가져와야합니다. PDU를 파싱하는 것보다 간단한 해결책은 정적 iBeacon 접두사의 바이트 패턴을 검색 한 다음 거기에서 오프셋을 기반으로하는 교정 상수를 찾는 것입니다. 이 접근법의 단점은 바이트 시퀀스가 ​​광고의 다른 위치에도 나타날 수 있으므로 기술이 실패하게됩니다. – davidgyoung