Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
UCX расширяет функциональные возможности объектов WDF, чтобы определить собственные объекты UCX для USB. UCX использует эти объекты для очереди запросов к любому подчиненному драйверу контроллера хоста.
Сводка
- Объекты UCX используются драйвером контроллера узла для обработки операций, связанных с контроллером, его корневым концентратором и всеми конечными точками.
- Объекты UCX создаются драйвером контроллера узла, а время существования каждого объекта управляется UCX.
Важные API
UCX расширяет функциональные возможности объектов WDF, чтобы определить собственные объекты UCX для USB. UCX использует эти объекты для постановки в очередь запросов к любому базовому драйверу контроллера хоста.
Дополнительные сведения о объектах WDF см. в разделе Введение в объекты Платформы.
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_FRAMENUMBER Используется для получения текущего номера кадров из хост-контроллера, который используется драйвером концентратора для планирования изохронной передачи.
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
Обрабатывает запросы на сведения об измененных портах.
Дополнительные сведения см. в разделе «Функции обратного вызова корневого концентратора» драйвера host-контроллера.
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: объект конечная точка
Представляет конечную точку объекта 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 на конечной точке, драйвер должен вызвать UcxEndpointNoPingResponseError. Этот вызов приводит к тому, что объект USB-устройства получает EVT_UCX_USBDEVICE_UPDATE. Дополнительные сведения см. в статье о настройке конечных точек USB в драйвере контроллера узла.
UCXSTREAMS: потоковый объект
Представляет собой набор каналов к устройству в пределах одной конечной точки. Драйвер контроллера узла создает потоковые объекты в обратном вызове EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD путем вызова UcxStaticStreamsCreate.
Во время вызова UcxStaticStreamsCreate драйвер контроллера узла регистрирует свои функции обратного вызова. Для определенного объекта конечной точки драйвер может определить, создал ли он объект streams и возвратить дескриптор UCXSTREAMS путем вызова UcxEndpointGetStaticStreamsReferenced.
После создания объекта драйвер создает объект очереди платформы для каждого потока и отправляет дескриптор WDFQUEUE в UCX путем вызова UcxStaticStreamsSetStreamInfo.
Объект потока предоставляет несколько функций обратного вызова для контроллера хоста, чтобы помочь UCX в управлении статическими потоками.
EVT_UCX_ENDPOINT_STATIC_STREAMS_DISABLE
Освободить ресурсы контроллера для всех потоков конечной точки.
EVT_UCX_ENDPOINT_STATIC_STREAMS_ENABLE Включите оборудование контроллера всех потоков для этой конечной точки.
Срок существования объекта и связанных с ним очередей управляется UCX, и драйвер не должен удалять объект.