| Предыдущий | Следующий |
| kIOReturnNoInterrupt | kIOReturnMessageTooLarge |
kIOReturnNoFrames
В очередь не поставлены DMA-кадры
kIOReturnNoFrames указывает на сбой постановки в очередь: DMA-операция дошла до пути, в котором не было кадров передачи. «Кадр» здесь означает единицу передачи драйвера или контроллера, а не обязательно видеокадр или блок файла. Поэтому результат следует интерпретировать вместе с API, который создаёт и отправляет дескрипторы устройства.
Это не аппаратный тайм-аут. Устройство может присутствовать и быть исправным, но сторона-производитель не передала работу DMA-механизму либо освободила её раньше, чем механизм успел воспользоваться ею. При асинхронном вводе-выводе часто встречаются ошибки срока жизни: буфер, дескриптор или соединение могут быть аннулированы до вызова обработчика завершения.
Полезные проверки
- Проследите создание дескрипторов, постановку в очередь, отмену и завершение одного неудачного запроса.
- Убедитесь, что очередь заполнена до запуска устройства и не очищается при смене режима, приостановке или закрытии.
- Сохраняйте буфер и контекст запроса до тех пор, пока API не сообщит о завершении или отмене.
- Журналируйте число кадров в очереди непосредственно перед отправкой: это отделяет пустую очередь производителя от сбоя выполнения контроллером.
Ссылки
- Apple Developer: kIOReturnNoFrames
- Исходный код Apple XNU: IOReturn.h
- Основы Apple IOKit: управление данными
- libusb: асинхронный ввод-вывод устройства
Нужно найти другой код? Найти другой код состояния или ошибки.