Для однозначного определения устройств, интерфейс USB использует 16-битные идентификаторы: VendorID и ProductID. Если ваш проект использует стандартную пару… ну, думаю вы уже знаете.

Однако, опенсорсу иногда везёт, и получить легитимные идентификаторы можно бесплатно.



Основная проблема проектов с неуникальной парой VID PID, в сложности подключения нескольких устройств, имеющих одинаковые идентификаторы. Предположим к компьютеру подключают два устройства, VID и PID у них одинаковые, но им нужны разные драйвера. В результате будет работать только одно из них, при переключении драйвера придётся устанавливать заново. Такая ситуация наблюдается у многих проектов, использующих V-USB, и не только. Кроме того, уникальная пара идентификаторов, даёт шанс получить право разместить на проекте логотип USB.

Для получения VendorID необходимо обратиться к USB-IF и заплатить пошлину 3500–5000 $, это позволяет выпустить 65535 различных устройств. Несложно догадаться, что существует большое количество ProductID, которые никогда не будут использованы. Довольно редко, некоторые компании, устраивают раздачу неиспользованных PID.

Недавно, pid.codes получили права на VendorID = 0x1209, изначально он принадлежит InterBiometrics, поэтому PID от 0x1000 до 0x1FFF зарезервированы.

Самое интересное, этот VID зарегистрировали ещё до появления USB-IF, что мешает объявить эти пары идентификаторов нелегитимными.

Как получить халявную пару идентификаторов написано здесь.
1. Создайте форк репозитория.
2. В директории org, создайте папку с названием проекта. В ней создайте файл index.md
---
layout: org
title: Проект
---
Краткое описание проекта и его назначения.

3. Выберите любой свободный PID, его не должно быть в списке. Затем создайте папку с путем /1209/<выбранный PID>. Внутри создайте файл index.md
---
layout: pid
title: Имя устройства
owner: Проект
license: MIT
site: Сайт проекта(можно любую ссылку, где написано о проекте и есть ссылка на репозиторий)
source: Репозиторий проекта на Гитхаб
---

4. Сделайте pull request.

В случае принятия запроса, вы станете обладателем легитимной пары VendorID ProductID, с неограниченным сроком действия.

Проект должен распространятся под лицензией MIT, GPL или аналогичной; иметь публичный репозиторий, например, на гитхабе; и иметь USB интерфейс.

Комментарии (10)


  1. akrupa
    15.04.2015 23:05
    +5

    Можно придумать открытый способ идентификации устройств, выдать всем устройствам его поддерживабщим одинаковые VID+PID на шине USB, и сделать свою собственную шину, где проблема с драйверами будет решена.


    1. MichaelBorisov
      15.04.2015 23:36
      +3

      Хорошая идея.

      Свою собственную шину, разумеется, делать не надо. Достаточно только сделать драйвер, который ОС будет запускать для данной пары VID+PID. Этот драйвер запрашивал бы по стандартизированному для данной схемы протоколу более подробную информацию об устройстве (например, 128-битный UUID) и, в зависимости от результата, подгружал уже драйвер конкретного устройства.


      1. akrupa
        15.04.2015 23:42

        По идее, механизм подргузки нужного конкретного драйвера для устройства в зависимости от полученного UUID с точки зрения ОС и есть «шина».


        1. MichaelBorisov
          15.04.2015 23:59
          +3

          Под словом «шина» обычно имеется в виду физический интерфейс с заданными протоколами обмена. То, что механизм подгрузки одного драйвера другим в некоторых ОС называется «шиной» — это специфика архитектуры и терминологии конкретной ОС.

          Хотя с некоторой натяжкой и можно сказать, что шина USB, дополненная протоколом UUID, является уже другой шиной, но все же это вводит в заблуждение. Мы же все-таки ведем речь о сугубо программном решении, которое не изменяет стандартные протоколы обмена USB, а максимум — добавляет класс устройств, аналогично другим USB-классам (HID и т.д.)


          1. akrupa
            16.04.2015 00:04
            +1

            Да. Тут вы правы…


    1. WebConn
      16.04.2015 23:02

      Для своих устройств можно ещё по Serial Number делать идентификацию. Или по строке производителя или продукта.


  1. Jeditobe
    16.04.2015 02:04
    +8

    А если нужно драйвер подписать цифровой подписью, то обращайтесь.

    reactos.org/wiki/Driver_Signing


    1. lexfrei
      16.04.2015 11:23
      +2

      Кликабельный линк для ленвых.
      https://reactos.org/wiki/Driver_Signing


  1. Int_13h
    16.04.2015 04:04

    Микрочип, например, может дать сублицензию на vid&pid www.microchip.com/usblicensing/Default.aspx на нужды девелоперов или до 10 тысяч экземпляров бесплатно ;)


    1. MichaelBorisov
      16.04.2015 13:20
      +2

      Микрочип вообще молодцы. Они и для MAC-адресов предоставляют решение. Покупать у них чипы 24AA02E48, в каждом из которых прошит уникальный MAC-адрес. Выгодно для мелкосерийного производства устройств с Ethernet.