| Предыдущий | Следующий |
| kIOUSBTransactionReturned | kIOUSBPortWasSuspended |
kIOUSBTransactionTimeout
Тайм-аут не определяет отказавший уровень
kIOUSBTransactionTimeout означает, что транзакция достигла тайм-аута до сообщения об обычном завершении. Это отличается от kIOUSBPipeStalled, обозначающего остановленную конечную точку, и от kIOUSBPortWasSuspended, обозначающего прерывание состоянием питания. Один и тот же тайм-аут может быть вызван отсутствием ответа устройства, ожиданием данных endpoint, занятостью шины, неправильной протокольной последовательностью или слишком коротким тайм-аутом приложения для допустимой операции.
Сам код не определяет состояние высокоуровневой команды. Интерфейсы завершения предоставляют сведения конкретного запроса, например остаточную длину буфера, а протокол устройства мог частично обработать команду до того, как хост прекратил ожидание. Слепой повтор способен продублировать неидемпотентную работу.
Полезные данные
- Запишите адрес endpoint, направление и тип передачи, запрошенную длину, величину тайм-аута, остаточную длину, активную конфигурацию и alternate setting.
- Сохраните предшествующие управляющие или bulk-обмены и статус устройства, если он доступен, вместо опоры только на код тайм-аута.
- Сравните настроенный тайм-аут с документированной длительностью конкретной операции устройства.
- Выбирайте повтор, прерывание или повторное перечисление по протоколу устройства и идемпотентности операции, а не только по коду тайм-аута.
Ссылки
- Apple: коды ошибок IOUSBFamily
- Исходный код IOUSBFamily: обработка тайм-аутов при вводе-выводе канала
- libusb: состояния завершения передачи и обработка тайм-аутов
Нужно найти другой код? Найти другой код состояния или ошибки.
