Ответ 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, если он будет доступен для игры с ним.