Что означает код возврата ядра macOS 0xE0004050 (kIOUSBTransactionReturned)?

 
Предыдущий Следующий
kIOUSBPipeStalled kIOUSBTransactionTimeout

kIOUSBTransactionReturned

Запрос в полёте был возвращён вызывающей стороне

kIOUSBTransactionReturned — результат завершения ожидающей операции канала, возвращённой до обычного успешного окончания. В документированном пути stall IOUSBFamily очистка канала возвращает ожидающие транзакции с этим статусом и всё равно вызывает их асинхронные callbacks. Поэтому состояние обозначает переход жизненного цикла поставленного запроса, а не доказательство успеха или отказа протокольной команды на устройстве.

Главный вопрос — причина возврата: восстановление канала, отмена, закрытие, изменение конфигурации или другой переход. Обработка как обычного успеха может оставить протокольное состояние незавершённым; вывод о том, что не передано ни одного байта, также может быть неверным без проверки полей завершения и протокольного кадрирования.

Как обработать завершение

  • Сопоставьте callback с вызвавшим его действием, изменением состояния канала, конечной точкой, направлением и номером поколения запроса.
  • Сохраняйте память запроса и состояние высокоуровневой операции действительными до вызова callback, даже если вызывающая сторона уже начала восстановление.
  • Завершите или отмените каждый затронутый запрос до повторного использования канала, а допустимость воспроизведения определите по правилам идемпотентности протокола устройства.
  • Записывайте оставшуюся длину и подтверждение протокола отдельно от значения IOReturn.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.