Получить информацию о статусе блока 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