btmgmt를 통해 Bluetooth 스캐닝 매개변수 수정

btmgmt를 통해 Bluetooth 스캐닝 매개변수 수정

페이로드를 동적으로 수정하는 블레이콘 광고를 검색하고 있습니다. 그러므로 가능한 한 적은 광고를 놓치고 싶습니다.

현재 bluetoothctl 및 Wireshark를 통해 스캔 출력을 모니터링합니다. 내 비콘은 10초마다 방송하며 3개 채널 각각에 2개의 메시지를 보냅니다.

목표는 채널 중 하나에서 두 메시지를 모두 한 번 이상 캡처하는 것입니다.

현재 아무 것도 성공적으로 수신하지 못한 채 최대 20~30초의 공백을 겪고 있습니다.

내가 하는 일:

bluetouthctl, "스캔"을 켜세요

Wireshark, 블루투스에서 각 블루투스 장치 모니터링

"btmgmt"를 조사한 후 다음 동작을 발견했습니다.

hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
hci1 type 7 discovering off
hci1 type 7 discovering on
[mgmt]# 

검색 간격이나 창을 변경하지 않았습니다. 검색이 다음과 같이 켜지고 꺼지는 것 같습니다. 10초 켜짐, 5초 꺼짐.

이것은 내가 본질적으로 시각 장애인이 되는 시간 프레임이 항상 5초라는 것을 의미합니다.

이 동작을 바꾸는 방법을 아시나요?

최고,

답변1

Bluez 유틸리티는 간단하고 내부적으로 일부 로직을 구현하며 HCI와 동일한 기능을 제공하지 않는(즉, 연속 패시브 스캔을 실행할 수 없음) MGMT 커널 인터페이스(HCI 아님)를 사용합니다.

커널 MGMT 인터페이스를 사용하여 시작된 검색(검색)은 10초 동안만 지속됩니다(Bluetooth 커널 모듈에 정의됨). 그런 다음 Bluez는 검색이 종료되었다는 알림을 받고 Bluez는 검색을 다시 시작합니다(검색 필터가 설정된 경우 즉시, 그렇지 않으면 5초 후).

해결책:

  • HCI 인터페이스 사용(명령은 hcitool lescan잘 작동합니다. 소스 코드를 참조로 사용하거나 미리 만들어진 라이브러리를 찾으세요)
  • Bluetooth 커널 모듈을 수정하고 Bluez를 사용하여 discoveryFilter(예: RSSI -127)를 설정합니다.

관련 정보