| Предыдущий | Следующий |
| kIOUSBPipeStalled | kIOUSBTransactionTimeout |
kIOUSBTransactionReturned
Запрос в полёте был возвращён вызывающей стороне
kIOUSBTransactionReturned — результат завершения ожидающей операции канала, возвращённой до обычного успешного окончания. В документированном пути stall IOUSBFamily очистка канала возвращает ожидающие транзакции с этим статусом и всё равно вызывает их асинхронные callbacks. Поэтому состояние обозначает переход жизненного цикла поставленного запроса, а не доказательство успеха или отказа протокольной команды на устройстве.
Главный вопрос — причина возврата: восстановление канала, отмена, закрытие, изменение конфигурации или другой переход. Обработка как обычного успеха может оставить протокольное состояние незавершённым; вывод о том, что не передано ни одного байта, также может быть неверным без проверки полей завершения и протокольного кадрирования.
Как обработать завершение
- Сопоставьте callback с вызвавшим его действием, изменением состояния канала, конечной точкой, направлением и номером поколения запроса.
- Сохраняйте память запроса и состояние высокоуровневой операции действительными до вызова callback, даже если вызывающая сторона уже начала восстановление.
- Завершите или отмените каждый затронутый запрос до повторного использования канала, а допустимость воспроизведения определите по правилам идемпотентности протокола устройства.
- Записывайте оставшуюся длину и подтверждение протокола отдельно от значения IOReturn.
Ссылки
- Справочник интерфейса IOUSB: возврат ожидающих транзакций
- Исходный код IOUSBFamily: состояние канала и обработка завершений
- libusb: завершение и отмена асинхронных передач
Нужно найти другой код? Найти другой код состояния или ошибки.