1: uhs_status_t Usbh_Api_ReqSuspend(
void )
2: {
3: uhs_status_t retval =
UDI_STAT_INVALID_STATE;
4: uhs_status_t result;
5: UHS_MSG_APIWRAP_ANS_SUSPEND_FMT *rcv_msg;
6:
7:
struct usbd_usb_deviceinfo * pRootHub;
8:
9: pRootHub =
Usbh_Api_EnumRootHub( NULL );
10:
11: 12:
if( pRootHub->usbdev_LowerHub[1] ){
13:
14:
15:
if( (Usbh_susres_get_state() == USBH_SUSRES_STS_IDLE) && (Usb_Hub_get_suspend_flg() == 1) ){
16:
17: 18: kernel_wait(NULL,100);
19:
20:
21:
if( Usbh_chk_apiwrap_alldev_request() == 0 ){
22:
23:
24: retval = kernel_create_message( &g_suspend_reqans_mbox );
25:
if(retval !=
UDI_OK){
26: CORE_REPORT_ERROR(
USBC_RESOURCE_UNAVAIL );
27:
return UDI_STAT_RESOURCE_UNAVAIL;
28: }
29:
30:
31:
32: retval = Usbh_susres_SendMsg_req_susres( &g_suspend_reqans_mbox , USBH_APIWRAP_MSGID_REQ_SUSPEND );
33:
if(retval !=
UDI_OK){
34: kernel_delete_message( &g_suspend_reqans_mbox , in_interrupt() );
35: CORE_REPORT_ERROR(
USBC_RESOURCE_UNAVAIL );
36:
return UDI_STAT_RESOURCE_UNAVAIL;
37: }
38:
39:
40: retval = kernel_receive_message(
41: &g_suspend_reqans_mbox ,
42: (T_MSG **)&rcv_msg,
43: WAITFOREVER ,
44: in_interrupt()
45: );
46:
if(retval !=
UDI_OK){
47: kernel_delete_message( &g_suspend_reqans_mbox , in_interrupt() );
48: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR);
49:
return retval;
50: }
51:
52:
#ifdef USBH_COMMON_DISP_MESSID
53:
54: Usbh_common_DisplayMessage( (
void *)rcv_msg , "API_WR_SUSD" );
55:
#endif
56:
57: 58: retval = rcv_msg->result;
59:
60:
61: result = kernel_mem_free( &g_apiwrap_info.mpl_osc , (
void*)rcv_msg , in_interrupt() );
62:
if( result !=
UDI_OK ) {
63: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
64: }
65:
66:
67: result = kernel_delete_message( &g_suspend_reqans_mbox , in_interrupt() );
68:
if(result !=
UDI_OK){
69: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
70: }
71: }
72:
else{
73: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
74: uhs_debug_print (DBG_ERR, ("Usbh_Api_ReqSuspend : error request found !!"));
75: }
76: }
77:
else{
78: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
79: uhs_debug_print (DBG_ERR, ("Usbh_Api_ReqSuspend : error stage error !!"));
80: }
81: }
82:
else{
83: CORE_REPORT_ERROR(
USBC_ILLEGAL_ERROR );
84: uhs_debug_print (DBG_ERR, ("Usbh_Api_ReqSuspend : error root_hub empty error !!"));
85: }
86:
87:
#ifdef USBH_DBG_ADD_MESSAGE
88: uhs_debug_print( DBG_ERR, ( "Return Usbh_Api_ReqSuspend (result=%d)",retval) );
89:
#endif
90:
return retval;
91: }