1: uhs_status_t Usbh_Hid_RegistCallBack(
void* pContext,
2:
hid_callback_t pUserNotifyCallback)
3: {
4:
PHID_DEVICE pHidDevice;
5: uhs_status_t nRetvalResorce;
6: uhs_ubit8_t u8CntDeviceId;
7: uhs_status_t nRetStatus;
8:
9:
10:
11:
12:
13: CIAPI_HID_REPORT_MILESTONE( USBHID_CHKPOINTS_API_REGIST );
14:
15:
16:
17:
18:
if( pContext == NULL ){
19: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_PARAM_ERROR );
20:
return( USBHID_API_PARAM_ERROR );
21: }
22:
23:
24:
25:
26:
if( g_pHidDriver == NULL ) {
27: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NOT_INIT );
28:
return( USBHID_API_SYS_SYSTEM_ERROR );
29: }
30:
31:
32:
33:
34:
35: nRetStatus = Usbh_Hid_CheckDeviceStatus(pContext, &pHidDevice, &u8CntDeviceId, ID_CLSREQ_DET);
36:
if(nRetStatus != USBHID_API_SUCCESS){
37: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_SYSTEM_ERROR );
38:
return(nRetStatus);
39: }
40:
41:
42:
43:
44:
if( pUserNotifyCallback == NULL ) {
45:
46:
47: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
48: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_PARAM_ERROR );
49:
return( USBHID_API_PARAM_ERROR );
50: }
51:
52:
53:
54:
55: nRetvalResorce = HidUtils_AcquisitionSemaphore(pHidDevice->pRegistExecuteLock, WAITFOREVER);
56:
if( nRetvalResorce != TRUE ){
57:
58:
59: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
60:
61:
62: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
63:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
64: }
65:
66:
67:
68:
69:
if( pHidDevice->nDeviceStat == HID_DEVICE_STAT_CONNECTING ) {
70: ;
71: }
72:
else if( pHidDevice->nDeviceStat == HID_DEVICE_STAT_NO_SUPPORT ) {
73:
74:
75:
76: (
void)HidUtils_ReleaseSemaphore( pHidDevice->pRegistExecuteLock );
77: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
78:
79: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NO_SUPPORT );
80:
return( USBHID_API_NO_SUPPORT );
81: }
82:
else {
83:
84:
85:
86: (
void)HidUtils_ReleaseSemaphore( pHidDevice->pRegistExecuteLock );
87: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
88:
89: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_ALREADY_REGIST );
90:
return( USBHID_API_ALREADY_REGIST );
91: }
92:
93:
94: pHidDevice->nDeviceStat = HID_DEVICE_STAT_REGIST;
95:
96:
97:
98:
99: pHidDevice->pUserNotifyCallback = pUserNotifyCallback;
100:
101:
102:
103:
104:
if( (pHidDevice->pIntInBuff = (
PHID_INTIN_BUFF)HidUtils_Malloc((uhs_size_t)
sizeof(HID_INTIN_BUFF))) == NULL ) {
105:
106: pHidDevice->nDeviceStat = HID_DEVICE_STAT_CONNECTING;
107:
108: pHidDevice->pUserNotifyCallback = NULL;
109:
110:
111:
112:
113: (
void)HidUtils_ReleaseSemaphore( pHidDevice->pRegistExecuteLock );
114: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
115:
116:
117: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
118:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
119: }
120:
121:
122:
123:
124: pHidDevice->pIntInBuff->u8WritePos = 0;
125: pHidDevice->pIntInBuff->u8ReceiveSize = 0;
126: pHidDevice->pIntInBuff->isIntINUserFlag = TRUE;
127:
128:
129:
130:
131:
if( (pHidDevice->pIntInBuff->pu8StartBuff = (uhs_ubit8_t*)HidUtils_Malloc((uhs_size_t)(USB_MAXPKT_CTRLEP))) == NULL ) {
132:
133: pHidDevice->nDeviceStat = HID_DEVICE_STAT_CONNECTING;
134:
135: pHidDevice->pUserNotifyCallback = NULL;
136:
137:
138: (
void)HidUtils_Free( pHidDevice->pIntInBuff );
139:
140:
141: (
void)HidUtils_ReleaseSemaphore( pHidDevice->pRegistExecuteLock );
142:
143:
144: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
145:
146:
147: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
148:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
149: }
150:
151:
152:
153:
154:
if( (pHidDevice->pIntInBuff->pu8TempBuff = (uhs_ubit8_t*)HidUtils_Malloc((uhs_size_t)(pHidDevice->pIntInPipe->u32MaxPacketSize))) == NULL ) {
155:
156: pHidDevice->nDeviceStat = HID_DEVICE_STAT_CONNECTING;
157:
158: pHidDevice->pUserNotifyCallback = NULL;
159:
160:
161: (
void)HidUtils_Free( pHidDevice->pIntInBuff->pu8StartBuff );
162:
163: (
void)HidUtils_Free( pHidDevice->pIntInBuff );
164:
165:
166: (
void)HidUtils_ReleaseSemaphore( pHidDevice->pRegistExecuteLock );
167:
168: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
169:
170:
171: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
172:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
173: }
174:
175:
176:
177:
178: nRetvalResorce = HidUtils_ReleaseSemaphore( pHidDevice->pRegistExecuteLock );
179:
if(nRetvalResorce != TRUE){
180:
181: pHidDevice->nDeviceStat = HID_DEVICE_STAT_CONNECTING;
182:
183: pHidDevice->pUserNotifyCallback = NULL;
184:
185:
186: (
void)HidUtils_Free( pHidDevice->pIntInBuff->pu8TempBuff );
187:
188: (
void)HidUtils_Free( pHidDevice->pIntInBuff->pu8StartBuff );
189:
190: (
void)HidUtils_Free( pHidDevice->pIntInBuff );
191:
192: (
void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
193:
194:
195: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
196:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
197: }
198:
199:
200:
201:
202: nRetvalResorce = HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] );
203:
if(nRetvalResorce != TRUE){
204:
205: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE );
206:
return( USBHID_API_SYS_OUT_OF_RESOURCE );
207: }
208:
209:
210:
211:
212: CIAPI_HID_REPORT_MILESTONE( USBHID_CHKPOINTS_API_REGIST_FINISH );
213:
214:
return( USBHID_API_SUCCESS );
215: }