Поделиться через


Plug and Play поддержка HID через SPI

В этой статье описывается поддержка plug and play для устройств, поддерживающих HID через транспорт SPI.

Загрузка драйвера

Windows загружает драйвер класса HID SPI на основе совместимого сопоставления идентификаторов между идентификатором оборудования и INF. Идентификатор создается с помощью интерфейса расширенной конфигурации и управления питанием (ACPI). Идентификатор оборудования создается для узла устройства SPI в ACPI. Все устройства, совместимые с HID SPI, должны предоставлять идентификатор совместимости в дополнение к уникальному идентификатору оборудования.

Спецификация ACPI 5.0 включает поддержку устройств класса HID. Ниже приведены определения ACPI для HID SPI.

Поле Значение Объект ACPI Формат Комментарии
Код оборудования Конкретный поставщик _СПРЯТАЛ Строка в формате VVVVdddd (например, MSFT0011) VendorID + DeviceID
Совместимый идентификатор PNP0C51 _CID Строка в формате ACPIxxxx или PNPxxxx Совместимый ИДЕНТИФИКАТОР
Subsystem Конкретный поставщик _SUB Строка в формате VVVVssss (например, MSFQ1234) SubVendorID + SubSystemID
Редакция оборудования Конкретный поставщик _HRV 0xRRRR (2-разрядная редакция) Номер редакции оборудования
Текущие параметры ресурса Конкретный поставщик _CRS Поток байтов — SpiSerialBus для доступа к устройству.
— GpioInt для прерываний.
Метод для конкретного устройства GUID {6e2ac436-0fcf-41af-a265-b32a220dcfab} _DSM Пакет Определяет структуру, содержащую сведения об устройстве.
Метод сброса устройства   _RST   Метод сброса устройства, совместимый с ACPI 6.0 7.3.25, который будет вызываться ОС узла в качестве ACPI FLDR.

Каждое устройство HID SPI должно содержать следующие обязательные поля:

  • Код оборудования
  • Совместимый идентификатор
  • Редакция оборудования
  • Текущие параметры ресурса
  • Метод для конкретного устройства
  • Метод сброса устройства

Дополнительные сведения см. в спецификации Advanced Configuration and Power Interface (ACPI) 6.0.

Ниже приведен пример идентификаторов оборудования и совместимых идентификаторов для случайного устройства HID SPI. Эти сведения основаны на примере устройства, которое сообщает о себе как HID с одной коллекцией верхнего уровня класса "поставщики".

Расширенный интерфейс конфигурации и питания (ACPI) создает следующие идентификаторы оборудования и совместимые идентификаторы для загрузки драйвера HID SPI Transport:

Идентификаторы оборудования: совместимые идентификаторы

ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;: ACPI\PNP0C51

ACPI\Vid_xxxxPid_yyyy;:

ACPI\xxxxyyyyy;:

В предыдущем примере идентификатор оборудования был создан с помощью значений, извлеченных из метода ACPI _HID для примера устройства. Совместимый идентификатор создается с помощью значений, извлеченных из метода ACPI _CID для примера устройства. Совместимый идентификатор HID по SPI всегда должен быть PNP0C51 для версии 1.0.

Примечание

При вводе INF следует использовать только идентификаторы оборудования в левом столбце предыдущей таблицы. (Не используйте совместимый идентификатор в правом столбце.)

Идентификатор оборудования для узла устройства HID Client, созданного компонентом HIDClass.sys, выглядит следующим образом:

Идентификатор оборудования: совместимый идентификатор

HID\VEN_MSFT&DEV_0010&REV_0002&Col01;: Н/Д

-HID\VEN_MSFT&DEV_0010&Col01 HID\MSFT0010&Col01;: Н/Д

-HID\*MSFT0010Col01: Н/Д

-HID_DEVICE_UP:FF00_U:0001;: Н/Д

-HID_DEVICE: Н/Д

Идентификатор оборудования создается HIDClass.sys и идентичен для всех транспортных средств. Этот идентификатор основан на значениях, передаваемых HIDClass.sys из HIDSPI.SYS (извлеченных из ACPI).

Последовательность перечисления устройств

После загрузки драйвера устройства HID SPI (HIDSPI.SYS) он начинает взаимодействовать с устройством через шину SPI. Первая операция, выполняемая драйвером, — это последовательность перечисления устройств.

В следующем списке приведена последовательность перечисления. Порядок этого списка может измениться в будущих версиях Windows.

  1. Получите код ИСХОДНОго языка ACPI (ASL) для устройства HID SPI из BIOS системы.

  2. Выдача инициированного узла сброса на устройство

    • Вызов метода _RST ACPI
    • Устройство утверждает прерывание GPIO
    • Узел считывает ответ сброса с устройства
  3. Получение дескриптора HID с устройства

    • Узел записывает запрос дескриптора HID
    • Устройство утверждает прерывание GPIO
    • Узел считывает ответ дескриптора HID
  4. Получение дескриптора отчета

    • Узел записывает запрос дескриптора отчета
    • Устройство утверждает прерывание GPIO
    • Узел считывает ответ дескриптора отчета

Если узлу не удается выполнить какие-либо шаги с устройством, драйвер HIDSPI может загрузиться со значением ошибки Code 10. Узел может повторно выполнить попытку сброса устройства, если ответ не получен, но логика повторных попыток не гарантируется.

Операции с отчетами HID

В приведенной ниже таблице представлен обзор операций с отчетами HID, поддерживаемых протоколом HID SPI, а также входных и выходных отчетов, используемых для выполнения операции.

Тип отчета HID Операция Тип выходного отчета Тип входного отчета
Входной отчет GET 0x06
(Запрос — пустое содержимое)
0x0B
(Ответ)
Входной отчет SET
(Не поддерживается)
Н/Д Н/Д
Входной отчет ПРЕРЫВАНИЕ В Н/Д — запрос отсутствует 0x01
Отчет о функциях GET 0x04
(Запрос — пустое содержимое)
0x05
(Ответ)
Отчет о функциях SET 0x03 0x09
(Подтверждение — пустое содержимое)
Выходной отчет GET
(Не поддерживается)
Н/Д Н/Д
Выходной отчет SET 0x05 0x0A
(Подтверждение — пустое содержимое)

Операции с протоколом

Операция Тип отчета запроса Тип отчета об ответе
Запрос дескриптора устройства 0x01 0x7
Запрос дескриптора отчета 0x02 0x8
Командный запрос 0x07 0x4
Сброс ответа Н/Д 0x3

См. также раздел

Исходный язык ACPI (ASL)