Подтвердить что ты не робот

Создание сервера Gatt?

У меня вопрос о более широком диапазоне, поэтому, если кто-то может указать мне на документ или статью, которые могли бы объяснить это, этого было бы достаточно. Излишне говорить, что количество дней в день, когда он искал меня, никуда не денется, и я мог бы использовать руку помощи.

Я подключаюсь к BeagleBoard с BlueZ 5.9, и я намерен:

  • Создайте сервер Gatt,
  • Загрузите его с некоторыми записываемыми атрибутами и
  • Рекламируйте этот сервер для подключения к устройству Android.

Я создал приложение для Android, которое будет подключаться и работать как центральное, рендеринг 3 в основном завершен. Я не знаю, как команды - буквальные вещи для ввода - инициировать сервер Gatt/создавать атрибуты на BeagleBoard. Мне известно, что аппаратное обеспечение было большим, так что, возможно, я просто полностью ошибаюсь в своей терминологии, - сказал он, - любая помощь была бы оценена при завершении 1 и 2, даже если это всего лишь толчок в правильном направлении. Благодарю!

4b9b3361

Ответ 1

Ваша терминология в основном правильная.

Как правило, база данных GATT имеет службы 0x1800 (общий доступ) и 0x1801 (общий атрибут) как минимум. Служба общего доступа содержит две обязательные характеристики: Имя устройства и Appearance. Служба Generic Attribute должна быть пустой.

Поэтому минимальная база данных GATT выглядит следующим образом:

Handle  Description
 0000   Service: Generic Access (1800)
 0001   Characteristic: Device Name (2A00, readable)
 0002   Characteristic Value (string)
 0003   Characteristic: Appearance (2A01, readable)
 0004   Characteristic Value (16bit enum)
 0005   Service: Generic Attribute (1801) 

После этих двух сервисов вы можете добавить свои собственные услуги. В вашем случае вы, похоже, не нацелены на известную службу, поэтому вы создадите собственную.

Сначала создайте 128-битный UUID, например, используя инструмент uuidgen в командной строке Mac

$ uuidgen
DCDF2725-56C8-4235-A4BC-F7951D5C3762

Это будет ваш UUID службы

 0006   Service: Custom defined Service (DCDF2725-56C8-4235-A4BC-F7951D5C3762)

Затем вы упомянули, что хотите получить несколько характеристик записи. Итак, создайте еще один UUID для этого.

$ uuidgen
4C06C6F4-C90D-4C58-8E31-20C8C74FF832

И добавьте характеристику в службу

 0007   Characteristic: Custom Characteristic (4C06C...FF832, writeable)
 0008   Characteristic Value (hex, 20 bytes)

Значение вашей характеристики не должно превышать 20 байтов, и вы должны выбрать "Write Request", чтобы гарантировать, что подтверждения записи отправляются в центральную. Если вы выберете "Write Command", записи могут быть отброшены либо вашим стеком телефона, либо периферийным устройством.

После того, как вы определили этот признак, вы готовы начать кодирование.

Я не знаю BeagleBoard SDK, но, как правило, вы начинаете с инициализации библиотеки GATT и дополнительных модулей (например, для поддержки записи вам необходимо инициализировать вторую часть библиотеки).

После этой инициализации вы регистрируете свою базу данных GATT. Если у вас нет хорошего инструмента для генерации двоичных данных, вам, возможно, придется написать их сами. Это объясняется в Bluetooth Core Spec V4.0. Надеюсь, вы найдете API, который сделает для вас трансформацию: -)

Когда регистрация будет успешной, вам нужно будет установить рекламные параметры и начать рекламу (снова обратитесь к документации SDK и к примерам).

Что происходит сейчас, так это то, что в какой-то момент вы получите обратный вызов, что соединение установлено, а позже вы получите запрос атрибута для данного дескриптора. Затем вам просто нужно обработать запрос, посмотрев на дескриптор, заданное значение и тип операции (чтение/запись). Не забудьте всегда возвращать значение успеха или код ошибки в ответ на запрос, так как в противном случае вы заблокируете связь Bluetooth.

Обычно эти чипы Bluetooth всегда работают с асинхронными операциями. Вы отправите запрос, а затем должны дождаться завершения запроса до отправки следующего. Помните, что при программировании это экономит ваше время: -).

Если вы хотите сначала попробовать Android, потому что он вам больше знаком, вы можете попробовать Galaxy S 4 с Android 4.2. Он также имеет периферийный режим LE, однако я не проверял его надежность. Самый надежный стек смартфонов на данный момент, чтобы выступать в качестве периферийного устройства LE, в настоящее время находится в iOS 7 - поэтому, возможно, стоит подобрать iPod touch, если он будет доступен для игры с ним.

Ответ 2

Оформить заказ bleno, это библиотека периферийного стека BLE, которую я создал для node.js в последнее время. В настоящее время он поддерживает Linux (протестирован с BlueZ 4.101) и OS X 10.9.

Есть примеры того, как использовать его здесь и здесь.

Ответ 3

Ключ для настройки gatt-сервиса - это программа-демон bluetoothd из bluez.

Я описал, как настроить службу gatt в моем блогере, пожалуйста, проверьте его.