Клиент 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 ответ
Хорошо, после долгих исследований я могу наконец ответить на свой вопрос:
Что я уже сделал, прежде чем задал этот вопрос:
- Установите рекламные данные для отправки основного UUID сервиса ANCS.
Что нужно после этого:
- Остановите bluetooth-daemon (вы также можете остановить его перед настройкой рекламных данных, но, насколько я знаю, его нужно запустить в какой-то момент, чтобы запустить некоторые модули ядра.)
- Создайте сокет L2CAP с CID (идентификатор канала 4 для ATT). Уровень безопасности должен быть СРЕДНИМ, чтобы ядро автоматически связывалось с iPhone.
- Bind / Listen / Accept для ожидания соединения с iOS-устройства
- Запись / чтение сообщений ATT, как определено в спецификации Bluetooth
Надо обязательно взглянуть на tools / btgatt-client.c & tools / bt-gatt-server.c в исходном коде BlueZ. Он показывает, как именно открыть сокет (с помощью sockopt и т. Д.)
Надеюсь, это поможет любому, кто изо всех сил пытается понять это, как я.