| Предыдущий | Следующий |
| kIOUSBReserved2Err | kIOUSBBufferUnderrunErr |
kIOUSBBufferOverrunErr
Учёт буфера на стороне хоста, а не остановка конечной точки
kIOUSBBufferOverrunErr — устаревший статус IOUSBFamily для передачи, при которой стек USB или путь контроллера не смог вместить связанный с запросом объём данных. Источник AllStat описывает его как переполнение буфера и упоминает возможный контекст оборудования хоста или шины PCI. Поэтому сам по себе код не указывает ошибку протокола класса и не равнозначен состоянию STALL конечной точки.
Направление имеет значение. Запишите, была ли передача IN или OUT, запрошенную длину, фактически завершённую длину, если она доступна, и путь DMA или контроллера. Слишком короткий буфер приложения, несовпадение длины дескриптора и проблема завершения на стороне контроллера могут одинаково выглядеть на границе API, но требуют разных исправлений.
Какие данные стоит сохранить
- Сохраните адрес конечной точки, тип и направление передачи, запрошенное число байтов, фактически завершённое число байтов и статусы соседних передач.
- Сопоставьте ошибку со сбросом контроллера, сном и пробуждением, повторным подключением концентратора, событиями PCIe или Thunderbolt и точной конфигурацией устройства.
- Сравните размер буфера, переданный клиентом, с максимальным размером пакета и сообщения протокола; не предполагайте, что каждый лишний байт обязательно поступил от USB-устройства.
- Не повторяйте неидемпотентную операцию, пока протокол устройства не позволит установить, приняло ли оно исходную команду.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.