Клиент ANCS: Какова основная процедура для получения уведомлений?

Я пытаюсь реализовать клиент ANCS в C на Linux с помощью стека BlueZ (новейшая версия, 5.39). До сих пор я могу установить рекламные данные BLE с помощью UUID запроса услуг, предоставляемого Apple.

Мое устройство отображается в настройках iPhone (iOS 9). Я также могу подключиться к устройству, хотя соединение очень нестабильное, то есть иногда через некоторое время, и всегда, когда я закрываю подменю настроек Bluetooth на iPhone, соединение разрывается. Это также не связывает, после разъединения устройство не обнаруживается под "моими устройствами" на iPhone.

Я посмотрел на hcidump, по-видимому, просто читает кучу данных ATT, а затем останавливается:

Вставьте ссылку, потому что она неправильно отформатировала здесь

После разрыва соединения выводится нижняя часть пастбина.

Теперь мой вопрос: каким будет следующий шаг для создания клиента ANCS, который получает уведомления от устройства iOS? Я прочитал бесчисленные статьи и примеры кода о BLE и ANCS, но все же я ничего не понимаю.

Нужно ли открывать гнездо L2CAP в моем коде C, чтобы принять соединение с iPhone? Я уже попробовал это, не сработало. Я также пытался подключиться к iPhone с помощью gatttool, пока он был подключен, но он сказал "ресурс или устройство занято".

Я был бы очень благодарен за некоторые указатели в правильном направлении, о том, что делать дальше.

1 ответ

Решение

Хорошо, после долгих исследований я могу наконец ответить на свой вопрос:

Что я уже сделал, прежде чем задал этот вопрос:

  1. Установите рекламные данные для отправки основного UUID сервиса ANCS.

Что нужно после этого:

  1. Остановите bluetooth-daemon (вы также можете остановить его перед настройкой рекламных данных, но, насколько я знаю, его нужно запустить в какой-то момент, чтобы запустить некоторые модули ядра.)
  2. Создайте сокет L2CAP с CID (идентификатор канала 4 для ATT). Уровень безопасности должен быть СРЕДНИМ, чтобы ядро ​​автоматически связывалось с iPhone.
  3. Bind / Listen / Accept для ожидания соединения с iOS-устройства
  4. Запись / чтение сообщений ATT, как определено в спецификации Bluetooth

Надо обязательно взглянуть на tools / btgatt-client.c & tools / bt-gatt-server.c в исходном коде BlueZ. Он показывает, как именно открыть сокет (с помощью sockopt и т. Д.)

Надеюсь, это поможет любому, кто изо всех сил пытается понять это, как я.

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