2017-12-01 8 views
0

근처의 블루투스 저에너지 기기를 검색하는 Android 앱 (맞춤)을 실행 중입니다. 일부 기기가 사양 규정보다 더 오래 광고 한 패킷을 발견했습니다. 스캔 기기는 Android 6.0을 실행하는 Nexus 5입니다. 내가최대 사양보다 긴 블루투스 광고 패킷 수신

내가 ScanRecord의 바이트 배열 실제로 (맥 주소가 포함되지 않음) 광고 데이터 구성되어 있음을 알 바이트 배열 및 스캔 응답을 얻을 수있는 ScanResult 객체 result.getScanRecord().getBytes();에 다음과 같은 라인을 사용하고

, 그래서 배열에서 총 62 바이트에 대해 각각 31 바이트를 기대합니다. 이것은 수신 한 전체 배열의 크기이지만 광고 된 데이터가 배열의 응답 부분에 표시되는 것처럼 보입니다. 형식은 GAP의 첫 번째 바이트가 길이이고 다음 바이트가 GAP 유형이며 다음 길이 -1 바이트가 데이터 인 사양을 따릅니다.

그러나이 형식에서는 해당 장치가 응답 부분으로 확장되는 데이터 필드를 갖습니다. 다음은 16 진수로 배열의 예는 다른 행에 각 GAP와 함께,이다 :

02 01 06 (flags) 
0D FF DF 00 57 30 46 30 30 33 43 45 56 5A (manufacturer specific data) 
11 07 6D 69 73 66 69 74 A6 34 4A 7D 7F 95 01(<-expected end of advertise) 00 DA 3D (UUID, 128-bit) 
07 09 46 6F 73 73 69 6C (device name) 
03 03 12 18 (UUID, 16-bit) 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (leftover bytes) 

정말 스캔 응답 데이터에 대한 상관 없어,하지만 난 BLE 장치가 광고 패킷을 보낼 수있는 방법에 관한 혼란 스러워요 4.2 사양의 경우 31 바이트보다 큽니다 (블루투스 5는 더 큰 패킷을 허용하지만 제조업체는 4.2를 사용한다고 말합니다). 장치의 이름이 표시되어야하지만 응답 부분에 표시 될 수도 있습니다.

여기 왜 그런지 알 수 있습니까? 감사.

답변

0

아마도 이러한 장치는 사양을 따르지 않을 것입니다 (패킷 경계를 넘지 않는 항목이 필요함). 그래서 장치는 스캔 응답 데이터로

02 01 06 0D FF DF 00 57 30 46 30 30 33 43 45 56 5A 11 07 6D 69 73 66 69 74 A6 34 4A 7D 7F 95 
광고 데이터로

01 00 DA 3D 07 09 46 6F 73 73 69 6C 03 03 12 18 

을 보낼 수 있습니다. 이것이 맞으면 예를 들어 HCI 로그에서 볼 수 있습니다. 그렇다면 해당 BLE 장치 제조업체에 불만을 제기해야합니다.

+0

내가 어디 있는지 알 수 있지만 응답의 첫 번째 부분에 실제로 존재하지 않는 GAP 유형이 있고 다음 GAP의 길이가 광고 된 최대 크기보다 훨씬 높습니다. 패킷. HCI 로그가 스캔 장치에 있어야합니다. 맞습니까? 아마 저것 좀 봐야 겠어. – ShrimpDaddy2k