1: uhs_status_t Usbh_Api_GetDescriptor(
2:
struct usb_control_block* ucb,
3:
struct usbd_usb_deviceinfo* usbdev,
4:
const uhs_ubit8_t type,
5:
const uhs_ubit8_t index,
6:
const uhs_ubit16_t wIndex,
7:
void *buf,
8:
const uhs_ubit32_t size
9: )
10: {
11: uhs_status_t retval =
UDI_OK;
12:
13:
14:
if( Usbh_susres_get_state() != USBH_SUSRES_STS_IDLE ){
15: uhs_debug_print (DBG_ERR, ("ERROR : Don't Call Current State!!"));
16: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
17:
return UDI_STAT_INVALID_STATE;
18: }
19:
20:
if (( ucb == NULL ) || ( usbdev == NULL ) || ( buf == NULL )) {
21: CORE_REPORT_ERROR(
USBC_INVALID_PARAMETER );
22:
return UDI_STAT_DATA_ERROR;
23: }
24:
25: 26:
Usbh_Api_FixupPipeInfo(
27: &ucb->pipe,
28: ucb->usbdev->usbdev_DevNum,
29:
USB_DEFAULT_EP_NUM,
30:
USB_PACKETID_IN,
31:
USB_TRANS_CONTROL, 32: ucb->usbdev->usbdev_EpMaxpktOut[
USB_DEFAULT_EP_NUM]
33: );
34:
35: retval =
Usbh_Api_SyncControlMsg(
36: ucb,
37: USB_DEVICE_REQUEST_TYPE_DEVICE_TO_HOST |
38: USB_DEVICE_REQUEST_TYPE_STANDARD_TYPE |
39: USB_DEVICE_REQUEST_TYPE_DEVICE_RECIPIENT,
40: USB_DEVICE_REQUEST_GET_DESCRIPTOR,
41: index,
42: type,
43: wIndex & 0xffU,
44: wIndex >> 8,
45: buf,
46: size );
47:
48:
if( retval !=
UDI_OK) {
49: CORE_REPORT_WARNING(
USBC_ILLEGAL_ERROR);
50: }
51:
52:
return retval;
53: }