usbd_urb_status()

Получить информацию о статусе блока URB

Прототип:

#include <sys/usbdi.h>
int usbd_urb_status( struct usbd_urb *urb,
uint32_t *status,
uint32_t *len );

Аргументы:

urb
Дескриптор блока URB, возвращаемый функцией usbd_alloc_urb().
status
Статус завершения.
len
Фактическая длина переданных данных в байтах.

Библиотека:

libusbdi

Описание:

Функция usbd_urb_status() позволяет получить статус завершения передачи и длину переданных данных из блока URB.

Статус завершения

Поле status содержит информацию о статусе завершения передачи и включает в себя следующие флаги:

USBD_STATUS_INPROG
Операция продолжается.
USBD_STATUS_CMP
Операция завершена.
USBD_STATUS_CMP_ERR
Операция завершена, но произошла ошибка.
USBD_STATUS_TIMEOUT
Время ожидания операции истекло.
USBD_STATUS_ABORTED
Операция прервана.
USBD_STATUS_CRC_ERR
Последний пакет от конечной точки содержал ошибку контрольной суммы.
USBD_STATUS_BITSTUFFING
Последний пакет от конечной точки содержал нарушение выравнивания битов.
USBD_STATUS_TOGGLE_MISMATCH
Последний пакет от конечной точки имел неправильный PID переключения данных.
USBD_STATUS_STALL
Конечная точка возвратила STALL PID.
USBD_STATUS_DEV_NOANSWER
Устройство не ответило на специальный пакет (IN) или не выполнило процедуру установления связи (OUT).
USBD_STATUS_PID_FAILURE
Проверка битов PID от конечной точки завершилась с ошибкой в данных PID (IN) или в процедуре установления связи (OUT).
USBD_STATUS_BAD_PID
Принятый PID был некорректным или неопределенным.
USBD_STATUS_DATA_OVERRUN
Конечная точка вернула больше данных, чем допустимый максимум.
USBD_STATUS_DATA_UNDERRUN
Конечная точка не вернула достаточно данных для заполнения заданного буфера.
USBD_STATUS_BUFFER_OVERRUN
Во время приема (IN) USB хост-контроллер получал данные от конечной точки быстрее, чем они могли быть записаны в системную память.
USBD_STATUS_BUFFER_UNDERRUN
Во время передачи (OUT) USB хост-контроллер не смог достаточно быстро получить данные.
USBD_STATUS_NOT_ACCESSED
USB хост-контроллер не выполнил запрос.

Возвращаемое значение:

EOK
Успешное завершение.
EBUSY
Блок URB задействован для ввода-вывода.
ETIMEDOUT
Завершение по тайм-ауту.
EINTR
Операция была прервана
ENODEV
Устройство было отсоединено.
EIO
Ошибка ввода-вывода.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

usbd_args_lookup(), usbd_configuration_descriptor(), usbd_device_lookup(), usbd_device_extra(), usbd_device_descriptor(), usbd_endpoint_descriptor(), usbd_hcd_info(), usbd_hub_descriptor(), usbd_interface_descriptor(), usbd_languages_descriptor(), usbd_parse_descriptors(), usbd_string()




Предыдущий раздел: Библиотека libusbdi