Что касается BLE, я немного запутался между терминами и их использованием в BlueZ:
- Данные производителя
- Сервисные данные
- Реклама Данные
Я собираюсь подытожить то, что я понимаю, и где это разваливается.
Из здесь в рекламном пакете есть полезная нагрузка длиной 31 байт, которая может может использоваться для данных, определяемых пользователем.
Однако BlueZ в своем рекламном API имеет другое понятие данных. Требуется dict, который имеет <type> <byte array>
из документации.
Если присмотреться, вы можете натолкнуться на эту таблицу, которая, похоже, имеет тот же двухбайтовый тип и структуру данных.
Он имеет определенную пользователем полезную нагрузку в терминах:
0xFF «Manufacturer Specific Data» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.4 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.4 and 18.11 (v4.0)Core Specification Supplement, Part A, section 1.4
Итак, я загрузил spe c, чтобы попытаться прочитать различие, которое приводит меня к предложению, которое я не Не совсем следую:
Данные отправляются в рекламных или периодических c рекламных акциях. Данные Host Advertising помещаются в поле AdvData PDU ADV_IND, ADV_NONCONN_IND, ADV_SCAN_IND, AUX_ADV_IND и AUX_CHAIN_IND. Дополнительные рекламные данные контроллера помещаются в поле ACAD PDU AUX_ADV_IND, AUX_SYNC_IND и AUX_SCAN_RSP. Periodi c Рекламные данные помещаются в поле AdvData PDU AUX_SYNC_IND и AUX_CHAIN_IND. Данные ответа сканирования отправляются в поле ScanRspData PDU SCAN_RSP или поле AdvData PDU AUX_SCAN_RSP. Если полные данные не могут поместиться в поле AdvData PDU AUX_ADV_IND, AUX_SYNC_IND или AUX_SCAN_RSP, для отправки оставшихся фрагментов данных используются блоки PDU AUX_CHAIN_IND. Структура AD может быть фрагментирована по двум или более PDU
Также, когда я смотрю на реализацию BlueZ их собственного API DBUS, я вижу, что они предоставляют способ заполнения производственных данных, но не способ изменить тип рекламы (ADV_NONCONN vs ADV_CONN).
У них тоже есть тип adv_data
, но это всего 25 байт? Почему я не могу получить полный 31 байт?
https://github.com/bluez/bluez/blob/cbbb0c2ead89ed19280ecd94e8a2fb0d22216bb6/client/advertising.c#L55
Актуальные вопросы:
- При реализации периферийного устройства BT с использованием BlueZ у меня есть 31 или 25 байт. Могу ли я заполнить как служебные данные, так и данные производителя общим размером 50 байт ??
- Являются ли данные производителя абстракцией по сравнению с данными рекламы? Если да, то как я могу получить доступ к базовым Рекламным данным? Если нет, могу ли я теоретически заполнить данные о рекламе и производителе?