1: uhs_status_t Usbh_Api_ControlMsg(
struct usb_control_block* ucb)
2: {
3: uhs_status_t retval =
UDI_OK;
4:
5:
6:
if( Usbh_susres_get_state() != USBH_SUSRES_STS_IDLE ){
7: uhs_debug_print (DBG_ERR, ("ERROR : Don't Call Current State!!"));
8: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
9:
return UDI_STAT_INVALID_STATE;
10: }
11:
12:
if (( ucb == NULL ) || ( ucb->complete_func == NULL ) || ( ucb->data_len > USB_REQ_MAX_LENGTH )) {
13: CORE_REPORT_ERROR(
USBC_INVALID_PARAMETER );
14:
return UDI_STAT_DATA_ERROR;
15: }
16:
17:
if ( Usbc_Api_GetPipeEpType( ucb->pipe ) !=
USB_TRANS_CONTROL ) {
18: CORE_REPORT_ERROR(
USBC_INVALID_PIPE );
19:
return UDI_STAT_DATA_ERROR;
20: }
21:
22:
29:
if( (ucb->setup_data->bmRequestType & USB_DEVICE_REEQUEST_TYPE_TYPE_MASK) == USB_DEVICE_REQUEST_TYPE_STANDARD_TYPE ){
30:
switch ( ucb->setup_data->bRequest ) {
31:
case USB_DEVICE_REQUEST_SET_CONFIGURATION:
32:
case USB_DEVICE_REQUEST_SET_INTERFACE:
33: CORE_REPORT_ERROR(
USBC_INVALID_PARAMETER);
34:
return UDI_STAT_DATA_ERROR;
35:
default:
36:
break;
37: }
38: }
39:
40: 41: retval = Usbh_SendRequest(
42: (
void*)ucb,
43: ucb->usbdev->usbdev_DevNum,
44: USBWRAP_MSG_REQUEST_ISSUE,
45: USBWRAP_SUBMSG_CTLREQ );
46:
if( retval !=
UDI_OK) {
47: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR);
48: }
49:
50:
return retval;
51: }