| Предыдущий | Следующий |
| kIOUSBInterfaceNotFound | kIOUSBTransactionReturned |
kIOUSBPipeStalled
Остановка относится к конечной точке, а не обязательно ко всему устройству
kIOUSBPipeStalled сообщает, что запрошенный канал остановлен. Stall отличается от тайм-аута: это определённое состояние endpoint, и ещё одна передача по тому же каналу сама по себе не является корректным восстановлением. Другие интерфейсы и конечные точки устройства могут оставаться работоспособными, поэтому диагностика только по имени устройства обычно слишком груба.
Документация Apple по USB различает очистку канала на стороне контроллера и восстановление состояния endpoint устройства. Корректная последовательность может требовать управляющего запроса, определённого протоколом, повторной синхронизации data toggle и явной обработки запросов, ожидавших завершения в момент обнаружения halt. Безопасный порядок зависит от типа передачи и класса устройства.
Перед повторной отправкой работы
- Сохраните адрес конечной точки, тип и направление передачи, команду или протокольную операцию и идентификаторы всех поставленных запросов.
- Установите, требует ли протокол устройства отдельной команды восстановления помимо очистки канала на стороне хоста.
- Учтите возвращённые или отменённые асинхронные запросы и проверьте обработку data toggle до возобновления обычного трафика.
- Не воспроизводите неидемпотентную команду, пока протокол устройства не подтвердит, была ли она принята до остановки.
Ссылки
- Apple: IOUSBHostPipe clearStall
- Apple: stall, halt и повторная синхронизация data toggle
- USB-IF: спецификация Open USB Driver Interface
Нужно найти другой код? Найти другой код состояния или ошибки.