Рекламный пакет Android BLE iBeacon больше, чем ожидалось

Я пытаюсь получить приблизительный диапазон для устройства BLE, учитывая RSSI устройства и откалиброванную мощность передачи.

Откалиброванный txPower предположительно излучается как последний байт в рекламном пакете iBeacon периферийных устройств. Эти пакеты, согласно найденной мной документации, должны иметь длину 30 байт.

Однако возвращенный byte[] для пакета имеет длину 62 байта. Из-за этого формат данных рекламы неизвестен.

Почему это могло происходить и есть ли способ расшифровать формат 62-байтового пакета?


person Orbit    schedule 29.11.2016    source источник


Ответы (1)


При сканировании устройств BLE API-интерфейсы Android возвращают не только байты для PDU необработанной рекламы, но также и PDU ответа на сканирование. Последние прикрепляются к концу первого в массиве байтов, возвращаемом сканирование API.

По этой причине нельзя надежно использовать отрицательное смещение от конца массива байтов для доступа к полям маяка. Использование положительного смещения с самого начала более надежно, но даже это может потерпеть неудачу, если необычные PDU вставлены перед рекламным PDU производителя, который вам нужен.

Для 100% надежности вы должны разобрать все PDU, найти объявленный производителем и просмотреть байты в нем. Я усвоил это на собственном горьком опыте, когда писал Android Beacon Library. Это открытый исходный код, поэтому, даже если вы хотите развернуть собственное сканирование, неплохо было бы посмотреть, как он это делает.

person davidgyoung    schedule 29.11.2016
comment
Это странно. Есть ли более простой способ получить откалиброванный txPower периферийного устройства? Калиброванная константа - это все, что мне нужно от рекламы. - person Orbit; 30.11.2016
comment
Вы должны получить константу из байтов объявления. Более простым решением, чем анализ PDU, является поиск байтового шаблона статического префикса iBeacon, а затем поиск калибровочной константы на основе смещения оттуда. Недостатком этого подхода является то, что последовательность байтов может (случайно) также появиться в другом месте рекламного объявления, что приведет к сбою метода. - person davidgyoung; 30.11.2016