Bluetooth ID USB ?

Пытаясь разобраться с темой, столкнулся с таким вот "чудом". Живет в ноутбуке синий зуб и по lsusb откликается вот так:
Bus 001 Device 006: ID 0cf3:3005 Qualcomm Atheros Communications AR3011 Bluetooth
Все работает, все довольны. Совершенно случайно обнаружил, что в Win7 этот же зуб уже имеет ID 0489:E02C, что по /usr/share/hwdata/usb.ids уже кличется по другому
Foxconn/Hon Hai Atheros AR5BBU12 Bluetooth Device
Мне-то по барабану, что снаряды подносить, что гильзы относить, но как такое может быть? Мне казалось, что юсб идентификатор постоянный. Для многофункциональных устройств - да, а здесь-то зачем?

PS. Кстати, в винде не работает, код ошибки 43 и ни чего не помогает :) но єто тема уже для другого форума :)
anode
Bus 001 Device 006: ID 0cf3:3005 Qualcomm Atheros Communications AR3011 Bluetooth
Интересно то, что у меня на одном ноутбуке тоже самое устройство
lsusb
Bus 002 Device 005: ID 0cf3:3005 Qualcomm Atheros Communications AR3011 Bluetooth
Загрузился в Win7, диспетчер устройств показывает 0CF3:3005, для надежности сделал отчет Aida - показал то же, что и диспетчер устройств
[ Радиомодули Bluetooth / Generic Bluetooth Adapter ]

    Свойства устройства:
      Описание драйвера                                 Generic Bluetooth Adapter
      Дата драйвера                                     21.06.2006
      Версия драйвера                                   6.1.7601.17607
      Поставщик драйвера                                Microsoft
      INF-файл                                          bth.inf
      Аппаратный ID                                     USB\VID_0CF3&PID_3005&REV_0001
      Сведения о размещении                             Port_#0006.Hub_#0004
Ошибки не исчезают с опытом - они просто умнеют
Вендовоз стопудово определяет неправильно, без драйвера он железо не определит, ошибка 43 как раз об этом и говорит.
In Tux We Trust
redix, ваше утверждение даже не сомнительно, оно в корне неправильно, т.к. именно по ID определяется необходимый драйвер, а у вас получается наоборот :)

vasek, с этим же драйвером( 6.1.7601... - это встроенный др-р семерки) у меня ID USB\VID_0489&PID_E02C&REV_0001, С текущим рабочим то же. Путаница только с названием по ID из .inf файла должно быть Foxconn_Acer_BU12 , а на самом деле Qualcomm Atheros AR3011 Bluetooth 3.0.
anode
по ID определяется необходимый драйвер
Ага, только если дрова не установлены, то диспетчер устройств пишет "Неизвестное устройство" или "Стандартное устройство". А дрова под венду идут с каждой железкой.
In Tux We Trust
anode
Путаница только с названием по ID из .inf файла должно быть Foxconn_Acer_BU12 , а на самом деле Qualcomm Atheros AR3011 Bluetooth 3.0.
Незнаю как там в Windows, хотя идеология должна быть похожей (просто другие файлы, другие утилиты), но в linux примерно так (выдержки из DOC)
Обнаружение USB устройств в аппаратном пространстве осуществляется хост контроллером USB. Соответствующий драйвер хост-контроллера обнаруживает устройство и транслирует информацию низкоуровнего физического слоя в конкретную информацию более высокого уровня протокола USB. Затем информация протокола USB, касающаяся устройства и, имеющая специальный формат, заносится в общий слой ядра USB (драйвер usbcore) в пространстве ядра, что позволяет обнаруживать устройства USB в пространстве ядра даже в том случае, когда отсутствует драйвер конкретного устройства.
Дальше — дело различных драйверов, интерфейсов и приложений (которые различны в различных дистрибутивах Linux) отображать обнаруженные устройства в пользовательском пространстве.
PS - обращаем внимание на фразу
… что позволяет обнаруживать устройства USB в пространстве ядра даже в том случае, когда отсутствует драйвер конкретного устройства ...
Обнаруживать то позволяет, но не всю инфу получается добыть.

И вот всю эту информацию. как правило, считывает lsusb из ядра, предоставленного виртуальной файловой системой sys, то есть lsusb парсит определенные файлы и преподносит нам информацию в доступном виде. Имхо, это точная инфа, вытащенная в процессе диалога хоста и USB устройства - верю большей ей
Как пример (для удобства воспользуемся информацией lsusb по шинам, хотя можно и без него)
lsusb
Bus 003 Device 075: ID 0cf3:3005 Qualcomm Atheros Communications AR3011 Bluetooth
Смотрим не распарсенную инфу об адаптере Bluetooth (часть, VID:PID)
sudo hexdump -s 8 -n 4 /dev/bus/usb/003/075
0000008 0cf3 3005
А вот всю распарсенную инфу можно получить так
lsusb -D /dev/bus/usb/003/075
Ошибки не исчезают с опытом - они просто умнеют
Сегодня с утра по раньше нужно было поработать с очень хорошей утилитой RWEverything, очень хорошая утилита, позволяет получить практически всю информацию о железе
This utility access almost all the computer hardware, including PCI (PCI Express), PCI Index/Data, Memory, Memory Index/Data, I/O Space, I/O Index/Data, Super I/O, Clock Generator, DIMM SPD, SMBus Device, CPU MSR Registers, ATA/ATAPI Identify Data, Disk Read Write, ACPI Tables Dump (include AML decode), Embedded Controller, USB Information, SMBIOS Structures, PCI Option ROMs, MP Configuration Table, E820, EDID and Remote Access. And also a Command Window is provided to access hardware manually.
Можно попробовать проверить VID:PID этой утилитой, вот часть моего вывода (кстати, видим теже байты, приведенные выше - F3 0C 05 30 ... 0CF3:3005)
DeviceName: Устройство Bluetooth (протокол RFCOMM TDI) #2
…..
Device Descriptor:
12 01 10 01 E0 01 01 40 F3 0C 05 30 01 00 00 00	[email protected]
….
idVendor	0x0CF3 - Atheros Communications, Inc.
idProduct	0x3005
….

PS - жаль, что нет аналога в Linux ...
Ошибки не исчезают с опытом - они просто умнеют
vasek, а почему вы думаете, что ID как-то зависит от применяемой утилиты? Результат как и следовало ожидать тот же. Вопрос не в том какая ОС, а как может в различных ОС быть разным ID? Насколько я понимаю, єто 4 байта прописанных в ПЗУ. Как эти байты меняются в различных ОС. Вот device descriptor из RW:

DeviceName:
....
12 01 10 01 E0 01 01 40 89 04 2C E0 01 00 00 00
....
idVendor	0x0489 - Foxconn / Hon Hai
idProduct	0xE02C
....
как видите, они совпадают, за исключением ID, а вывод lsusb в арче у нас совпадает. Как так?
ЗЫ. Да, имя устройства отсутствует.
PSS. vasek, интересен вывод rfkill на вашем ноутбуке с аналогичным ID. Объяснить я не могу, но подозрения на acer-wmi есть.
anode
интересен вывод rfkill
rfkill
ID TYPE      DEVICE            SOFT      HARD
 0 wlan      hp-wifi      unblocked unblocked
 1 bluetooth hp-bluetooth unblocked unblocked
 2 wlan      phy0         unblocked unblocked
 3 bluetooth hci0         unblocked unblocked

anode
Вопрос не в том какая ОС, а как может в различных ОС быть разным ID? Насколько я понимаю, єто 4 байта прописанных в ПЗУ. Как эти байты меняются в различных ОС.
В части устройств PCI все просто - там жестко стандартизовано указание информации - так называемое конфигурационное пространство PCI, составляющее 256 байт на устройство, из которых первые 64 байта (в эти байты входит и VID:PID) специфицированы и производители их менять не могут.
А вот в части USB информация извлекается из памяти контроллера в результате общения хоста и устройства USB и, конечно, эти байты менятся не могут (в принципе эту информацию можно извлечь и ручками общаясь с USB устройством посредством SCSI команд (вроде описывал в блоге). Но здесь нет такой строгой регламентации, плюс к этому иногда для встроенных (внутренних) USB устройств идет и обращение к BIOS … а вот как идет извлечение информации в Windows никогда не интересовался и вообщем то не знаю.
PS - хотя никогда не интересовался где прописана информация для встроенных USB устройств - всегда в контроллере устройства или же иногда и в BIOS ???
Лично мое мнение - верю больше VID:PID, извлеченных непосредственно из устройсва посредством утилиты lsusb или той же RWEverything.
И с таким встречаюсь в первые.

EDIT 1 - нашел у себя в базе следующую запись
В части встроенных USB устройств - в ядро входят модули/драйверы для этих устройств, которые ядро загружает при старте/загрузке системы. Устройства сообщают о своих возможностях драйверу или BIOS  (некоторые устройства сообщаются BIOS -  зависит от производителя). И иногда, в случае кривого BIOS, возможны ошибки.
Ошибки не исчезают с опытом - они просто умнеют
anode
почему вы думаете, что ID как-то зависит от применяемой утилиты?
Имел в виду откуда и как эта утилита считывает информацию.
Те что считывают первичную информацию (из конфигурационного пространства PCI, в результате общения хоста и устройства USB и др.), им доверять можно. А те что вторичные (берут эту информацию не из первичных источников) - тем верить на 100% опасно.

EDIT 1 - да, в базе устройств Foxconn Bluetooth то же название устройства Qualcomm Atheros AR3011 Bluetooth 3.0, но другие ID VID_0489&PID_E02C
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.