Я расширяю плагин/gatt_example.c в источниках Bluez, чтобы попробовать функцию уведомления BLE без успеха. Я использую прилагаемый образец Battery Service в источнике Bluez. Он имеет 1 с характеристиками READ и NOTIFY. Я добавляю метод dbus, чтобы вызвать функцию attrib_db_update(), чтобы обновить значение признака за пределами демона bluetooth.Как отправить уведомление Bluetooth с низким энергопотреблением GATT с Bluez?
Теперь я могу подключить к этому клиенту (Nexus4 с Android 4.3 и iPhone (бесплатные приложения LightBlue)) и начать уведомление (дескриптор установки CCC уведомляет флаги). (примечание: char cc descriptor имеет разрешение по умолчанию для разрешения, поэтому от iPhone, модифицирующего CCC (начало уведомления), будет выведено bluez, чтобы вернуть ошибку: не разрешать разрешение. Поскольку позже я планирую разрешить авторизацию, я временно изменяю разрешение по умолчанию никому, и iPhone может устанавливать флаги уведомлений CCC).
Проблема заключается даже в том, что клиент (как Android, так и iOS) начал уведомлять, вызывающий атрибут attrib_db_update() не делает bluez для отправки любого уведомления клиенту (монитор с hcidump, без отправки пакета клиенту).
Вопрос: Есть ли какой-либо шаг, который требуется для атрибута attrib_db_update(), чтобы заставить bluez отправлять уведомление клиенту? Я ценю любую ссылку на образец источника. PS. Я использую bluez как конфигурацию периферийного + gatt-сервера (так же, как и обслуживание батареи в plugin/gatt_example.c), а не наоборот.
Спасибо.
=== Update (я не знаю, как комментировать форматирование работы ... так что я добавить обновления здесь.)
О профиле/оповещении образца:
Да я уже проверить профиль/оповещение перед задать вопрос , Другая проблема заключается в том, что я не мог запустить этот образец (это одна из причин, по которой я задаю вопрос в первую очередь).
profile/alert/server.c: attio_connected_cb() - это функция обратного вызова, зарегистрированная filter_devices_notify() в server.c. Он использует btd_device_add_attio_callback() (из src/device.c). Дополнительная проверка src/device.c, похоже, что он проверяет device-> атрибут, если он существует для exec (сначала вставить в очередь, затем обратный вызов exec), callback или просто вставить в очередь, пока устройство не подключится ?.
Отладка, он выглядит как device-> attrib пуст, даже если я уже подключил устройство.
Для тех, кто заинтересован, чтобы запустить/отладку образец оповещения профиля (Поскольку нет дока :().
Закомментируйте следующее, если (около линии 564), мы не заинтересованы в этом чеке ...
/* if (!g_str_equal(alert->srv, sender)) { DBG("Sender %s is not registered in category %s", sender, category); return btd_error_invalid_args(msg); } */
Run bluetoothd: бывший bluetoothd -n -d -p предупреждения
не Подключите устройство до startNotify
Регистрация предупреждение из другой консоли:.
dbus-send --system --dest=org.bluez --type=method_call "/org/bluez" "org.bluez.Alert1.RegisterAlert" string:"simple" objpath:"/org/bluez/AlertAgent1"
Создать новое предупреждение:
dbus-send --system --dest=org.bluez --type=method_call "/org/bluez" "org.bluez.Alert1.NewAlert" string:"simple" uint16:"1" string:"test"
Я получил журнал на следующий bluetoothd в:
bluetoothd[1928]: src/attrib-server.c:attrib_db_update() handle=0x001c bluetoothd[1928]: src/attrib-server.c:attrib_db_update() handle=0x0021 bluetoothd[1928]: profiles/alert/server.c:register_alert() RegisterAlert("simple", "/org/bluez/AlertAgent1") bluetoothd[1928]: src/attrib-server.c:attrib_db_update() handle=0x001e bluetoothd[1928]: src/device.c:btd_device_add_attio_callback() 0x1b6e718 registered ATT connection callback bluetoothd[1928]: src/device.c:device_set_auto_connect() 10:68:3F:E1:4E:F2 auto connect: 1 bluetoothd[1928]: src/adapter.c:adapter_connect_list_add() /org/bluez/hci0/dev_10_68_3F_E1_4E_F2 added to BlueZ 5.14's connect_list bluetoothd[1928]: src/adapter.c:trigger_passive_scanning() bluetoothd[1928]: src/device.c:btd_device_add_attio_callback() device->attrib = false bluetoothd[1928]: src/device.c:btd_device_add_attio_callback() cfunc = true bluetoothd[1928]: src/device.c:btd_device_add_attio_callback() no idle bluetoothd[1928]: profiles/alert/server.c:new_alert() NewAlert("simple", 1, "simple") bluetoothd[1928]: src/adapter.c:passive_scanning_complete() status 0x03 bluetoothd[1928]: Wrong size of start scanning return parameters
Memo: добавление некоторого вывода отладки в device.c. Похоже, что device-> attrib пуст.И autoconnect (почему сервер gatt/периферийное устройство должен подключиться к центральному?) Не удалось по неизвестной причине.
Спасибо за информацию Isa. Похоже, что патч еще не в последней версии (5.14). Я найду последний источник из git, чтобы узнать. Но, как сказал Андерсон, он может не работать полностью. (Я чувствую, что понимаю, почему Android переключает стек bluetooth с 4.3 и дальше ...). Я также смотрю на другое решение, такое как bleno. В прошлый раз, когда я проверяю, у него еще нет уведомления, но поскольку я просто проверяю, что он уже реализовал его. – user1012131
Плохая новость. К сожалению, он не работает (с использованием тестового оповещения). Я использую iOS7 BlueLight для подключения, журнал такой же, как и мое обновление (device-> attrib is nil, Wrong size ...) Также проверьте с Nexus 4 (нужно 4.4.2 для BLE, есть много исправлений ошибок, которые вы можете 't подключиться к bluez с 4.3 или 4.4). В этот раз журнал отличается. Но все-таки я не получил никакого уведомления, отправляющего nexus или hcidump, отправляющего пакет уведомлений. Попробует bleno. – user1012131