1: uhs_status_t Usbh_Hid_SetIdle(
void* pContext,
PHID_IDLE pstData)
2: {
3:
PHID_DEVICE pHidDevice;
4: usb_device_request_t* pRequest;
5: HID_FUNC_STATUS nRetval;
6: uhs_ubit8_t u8CntDeviceId;
7: uhs_status_t nRetStatus;
8: uhs_status_t nRetvalResorce;
9:
10:
11:
12:
13:
if( pContext == NULL ){
14: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_PARAM_ERROR );
15:
return( USBHID_API_PARAM_ERROR );
16: }
17:
18:
19:
20:
21:
if( g_pHidDriver == NULL ) {
22: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NOT_INIT );
23:
return( USBHID_API_SYS_SYSTEM_ERROR );
24: }
25:
26:
27:
28:
29:
30: nRetStatus = Usbh_Hid_CheckDeviceStatus(pContext, &pHidDevice, &u8CntDeviceId, ID_CLSREQ_DET);
31:
if(nRetStatus != USBHID_API_SUCCESS){
32: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_SYSTEM_ERROR );
33:
return(nRetStatus);
34: }
35:
36:
37:
38:
39:
if(pstData == NULL) {
40:
41:
42: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
43: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_PARAM_ERROR );
44:
return( USBHID_API_PARAM_ERROR );
45: }
46:
if( pstData->u8Id > 3 ) {
47:
48:
49: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
50: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_PARAM_ERROR );
51:
return( USBHID_API_PARAM_ERROR );
52: }
53:
54:
55:
56:
57:
if( pHidDevice->nDeviceStat == HID_DEVICE_STAT_CONNECTING ) {
58:
59:
60: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
61: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NOT_USE );
62:
return( USBHID_API_NOT_READY );
63: }
64:
else if( pHidDevice->nDeviceStat == HID_DEVICE_STAT_NO_SUPPORT ) {
65:
66:
67: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
68: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NO_SUPPORT );
69:
return( USBHID_API_NO_SUPPORT );
70: }
71:
else {
72: ;
73: }
74:
75:
76:
77:
78: pRequest = HidUtils_Malloc(
sizeof(usb_device_request_t));
79:
if(pRequest == NULL) {
80: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
81: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
82:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
83: }
84:
85:
86:
87:
88: pRequest->bmRequestType = 0x21;
89: pRequest->bRequest = 0x0A;
90: pRequest->wValue0 = UNPACK16_LITTLE_ENDIAN_LSB( (pstData->u8Duration << 8) | pstData->u8Id );
91: pRequest->wValue1 = UNPACK16_LITTLE_ENDIAN_MSB( (pstData->u8Duration << 8) | pstData->u8Id );
92: pRequest->wIndex0 = UNPACK16_LITTLE_ENDIAN_LSB( pHidDevice->u16Intf_num );
93: pRequest->wIndex1 = UNPACK16_LITTLE_ENDIAN_MSB( pHidDevice->u16Intf_num );
94: pRequest->wLength0 = 0;
95: pRequest->wLength1 = 0;
96:
97:
98:
99:
100: nRetval = Usbh_Hid_ForCommand(pHidDevice, pRequest, NULL, NULL);
101:
if(nRetval != HID_FUNC_STATUS_SUCCESS){
102: HidUtils_Free(pRequest);
103:
104:
105: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
106: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_FAILED_CLSREQ );
107:
return( USBHID_API_TRANS_CLSREQ_FAILED );
108: }
109:
110:
111:
112:
113: HidUtils_Free(pRequest);
114:
115:
116:
117:
118: nRetvalResorce = HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
119:
if(nRetvalResorce != TRUE){
120:
121: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
122:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
123: }
124:
125:
return( USBHID_API_SUCCESS );
126: }