AG903ライブラリリファレンス
内容インデックスホーム
Body Source
本文ソース
1: uhs_status_t Usbh_Hid_GetReportDescriptor(void* pContext, PHID_DESC_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_ubit16_t u16WLength; 8: uhs_status_t nRetStatus; 9: uhs_status_t nRetvalResorce; 10: 11: 12: 13: 14: 15: if( pContext == NULL ){ 16: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_PARAM_ERROR ); 17: return( USBHID_API_PARAM_ERROR ); 18: } 19: 20: 21: 22: 23: if( g_pHidDriver == NULL ) { 24: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NOT_INIT ); 25: return( USBHID_API_SYS_SYSTEM_ERROR ); 26: } 27: 28: 29: 30: 31: 32: nRetStatus = Usbh_Hid_CheckDeviceStatus(pContext, &pHidDevice, &u8CntDeviceId, ID_CLSREQ_DET); 33: if(nRetStatus != USBHID_API_SUCCESS){ 34: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_SYSTEM_ERROR ); 35: return(nRetStatus); 36: } 37: 38: 39: 40: 41: if( (pstData == NULL) || 42: (pstData->pu8Buff == NULL) || 43: (pstData->u16Length == 0) ) { 44: 45: 46: (void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] ); 47: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_PARAM_ERROR ); 48: return( USBHID_API_PARAM_ERROR ); 49: } 50: 51: 52: 53: 54: if( pHidDevice->nDeviceStat == HID_DEVICE_STAT_CONNECTING ) { 55: 56: 57: (void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] ); 58: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NOT_USE ); 59: return( USBHID_API_NOT_READY ); 60: } 61: else if( pHidDevice->nDeviceStat == HID_DEVICE_STAT_NO_SUPPORT ) { 62: 63: 64: (void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] ); 65: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_NO_SUPPORT ); 66: return( USBHID_API_NO_SUPPORT ); 67: } 68: else { 69: ; 70: } 71: 72: 73: 74: 75: pRequest = HidUtils_Malloc(sizeof(usb_device_request_t)); 76: if(pRequest == NULL) { 77: (void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] ); 78: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE ); 79: return( USBHID_API_SYS_OUT_OF_RESOURCE ); 80: } 81: 82: 83: 84: u16WLength = (pstData->u16Length + 64); 85: 86: 87: 88: 89: pRequest->bmRequestType = 0x81; 90: pRequest->bRequest = 0x06; 91: pRequest->wValue0 = 0x00; 92: pRequest->wValue1 = UNPACK16_LITTLE_ENDIAN_LSB( (uhs_ubit16_t)USB_DESC_TYPE_REPORT ); 93: pRequest->wIndex0 = UNPACK16_LITTLE_ENDIAN_LSB( pHidDevice->u16Intf_num ); 94: pRequest->wIndex1 = UNPACK16_LITTLE_ENDIAN_MSB( pHidDevice->u16Intf_num ); 95: pRequest->wLength0 = UNPACK16_LITTLE_ENDIAN_LSB( u16WLength ); 96: pRequest->wLength1 = UNPACK16_LITTLE_ENDIAN_MSB( u16WLength ); 97: 98: 99: 100: 101: nRetval = Usbh_Hid_ForCommand(pHidDevice, pRequest, pstData->pu8Buff, NULL); 102: if(nRetval != HID_FUNC_STATUS_SUCCESS){ 103: HidUtils_Free(pRequest); 104: 105: 106: (void)HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] ); 107: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_FAILED_CLSREQ ); 108: return( USBHID_API_TRANS_CLSREQ_FAILED ); 109: } 110: 111: 112: 113: 114: HidUtils_Free(pRequest); 115: 116: 117: 118: 119: nRetvalResorce = HidUtils_ReleaseSemaphore( g_pHidDriver->pClsReqDetAccessLock[u8CntDeviceId] ); 120: if(nRetvalResorce != TRUE){ 121: 122: CIAPI_HID_REPORT_SUMMARY( USBHID_LOG_SYS_OUT_OF_RESOURCE ); 123: return( USBHID_API_SYS_OUT_OF_RESOURCE ); 124: } 125: 126: return( USBHID_API_SUCCESS ); 127: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.