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

 
Предыдущий Следующий
kIOUSBReserved2Err kIOUSBBufferUnderrunErr

kIOUSBBufferOverrunErr

Учёт буфера на стороне хоста, а не остановка конечной точки

kIOUSBBufferOverrunErr — устаревший статус IOUSBFamily для передачи, при которой стек USB или путь контроллера не смог вместить связанный с запросом объём данных. Источник AllStat описывает его как переполнение буфера и упоминает возможный контекст оборудования хоста или шины PCI. Поэтому сам по себе код не указывает ошибку протокола класса и не равнозначен состоянию STALL конечной точки.

Направление имеет значение. Запишите, была ли передача IN или OUT, запрошенную длину, фактически завершённую длину, если она доступна, и путь DMA или контроллера. Слишком короткий буфер приложения, несовпадение длины дескриптора и проблема завершения на стороне контроллера могут одинаково выглядеть на границе API, но требуют разных исправлений.

Какие данные стоит сохранить

  • Сохраните адрес конечной точки, тип и направление передачи, запрошенное число байтов, фактически завершённое число байтов и статусы соседних передач.
  • Сопоставьте ошибку со сбросом контроллера, сном и пробуждением, повторным подключением концентратора, событиями PCIe или Thunderbolt и точной конфигурацией устройства.
  • Сравните размер буфера, переданный клиентом, с максимальным размером пакета и сообщения протокола; не предполагайте, что каждый лишний байт обязательно поступил от USB-устройства.
  • Не повторяйте неидемпотентную операцию, пока протокол устройства не позволит установить, приняло ли оно исходную команду.

Ссылки


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