| Предыдущий | Следующий |
| kIOReturnNotResponding | kIOReturnIsoTooNew |
kIOReturnIsoTooOld
Запрошенное время запуска уже прошло
kIOReturnIsoTooOld — результат синхронизации IOKit для изохронного запроса, запланированного слишком далеко в прошлом. Изохронный ввод-вывод использует расписание по кадрам, а не неограниченный поток байтов. В устаревшем USB-интерфейсе Apple вызывающая сторона задаёт номер кадра шины, с которого должна начаться изохронная запись; к моменту получения запроса драйвером этот кадр уже может оказаться вне допустимого окна планирования контроллера.
Это не обычный тайм-аут. Тайм-аут означает, что операция не завершилась за разрешённое время ожидания; kIOReturnIsoTooOld означает, что расписание было недопустимо ещё до постановки передачи. Безопасное исправление — получить текущий номер кадра и повторно отправить запрос с подходящим опережением, а не использовать устаревший стартовый кадр.
Как диагностировать состояние
- Запишите запрошенный стартовый кадр, текущий кадр шины, длительность передачи и задержку между вычислением и отправкой запроса.
- Располагайте планирование и отправку близко друг к другу; не вычисляйте номер кадра в одном потоке, чтобы значительно позже поставить его в очередь из другого.
- Учитывайте остановки очереди из-за смены режима, пауз отладчика, нагрузки на процессор или блокирующей работы в пути производителя данных.
- Используйте документированную политику опережения для конкретного устройства и контроллера; допустимое окно не определяется одним значением IOReturn.
Ссылки
- Apple Developer: kIOReturnIsoTooOld
- Apple: LowLatencyWriteIsochPipeAsync
- USB-IF: спецификация USB 2.0
- libusb: асинхронный изохронный ввод-вывод
Нужно найти другой код? Найти другой код состояния или ошибки.