Периферийное устройство, к которому я подключаюсь, имеет характеристику Service Changed, и, насколько я понимаю, при подключении, если присутствует характеристика Service Changed, клиент может не кэшировать атрибуты, если он не связан.Здесь есть хороший объяснение .
Теперь я начну с пустой директории /var/lib/bluetooth/[adapter]
.Если я использую bluetoothctl
, чтобы включить сканирование, а затем выключить, я увижу свое устройство.Затем я подключаюсь к нему, и происходит обнаружение служб и характеристик (путем мониторинга сообщений ATT с использованием btmon
).Большой!Теперь я отключаюсь.
Изучение каталога /var/lib/bluetooth/[adapter]
показывает:
- каталог
/var/lib/bluetooth/[adapter]/[device]
- файл
/var/lib/bluetooth/[adapter]/cache/[device]
Теперь позвольте мне удалить устройство из bluetoothd:
bt-device -r [device]
Изучение каталога /var/lib/bluetooth/[adapter]
теперь показывает:
- file
/var/lib/bluetooth/[adapter]/cache/[device]
Это беспокоит.И если я снова запускаю bluetoothctl
, включаю сканирование, выключаю его и подключаюсь, я больше не вижу характерного обнаружения.Только открытие сервиса.Это не соответствует контракту характеристики «Изменено обслуживание».
Если вместо этого вручную удалить /var/lib/bluetooth/[adapter]/cache/[device]
, то я вижу обнаружение характеристики.
Вопрос:
Даночто bt-device -r [device]
НЕ удаляет файл cache/[device]
, как мне программно удалить этот файл без запуска процесса sudo rm
?