Телефоны Android сообщают о недопустимом поставщике / модели в профиле идентификатора устройства Bluetooth и / или EIR

Работая над приложением, которое включает обнаружение смартфонов через Bluetooth, я обнаружил, что многие устройства на базе Android возвращают неверный идентификатор устройства.

Немного предыстории: существует профиль / служба Bluetooth под названием Device ID (UUID 0x1200), который должен идентифицировать конкретное устройство до производителя, модели и версии. Идентификатор поставщика может быть назначен телом USB или Bluetooth. Эта служба может быть запрошена по протоколу обнаружения служб (SDP) после обнаружения устройства. Та же информация об идентификаторе также может быть включена в расширенный ответ на запрос (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 (0x000a), а также о нулевом продукте и версии. Я получил такие же результаты на Acer Cloud Mobile. Это заставило меня подумать, что недействительные идентификаторы могут происходить из-за значения по умолчанию, не измененного OEM-производителями телефонов Android.

Конечно же, в источниках Android, которые я недавно проверял, стек bluez Bluetooth имеет следующий параметр в 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. "а" от Android. Как гениально ...

Я пытаюсь связаться с разработчиками Sony и Android, чтобы узнать, как это можно исправить в будущих версиях. Так что, если вы один из них, дайте мне знать.


person Mart    schedule 01.12.2012    source источник


Ответы (1)


Я здесь, чтобы подтвердить, что в новой прошивке 4.1.2 JB для Sony Xperia Go эта ошибка исправлена. Телефон правильно сообщает профиль идентификатора устройства.

person Mart    schedule 28.04.2013