Os utilitários do Bluez estão usando a interface do kernel MGMT (não HCI) e essa interface é simples, implementa alguma lógica sob o capô e não pode fornecer a mesma funcionalidade que o HCI (ou seja, não pode executar varredura passiva contínua).
A varredura (descoberta) iniciada usando a interface do kernel MGMT funciona apenas por 10s (definida no módulo do kernel do bluetooth). Em seguida, o Bluez é informado sobre o final da varredura e o Bluez reinicia a varredura (imediatamente, se os filtros de descoberta estiverem configurados, ou após 5 segundos, de outra forma)
Soluções:
- use a interface HCI (o comando
hcitool lescan
funciona bem - use o código fonte como referência ou encontre bibliotecas prontas) - modifique o módulo do kernel do bluetooth, defina qualquer discoveryFilter usando o Bluez (por exemplo, RSSI -127).