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