25.4. Распознавание и подключение устройств

После оповещения от разветвителя о том, что было подключено новое устройство, уроветь услуг включает порт, предоставляя устройству напряжение в 100 mA. В этот момент устройство находится в своем состоянии по умолчанию и слушает на адресе устройства 0. Уровень услуг будут продолжать запрашивать различные дескрипторы через канал по умолчанию. После этого он пошлет запрос установки адреса для перемещения устройства от адреса устройства, используемого по умолчанию (адрес 0). Несколько драйверов устройств могут поддерживать устройство. К примеру, драйвер модема может поддерживать ISDN TA через интерфейс, совместимый с AT. Драйвер для этой конкретной модели даптера ISDN может, однако, дать улучшенную поддержку для этого этого устройства. Для обеспечения такой гибкости процедура распознания возвращает приоритеты, показывающие их уровень поддержки. Поддержка конкретной версии продукта дает драйверу общего вида наименьший приоритет. Может также быть, что несколько драйверов могут подключаться к одному устройству, если есть несколько интерфейсов в одной конфигурации. Каждому драйверу достаточно поддерживать только подмножество интерфейсов.

При распознании драйвера для только что подключенного устройства сначала проверяются драйверы для специфичных устройств. Если они не найдены, то код распознания проходит по всем поддерживаемым конфигурациям то тех пор, пока драйвер не подключит некоторую конфигурацию. Для поддержки устройств с несколькими драйверами на разных интерфейсах процедура распознания проходит по всем интерфейсам в конфигурации, которые еще не были заняты драйвером. Конфигурации, которые превысили ограничения на электропитание для хаба, игнорируются. Во время подключения драйвер должен инициализировать устройство в нормальное состояние, но не переинициализировать его, так как это приведет к отключению устройства от шины и перестартовать процесс распознания для него. Во избежание избыточного потребления пропускной способности во время подключения не нужно захватывать канал прерываний, но выделение канала должно быть отложено до открытия файла и реального использования данных. Когда файл закрывается, то канал должен быть снова закрыт, даже если устройство продолжает оставаться подключенным.

25.4.1. Отключение устройства

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

Более того, устройство, которое было отключено и подключено повторно, не будет подключено повторно на тот же самый экземпляр устройства. Это может измениться в будущем, когда большее количество устройств будет поддерживать серийные номера (обратитесь к информации о дескрипторе устройства) или, другими словами, означает разработку идентификации для устройства.

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