Завершение ответа ANCS Получить атрибуты уведомления

Я играю с ANCS, чтобы попытаться понять, как это работает, прежде чем переходить к попытке написать какую-нибудь прошивку для набора разработчика CSR1010.

Я написал приложение линии cmd в цели C, которая действует как центральная, а затем опрашивает службу ANCS. Я могу получить источник уведомлений без проблем и написать обратно в контрольную точку с правильными деталями, чтобы получить требуемые атрибуты.

Проблема, с которой я столкнулся в данный момент, заключается в том, что я не уверен, когда характеристика источника данных завершила передачу. Размер MTU, который у меня есть, составляет 20 байт, поэтому возвращаемые данные объединяются в необходимые пакеты и отправляются в порядке. Я просто не могу разобраться, когда передача закончится, из того, что я вижу, нет конца тега сообщения или чего-то лживого, что или каким-либо способом проверить, что все данные получены, чтобы я мог снова соединить все вместе,

Документация от Apple здесь, на ANCS говорит:

Если ответ на команду Get App Attributes больше, чем согласованный максимальный блок передачи (MTU) GATT, он разделяется NP на несколько фрагментов. NC должен перекомпоновать ответ путем сращивания каждого фрагмента. Ответ завершен, когда полные кортежи для каждого запрошенного атрибута были получены.

Как вы узнаете, "когда были получены полные кортежи для каждого запрошенного атрибута?"?

Thx // 56k

1 ответ

Спецификация ANCS ( https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Specification/Specification.html) гласит:

Если ответ превышает согласованный максимальный блок передачи (MTU) GATT, он разделяется на несколько фрагментов NP. NC должен перекомпоновать ответ путем сращивания каждого фрагмента. Ответ завершен, когда полные кортежи для каждого запрошенного атрибута были получены.

Когда вы отправляете запрос GetNotificationAttributes, вам нужно сохранить список атрибутов, которые вы запрашиваете (или, по крайней мере, сколько вы запрашивали). Затем при синтаксическом анализе ответа вам нужно ждать большего количества разбитых пакетов данных, пока вы не получите все запрошенные вами атрибуты. Это в основном означает доверие ANCS к тому, чтобы всегда отвечать полностью, что должно быть; однако, ради безопасности, я бы добавил тайм-аут в ваш код. Таким образом, если ANCS каким-то образом застрянет, вы не будете следовать за ним в беспорядке =)

Matteo

Другие вопросы по тегам