Что такое ENABLE_INDICATION_VALUE и ENABLE_NOTIFICATION_VALUE в дескрипторе конфигурации характеристик клиента в списке?
Я работал над приложением для чтения и записи данных с другого устройства BLE. У меня нет никаких проблем с точки зрения приложения. Просто некоторые концептуальные сомнения, которые мне нужно прояснить. Так:
Зачем нам нужен cccd для включения уведомления?
После передачи ENABLE_INDICATION_VALUE разрешает ли это уведомление на периферийном устройстве?
В чем основное различие между ENABLE_INDICATION_VALUE и ENABLE_NOTIFICATION_VALUE, в то время как оба выполняют одну и ту же задачу, то есть отправку непрерывных данных на центральное устройство?
2 ответа
Клиент должен настроить сервер, если он должен включить уведомления / индикации. Иначе ничего не отправит.
Нет. Значение 16-битного дескриптора является битовым полем. В настоящее время определены только два бита: уведомление и индикация. Вы можете установить оба бита, а затем вы должны получить уведомление и указание, если сервер ведет себя правильно.
Сервер может отправлять уведомления в любое время. Возможно даже несколько уведомлений на событие соединения, что дает высокую производительность. У сервера может быть только одно выдающееся указание. Клиент должен подтвердить получение указания, прежде чем сервер сможет отправить новое. Это дает низкую производительность по сравнению с уведомлениями. Обратите внимание, что, на мой взгляд, использование указаний с Android или iOS в качестве клиента бесполезно, поскольку подтверждение отправляется стеком Bluetooth до того, как приложение полностью обработало указание. Таким образом, подтверждение является "ложным" подтверждением.
1. Почему нам нужен CCCD для включения уведомления?
во-первых, setCharacteristicNotification() - включение / отключение локального устройства для получения уведомлений от периферийного устройства
CCCD - дескриптор характеристики конфигурации клиента
"Использование CCCD для клиента GATT позволяет контролировать, какие пакеты может отправлять ему сервер GATT", что означает, что периферийные устройства могут отправлять данные.
2.После передачи ENABLE_INDICATION_VALUE разрешает ли это уведомление на периферийном устройстве?
НЕТ. Для каждой индикации вы должны отправить подтверждение, чтобы сказать, что это данные, которые мне нужны.
3.В чем разница между ENABLE_INDICATION_VALUE и ENABLE_NOTIFICATION_VALUE?
Они оба уведомят, если есть какое-либо изменение в характеристическом значении.
ENABLE_NOTIFICATION_VALUE -> периферия будет отправлять, если есть какие-либо изменения, это означает, что это может быть использовано для регулярных уведомлений
ENABLE_INDICATION_VALUE -> периферийное устройство будет отправлять, если есть какие-либо изменения, в следующем интервале соединения будет подтверждено подтверждение уровня приложения (из стека) (только одно указание допустимо для одного интервала соединения), тогда только периферийное устройство может отправлять новые значения. Вот почему мы не можем использовать ENABLE_INDICATION_VALUE для отправки регулярных уведомлений.