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.
Получите код ИСХОДНОго языка ACPI (ASL) для устройства HID SPI из BIOS системы.
Выдача инициированного узла сброса на устройство
- Вызов метода _RST ACPI
- Устройство утверждает прерывание GPIO
- Узел считывает ответ сброса с устройства
Получение дескриптора HID с устройства
- Узел записывает запрос дескриптора HID
- Устройство утверждает прерывание GPIO
- Узел считывает ответ дескриптора HID
Получение дескриптора отчета
- Узел записывает запрос дескриптора отчета
- Устройство утверждает прерывание 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 |