簡體   English   中英

Android手機在藍牙設備ID配置文件和/或EIR中報告了無效的供應商/型號

[英]Android phones reporting invalid vendor/model in Bluetooth Device ID Profile and/or EIR

在涉及通過藍牙發現智能手機的應用程序上工作時,我發現許多基於Android的設備會報告無效的設備ID。

背景知識:有一個稱為設備ID(UUID 0x1200)的藍牙配置文件/服務,用於識別特定設備,包括供應商,型號和版本。 廠商ID可以通過USB或藍牙主體分配。 設備發現后,可以通過服務發現協議(SDP)來查詢此服務。 相同的ID信息也可以包含在設備查詢過程中發送的擴展查詢響應(EIR)中。

最新的測試主題Sony Xperia Go(運行2.3.7)報告以下SDP記錄:

ID=0x0000,type=0x01,value=0x00010000
ID=0x0001,type=0x06[type=0x03,value={**0x1200**};]
ID=0x0005,type=0x06[type=0x03,value={0x1002};]
ID=0x0009,type=0x06[type=0x06;]
ID=0x0200,type=0x01,value=0x0102 (Device ID Profile Specification 1.2)
ID=0x0201,type=0x01,value=**0x000a (Vendor ID)**
ID=0x0202,type=0x01,value=**0x0000 (Product ID)**
ID=0x0203,type=0x01,value=**0x0000 (Version)**
ID=0x0204,type=0x05,value=1 (Primary? = Yes)
ID=0x0205,type=0x01,value=**0x0002 (VendorIDSource = USB Implementer's Forum)**

如上所示,Go會報告無效的USB供應商ID(0x000a),並且產品和版本為空。 我在Acer Cloud Mobile上也得到了相同的結果。 這使我認為,無效的ID可能源自手機Android OEM未修改的默認值。

果然,我最近在Android來源中檢出bluez藍牙堆棧在main.conf中具有以下參數:

# Use vendor, product and version information for DID profile support.
# The values are separated by ":" and VID, PID and version.
DeviceID = android:generic:1.5

如果OEM不修改此參數,則將通過start_sdp_server函數進行解析:

    vid = (uint16_t) strtol(ptr, NULL, 16);
    ptr = strchr(ptr, ':');
    if (ptr) {
        pid = (uint16_t) strtol(ptr + 1, NULL, 16);
        ptr = strchr(ptr + 1, ':');
        if (ptr)
            ver = (uint16_t) strtol(ptr + 1, NULL, 16);
        register_device_id(vid, pid, ver);
    }

這就是0x000a供應商ID的來源。 Android中的“ a”。 真是個天才

我正在嘗試與Sony和Android開發人員聯系,以了解如何為將來的版本修復此問題。 因此,如果您是其中之一,請告訴我。

我只是在這里確認Sony Xperia Go的新4.1.2 JB固件已修復此錯誤。 電話會正確地向后報告設備ID配置文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM