У меня на Raspberry Pi работает приложение c ++, использующее API-интерфейс bluez d-bus.Он поддерживает несколько датчиков от разных производителей, но по большей части добавить новые датчики было довольно просто, как только я запустил первый.После подключения я не использую ничего слишком экзотического, просто «StartNotify», «StopNotify», «ReadValue» и «WriteValue».Во всяком случае, недавно у меня возникли проблемы с добавлением пары новых датчиков.Оба используют пакеты большего размера, поэтому, используя анализатор пакетов, я вижу, как датчики согласовывают больший MTU.По какой-то причине, хотя после согласования я могу прочитать характеристики большего значения, но не могу включить (или получить) уведомления.Пробуя разные подходы с помощью bluetoothctl, я обнаружил, что использование «acqu-notify», похоже, решает проблему.Я также заметил, что новые команды acqu возвращают MTU, так что, возможно, это как-то связано с этим.Возвращаясь к датчикам, которые я уже поддерживаю, я также обнаружил, что замена «StartNotify» на «AcquireNotify», похоже, работает и с ними.Поэтому моя делимма заключается в том, использовать ли «AcquireNotify» для всех датчиков (чтобы мой код был более чистым) или только для новых, которые вызывают у меня проблему.
К сожалению, я не нашел подробной документации по новым интерфейсам "acqu".Кому-то, у кого нет большого количества истории bluez, не совсем понятно, каковы их последствия по сравнению с оригинальными интерфейсами.Так что мои вопросы двоякие -
- Есть ли какая-либо причина не использовать «AcquireNotify» / «ReleaseNotify» для всех датчиков (даже более старых, которые используют старый / более низкий MTU)?
- При использовании «AcquireNotify» имеет ли значение, если вы используете «ReadValue» / «WriteValue» на других характеристиках, или я должен использовать «AcquireRead» / «AcquireWrite»?
Любая информация высоко ценится, спасибо!