1: uhs_status_t Usbh_Hid_GetReport(
void* pContext,
PHID_REPORT_INFO 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: (pstData->pu8Buff == NULL) ||
41: (pstData->u16Length == 0) ) {
42:
43:
44: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
45: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_PARAM_ERROR );
46:
return( USBHID_API_PARAM_ERROR );
47: }
48:
49:
50:
51:
52:
if( pHidDevice->nDeviceStat == HID_DEVICE_STAT_CONNECTING ) {
53:
54:
55: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
56: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NOT_USE );
57:
return( USBHID_API_NOT_READY );
58: }
59:
else if( pHidDevice->nDeviceStat == HID_DEVICE_STAT_NO_SUPPORT ) {
60:
61:
62: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
63: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NO_SUPPORT );
64:
return( USBHID_API_NO_SUPPORT );
65: }
66:
else {
67: ;
68: }
69:
70:
71:
72:
73: pRequest = HidUtils_Malloc(
sizeof(usb_device_request_t));
74:
if(pRequest == NULL) {
75: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
76: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
77:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
78: }
79:
80:
81:
82:
83: pRequest->bmRequestType = 0xA1;
84: pRequest->bRequest = 0x01;
85: pRequest->wValue0 = UNPACK16_LITTLE_ENDIAN_LSB( (pstData->ReportTypeSelector << 8) | pstData->u8Id );
86: pRequest->wValue1 = UNPACK16_LITTLE_ENDIAN_MSB( (pstData->ReportTypeSelector << 8) | pstData->u8Id );
87: pRequest->wIndex0 = UNPACK16_LITTLE_ENDIAN_LSB( pHidDevice->u16Intf_num );
88: pRequest->wIndex1 = UNPACK16_LITTLE_ENDIAN_MSB( pHidDevice->u16Intf_num );
89: pRequest->wLength0 = UNPACK16_LITTLE_ENDIAN_LSB( pstData->u16Length );
90: pRequest->wLength1 = UNPACK16_LITTLE_ENDIAN_MSB( pstData->u16Length );
91:
92:
93:
94:
95: nRetval = Usbh_Hid_ForCommand(pHidDevice, pRequest, pstData->pu8Buff, NULL);
96:
if(nRetval != HID_FUNC_STATUS_SUCCESS){
97: HidUtils_Free(pRequest);
98:
99:
100: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
101: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_FAILED_CLSREQ );
102:
return( USBHID_API_TRANS_CLSREQ_FAILED );
103: }
104:
105:
106:
107:
108: HidUtils_Free(pRequest);
109:
110:
111:
112:
113: nRetvalResorce = HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
114:
if(nRetvalResorce != TRUE){
115:
116: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
117:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
118: }
119:
120:
return( USBHID_API_SUCCESS );
121: }