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


Объекты и дескриптор UCX, используемые драйвером контроллера узла

UCX расширяет функциональные возможности объектов WDF, чтобы определить собственные объекты UCX для USB. UCX использует эти объекты для очередей запросов к любому базовому драйверу контроллера узла.

Итоги

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

Важные API

UCX расширяет функциональные возможности объектов WDF, чтобы определить собственные объекты UCX для USB. UCX использует эти объекты для очередей запросов к любому базовому драйверу контроллера узла.

Дополнительные сведения о объектах WDF см. в разделе "Введение в объекты Framework".

UCXCONTROLLER: объект контроллера узла

Представляет контроллер узла, созданный драйвером контроллера узла. Драйвер должен создать только один объект контроллера узла для каждого экземпляра контроллера узла. Обычно создается в обратном вызове EvtDriverDeviceAdd путем вызова метода UcxControllerCreate.

Когда драйвер контроллера узла создает объект, драйвер регистрирует свою реализацию функций обратного вызова, вызываемых UCX. Драйвер также должен определить тип шины, по которому подключен контроллер узла, например ACPI или PCI. Драйвер также предоставляет сведения об устройстве контроллера узла с помощью структуры UCX_CONTROLLER_CONFIG, передаваемой вызову UcxControllerCreate.

Для обработки запросов ввода-вывода драйвер контроллера узла должен зарегистрировать интерфейс устройства GUID_DEVINTERFACE_USB_HOST_CONTROLLER. Драйвер не требуется для реализации ioCTLs, определенных в этом интерфейсе. Вместо этого клиент UCX передает запросы IOCTL, полученные в этом интерфейсе, в UCX путем вызова UcxIoDeviceControl.

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

*
EVT_UCX_CONTROLLER_USBDEVICE_ADD Вызывается, когда драйвер концентратора определил взаимодействие с корневым концентратором и /или внешними концентраторами, что новое устройство присутствует на шине.

*
EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY вызывается UCX для сбора сведений о различных функциях, поддерживаемых контроллерами USB-узла.

*
EVT_UCX_CONTROLLER_RESET вызывается UCX для сброса оборудования контроллера, возможно, в ответ на обнаруженную ошибку.

*EVT_UCX_CONTROLLER_GET_CURRENT_FRAMENU МБ ER
Используется для получения текущего номера кадра из контроллера узла, который используется драйвером концентратора для планирования инохронной передачи.

UCXROOTHUB: корневой объект концентратора

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


EVT_UCX_ROOTHUB_GET_INFO Возвращает количество портов USB 2.0 и USB 3.0 корневого концентратора.


EVT_UCX_ROOTHUB_GET_20PORT_INFO Возвращать сведения о портах USB 2.0 или USB 3.0 (*EVT_UCX_ROOTHUB_GET_30PORT_INFO) корневого концентратора.

После создания и инициализации корневого объекта драйвер концентратора взаимодействует с портами корневого концентратора, отправляя прерывания и передачу управления. UCX помогает с этими передачами путем вызова этих функций обратного вызова, реализованных драйвером контроллера узла.


EVT_UCX_ROOTHUB_CONTROL_URB обрабатывает запросы управления функциями usb-концентратором.


EVT_UCX_ROOTHUB_INTERRUPT_TX обрабатывает запрос сведений об измененных портах.

Дополнительные сведения см. в разделе "Функции обратного вызова корневого концентратора" драйвера контроллера узла.

UCXUSBDEVICE: USB-объект устройства

Представляет физическое USB-устройство, подключенное к шине. Создание драйвера контроллера узла обычно в EVT_UCX_CONTROLLER_USBDEVICE_ADD обратного вызова путем вызова метода UcxUsbDeviceCreate.

При создании объекта драйвер контроллера узла регистрирует свою реализацию функций обратного вызова с помощью вызова UcxUsbDeviceCreate.

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


EVT_UCX_USBDEVICE_ENABLE подготавливает контроллер для выполнения передачи в конечную точку устройства по умолчанию.


EVT_UCX_USBDEVICE_DISABLE ресурсы контроллера выпуска, связанные с устройством и конечной точкой по умолчанию.


EVT_UCX_USBDEVICE_ADDRESS Программирует адрес контроллера и отправляет SET_ADDRESS передачу на устройство, чтобы перенести его в адресное состояние.


EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE конечные точки, не используемые по умолчанию, в контроллере и (или) освобождает другие конечные точки, отличные от по умолчанию.


EVT_UCX_USBDEVICE_RESET Уведомление контроллера о том, что устройство было сброшено, в этом случае драйвер принимает все необходимые действия для синхронизации контроллера с USB-устройством.


EVT_UCX_USBDEVICE_UPDATE уведомляет контроллер различных битов информации, связанной с устройством.


EVT_UCX_USBDEVICE_HUB_INFO уведомление о свойствах концентратора, если дескриптор UCXUSBDEVICE предназначен для центрального устройства.


EVT_UCX_USBDEVICE_ENDPOINT_ADD уведомляет драйвер о создании конечной точки для устройства. EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD для конечной точки по умолчанию.

Когда интерфейс на приостановленном устройстве USB 3.0 сигнализирует о пробуждении, драйвер, как ожидается, вызовет UcxUsbDeviceRemoteWakeNotification , чтобы уведомить UCX.

После создания объекта время существования объекта управляется UCX, и драйвер не должен удалять объект.

UCXENDPOINT: объект endpoint

Представляет конечную точку объекта USB-устройства. Объекты конечной точки создаются контроллером узла во время EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD или обратного вызова EVT_UCX_USBDEVICE_ENDPOINT_ADD. При создании объекта конечной точки драйвер регистрирует свои функции обратного вызова.

Драйвер также создает объект очереди платформы для каждой конечной точки и передает WDFQUEUE для этой очереди в UCX путем вызова UcxEndpointSetWdfIoQueue. После создания конечной точки время существования объекта и связанных очередей управляется UCX, и драйвер не должен удалять эти объекты.

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


EVT_UCX_ENDPOINT_ABORT прервать очередь, связанную с конечной точкой.


EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS уведомлять драйвер контроллера о том, что он может завершить отмененные передачи в конечной точке.


EVT_UCX_ENDPOINT_PURGE Завершить все невыполненные запросы ввода-вывода в конечной точке.


EVT_UCX_ENDPOINT_START запустить очередь, связанную с конечной точкой.


EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD Создание статических потоков.


EVT_UCX_ENDPOINT_RESET уведомить драйвер о сбросе программирования контроллера конечной точки.

Когда драйвер контроллера узла получает ошибку ответа связи USB 3.0 no Ping Response в конечной точке, драйвер должен вызвать UcxEndpointNoPingResponseError. Этот вызов приводит к получению EVT_UCX_USBDEVICE_UPDATE объекта USB-устройства. Дополнительные сведения см. в статье о настройке конечных точек USB в драйвере контроллера узла.

UCXSTREAMS: объект Stream

Представляет ряд каналов для устройства в одной конечной точке. Драйвер контроллера узла создает потоковые объекты в обратном вызове EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD путем вызова UcxStatic Потоки Create.

Во время вызова UcxStatic Потоки Create драйвер контроллера узла регистрирует свои функции обратного вызова. Для определенного объекта конечной точки драйвер может определить, создал ли он объект streams, и вернуть дескриптор UCXSTREAMS путем вызова UcxEndpointGetStatic Потоки Referenced.

После создания объекта драйвер создает объект очереди платформы для каждого потока и отправляет дескриптор WDFQUEUE в UCX путем вызова UcxStatic Потоки SetStreamInfo.

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


EVT_UCX_ENDPOINT_STATIC_STREAMS_DISABLE ресурсы контроллера выпуска для всех потоков для конечной точки.


EVT_UCX_ENDPOINT_STATIC_STREAMS_ENABLE включить оборудование контроллера всех потоков для этой конечной точки.

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