Функции обратного вызова корневого концентратора драйвера контроллера узла USB
UCX выполняет управление корневым концентратором. Он имитирует конечные точки виртуального управления и прерывания и управляет ими. UCX создает эти виртуальные конечные точки, когда драйвер контроллера узла создает корневой объект концентратора.
Драйвер USB-концентратора взаимодействует с корневым концентратором так же, как и с обычным устройством концентратора. Однако драйверу контроллера узла не нужно обрабатывать запросы, отправляемые в корневой концентратор для конечных точек управления и прерывания напрямую. UCX обрабатывает эти запросы. UCX вызывает функции обратного вызова, реализованные драйвером контроллера узла, чтобы он возвращал релевантные сведения о текущем состоянии портов контроллера узла. После выполнения этих функций обратного вызова базовые запросы UCX завершаются и возвращаются в драйвер концентратора.
При получении прерывания передачи для корневого концентратора UCX устанавливает запрос как ожидающий. При обнаружении изменения в одном из корневых портов концентратора драйвер контроллера узла вызывает UcxRootHubPortChanged. Затем UCX вызывает обратный вызов EVT_UCX_ROOTHUB_INTERRUPT_TX драйвера, и драйвер указывает, что порт был изменен. В настоящее время UCX завершает ожидающий запрос обратно к драйверу концентратора. Драйвер концентратора отправляет передачу управления в корневой концентратор, чтобы получить состояние порта, который сигнализирует об изменении. UCX задает для управления запросом на передачу в ожидание и вызывает функцию обратного вызова EVT_UCX_ROOTHUB_CONTROL_URB драйвера. В реализации возвращает текущее состояние порта корневого концентратора, включая указание на то, что устройство подключено. UCX завершает запрос на передачу элемента управления драйверу концентратора, и перечисление устройств продолжается.