0
鑑於設備的RSSI和校準傳輸功率,我正試圖獲得BLE設備的估計範圍。Android BLE iBeacon廣告數據包大於預期
校準後的txPower被認爲是外設iBeacon廣告數據包中的最後一個字節。根據我發現的文檔,這些數據包的長度應爲30個字節。
但是,返回的數據包的byte[]
長度爲62個字節。因此,廣告數據的格式是未知的。
爲什麼會發生這種情況,有什麼方法可以解密62字節數據包的格式?
鑑於設備的RSSI和校準傳輸功率,我正試圖獲得BLE設備的估計範圍。Android BLE iBeacon廣告數據包大於預期
校準後的txPower被認爲是外設iBeacon廣告數據包中的最後一個字節。根據我發現的文檔,這些數據包的長度應爲30個字節。
但是,返回的數據包的byte[]
長度爲62個字節。因此,廣告數據的格式是未知的。
爲什麼會發生這種情況,有什麼方法可以解密62字節數據包的格式?
掃描BLE設備時,Android API不僅返回原始廣告PDU的字節,還返回掃描響應PDU。後者在掃描API返回的字節數組中被加到前者的末尾。
因此,如果字節數組訪問信標字段,則不能可靠地使用從末尾開始的負偏移量。從一開始就使用正偏移量更可靠,但即使在製造商廣告PDU之前插入了不尋常的PDU(即您所關心的PDU),也可能會失敗。
對於100%的可靠性,您必須解析出所有的PDU,查找製造商廣告,並查看其中的字節。我在編寫Android Beacon Library時學到了這個難題。它是開源的,所以即使你想推出自己的掃描,最好看看它是如何做到的。
這很奇怪。有沒有更簡單的方法來獲得校準的外設txPower?校準常數是廣告中我所需要的。 – Orbit
您必須從廣告的字節中獲取常量。比解析PDU更簡單的解決方案是搜索靜態iBeacon前綴的字節模式,然後根據偏移從那裏找到校準常量。這種方法的缺點是字節序列可能(偶然)也出現在廣告的其他地方,導致該技術失敗。 – davidgyoung