Что означают ScanPeriod и BetweenScanPeriod в библиотеке AltBeacon? - PullRequest
2 голосов
/ 21 апреля 2019

Соответствуют ли setForegroundScanPeriod и setForegroundBetweenScanPeriod в библиотеке AltBeacon окну сканирования и интервалу сканирования стандарта BLE? Кроме того, относится ли это к событию сканирования для каждого из 3 рекламных каналов, или же сканирование трех каналов будет происходить в окне сканирования?

У меня есть сигнал маяка на одном канале (CH39) каждые 400 мс, и я хочу соответствующим образом настроить окно сканирования и интервал сканирования, чтобы обеспечить максимальную скорость приема пакетов с этими двумя параметрами, которые Android позволяет вам контролировать.

Я также открыт, чтобы попробовать другие предложения по этому вопросу.

Спасибо

1 Ответ

0 голосов
/ 21 апреля 2019

Параметры setForegroundScanPeriod и setForegroundBetweenScanPeriod библиотеки маяков Android представляют собой концепцию высокого уровня, предназначенную для управления:

  1. использование батареи

    Сканирование BLE будет остановлено во время foregroundBetweenScanPeriod, что позволит вам выполнить рабочий цикл сканирования для экономии заряда батареи. Обычно это значение равно 0 для переднего плана и намного более высокому значению (скажем, 5-15 минут) для эквивалентной настройки фона. Параметр «Фон» применяется, когда приложение не на переднем плане или экран выключен, а параметр «Передний план» применяется, когда приложение отображается на освещенном экране.

  2. интервалы поиска маяка

    По умолчанию для foregroundScanInterval установлено значение 1100 мс. Это означает, что библиотека будет искать маяки в течение 1100 мс, отслеживать отдельный список всего, что она обнаружит за этот период, а затем сообщать о них приложению, используя библиотеку в конце этого интервала (например, каждые 1100 мс). Это похоже на то, что iOS делает со своим CoreLocation API со скоростью 1000 мс. Причина, по которой он по умолчанию равен 1100 вместо 1000, заключается в том, что многие ранние устройства Android с поддержкой BLE не могли обнаружить более одного отдельного объявления за сканирование, поэтому сканирование приходилось останавливать каждый цикл и перезапускать, чтобы обнаружить его снова. Цикл по умолчанию был установлен чуть больше 1000 мс, чтобы избежать тесной синхронизации с рекламой маяков с частотой 1 Гц.

Настройки библиотеки - это не то же самое, что ScanWindow и ScanInterval стандарта BLE. Настройки библиотеки представляют собой концепцию более высокого уровня.

Стандартные концепции BLE ScanInterval и ScanWindow, как вы заявляете, управляют скоростью вращения устройства, выполняющего сканирование BLE, между прослушиванием на каждом из отдельных рекламных каналов BLE. К сожалению, API-интерфейсы Android не дают вам прямого контроля над этими интервалами - они встроены в прошивку производителем Android. Кроме того, Android не предоставляет вам API-интерфейсы для определения того, для чего они установлены, или даже для какой рекламы. канал, на который был установлен приемник при обнаружении рекламного пакета (что-то, что имеет неблагоприятное влияние на измерения RSSI, см. ниже). Ограниченные настройки сканирования, предоставляемые Android, видны здесь. SCAN_MODE_LOW_POWER против SCAN_MODE_LOW_LATENCY может повлиять эти интервалы (они делают в коде Android с открытым исходным кодом), но, опять же, производители Android могут изменить это по желанию. Библиотека маяков Android обычно использует SCAN_MODE_LOW_LATENCY, за исключением определенных состояний фонового режима.

В общем, эти настройки BLE-Standard, встроенные в прошивку Android, будут отличаться от настроек библиотеки, упомянутых выше. (Спецификация BLE гласит, что ScanInterval может находиться в диапазоне от 2,5 мс до 10 240 мс). Однако периоды между разными моделями Android довольно сильно отличаются. Вы можете увидеть определения Android с открытым исходным кодом в этом ответе , которые устанавливают ScanInterval на 5000 мс для SCAN_MODE_LOW_LATENCY, но имейте в виду, что каждый производитель может настроить константы по своему вкусу.

Поскольку RSSI для определения рекламы варьируется в небольшом, но значительном количестве между каждым рекламным каналом, обычно можно получить жестко запрограммированный ScanInterval устройства Android, построив график RSSI рекламных объявлений, обнаруженных на устройстве Android, от рекламодателя, который использует все рекламные каналы. При отображении этого графика на графике RSSI в зависимости от времени будет показан шаблон ступеньки, где ширина каждого шага равна ScanInterval. На устройствах Samsung значение ScanInterval близко к максимально допустимому в спецификации. около 10 секунд. Мои анекдотические тесты показывают, что запеченные настройки от устройств других производителей обычно короче.

Неспособность контролировать скорость переключения каналов на Android означает, что 2/3 вашей рекламы не будут обнаружены, а на устройствах Samsung вы, как правило, будете работать 20 секунд без каких-либо обнаружений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...