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