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


Работа с USB-устройствами

В этом разделе описываются операции, которые драйвер Kernel-Mode Driver Framework (KMDF) или драйвер User-Mode Driver Framework (UMDF), начиная с версии 2, может выполняться с помощью методов объекта USB-устройства, предоставляемых Windows Driver Framework (WDF).

Он содержит следующие разделы:

Пошаговые инструкции по написанию простого USB-драйвера USB-клиента на основе KMDF см. в статье Как написать первый драйвер USB-клиента (KMDF).

Создание объекта USB-устройства

Чтобы использовать целевые объекты USB-ввода-вывода платформы (WDFUSBDEVICE, WDFUSBINTERFACE и WDFUSBPIPE), драйвер клиента должен сначала вызвать WdfUsbTargetDeviceCreateWithParameters для создания объекта USB-устройства. Как правило, драйвер вызывает WdfUsbTargetDeviceCreateWithParameters из функции обратного вызова EvtDevicePrepareHardware.

Когда драйвер вызывает WdfUsbTargetDeviceCreateWithParameters, платформа создает объект WDFUSBDEVICE и связывает его с FDO, который представляет USB-устройство. Метод возвращает дескриптор к новому объекту USB-устройства фреймворка, который драйвер USB-клиента затем может использовать для связи с физическим устройством.

После вызова WdfUsbTargetDeviceCreateWithParametersдрайвер может вызывать WdfUsbTargetDeviceGetDeviceDescriptor и WdfUsbTargetDeviceRetrieveConfigDescriptor для получения дескрипторов USB с устройства. Эти дескрипторы содержат сведения о первой конфигурации устройства, его параметрах интерфейса и определенных конечных точках. (Дескрипторы USB определены в официальной спецификации USB.)

настройка USB-устройства

Метод WdfUsbTargetDeviceCreateWithParameters также создает каркасный объект USB-интерфейса для каждого USB-интерфейса, содержащегося в первой конфигурации устройства.

После вызова WdfUsbTargetDeviceCreateWithParametersдрайвер клиента должен вызвать WdfUsbTargetDeviceSelectConfig для выбора конфигурации. Этот метод создает объекты интерфейса платформы для каждого альтернативного параметра интерфейса в выбранной конфигурации.

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

После выбора конфигурации при необходимости можно изменить альтернативные параметры для интерфейсов конфигурации.

Вы также можете вызвать WdfUsbTargetDeviceSelectConfig для отмены настройки устройства.

Для получения дополнительной информации см.:

получение сведений об устройстве

После настройки устройства драйвер клиента может вызвать следующие методы, чтобы получить сведения о USB-устройстве:

WdfUsbTargetDeviceQueryUsbCapability
Определяет, поддерживает ли контроллер узла и стек USB-драйверов определенную возможность. Перед вызовом WdfUsbTargetDeviceQueryUsbCapabilityдрайвер должен вызывать WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceGetIoTarget
Возвращает указатель на объект целевого устройства ввода-вывода, связанного с USB-устройством. Драйвер может передать этот хэндл в WdfRequestSend или WdfIoTargetStop.

WdfUsbTargetDeviceRetrieveInformation
Извлекает сведения о версии и возможностях, связанных с USB-устройством.

WdfUsbTargetDeviceIsConnectedSynchronous (только KMDF)
Определяет, подключено ли устройство.

WdfUsbTargetDeviceRetrieveCurrentFrameNumber (только KMDF)
Извлекает текущий номер фрейма USB.

Получение дескрипторов USB

Чтобы получить строки Юникода, содержащиеся в дескрипторах USB-устройства, драйвер может вызвать любой из следующих методов:

WdfUsbTargetDeviceGetDeviceDescriptor
Получает дескриптор USB-устройства .

WdfUsbTargetDeviceRetrieveConfigDescriptor
Извлекает конфигурационный дескриптор USB-устройства , дескрипторы интерфейса и дескрипторы конечных точек.

WdfUsbTargetDeviceQueryString
Копирует строку Юникода в предоставленный драйвером буфер.

WdfUsbTargetDeviceAllocAndQueryString
Копирует строку Юникода в буфер, предоставленный платформой.

WdfUsbTargetDeviceFormatRequestForString
Форматирует запрос для строки в формате Юникода. Драйвер может вызывать WdfRequestSend, чтобы отправить запрос синхронно или асинхронно.

Отправка управляющей передачи

Ваш драйвер может вызвать следующие методы для отправки запроса ввода-вывода, описывающего стандартную, класс-специфическую или поставщика-специфическую передачу управления USB.

WdfUsbTargetDeviceSendControlTransferSynchronously
Синхронно отправляет запрос на передачу USB-элемента управления.

WdfUsbTargetDeviceFormatRequestForControlTransfer
Форматирует запрос на передачу управления через USB. Драйвер может вызывать WdfRequestSend, чтобы отправить запрос синхронно или асинхронно.

Для получения дополнительной информации, см. раздел Как отправить управляющую передачу USB.

Сброс Power-Cycling Порта Устройства

Драйвер может вызвать следующие методы для сброса или перезагрузки питания USB-порта, к которому подключено устройство.

WdfUsbTargetDeviceResetPortSynchronously
Синхронно отправляет запрос на сброс USB-порта устройства.

WdfUsbTargetDeviceCyclePortSynchronously (только KMDF)
Синхронно отправляет запрос на перезапуск питания USB-порта устройства.

WdfUsbTargetDeviceFormatRequestForCyclePort (только KMDF)
Форматирует запрос на цикл питания USB-порта устройства. Драйвер должен вызывать WdfRequestSend, чтобы отправить запрос синхронно или асинхронно.

Для получения дополнительной информации см. Как устранить ошибки USB-канала.

Отправка URB на устройство

Если драйвер KMDF взаимодействует с usb-устройством, отправляя запросы ввода-вывода, содержащие URI, драйвер может вызвать следующие методы:

WdfUsbTargetDeviceCreateUrb (только KMDF)
Выделяет блок USB-запроса (URB). Перед вызовом WdfUsbTargetDeviceCreateUrbдрайвер должен вызывать WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceCreateIsochUrb (только KMDF)
Выделяет изохронный блок USB-запроса (URB). Перед вызовом WdfUsbTargetDeviceCreateIsochUrbдрайвер должен вызывать WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceSendUrbSynchronously (только KMDF)
Синхронно отправляет запрос ввода-вывода, содержащий URB.

WdfUsbTargetDeviceFormatRequestForUrb (только KMDF)
Форматирует запрос ввода-вывода, содержащий URB. Драйвер должен вызывать WdfRequestSend, чтобы отправить запрос синхронно или асинхронно.

WdfUsbTargetDeviceWdmGetConfigurationHandle (только KMDF)
Возвращает дескриптор конфигурации данного USBD устройства. Для некоторых URB требуется этот хэндл.

Общие концептуальные сведения об URBs см. в разделе "Выделение и создание URBs".