AG903ライブラリリファレンス
内容インデックスホーム
Body Source
本文ソース
1: uhs_status_t Usbh_Cdc_Open(void* pContext) 2: { 3: PCDC_DEVICE pCdcDevice; 4: uhs_status_t nRetvalResorce; 5: CDC_FUNC_STATUS nRetval; 6: uhs_ubit8_t u8CntDeviceId; 7: uhs_status_t nRetStatus; 8: 9: 10: 11: 12: DIAPI_CDC_REPORT_MILESTONE( USBCDC_CHKPOINTS_API_OPEN ); 13: 14: 15: 16: 17: if( pContext == NULL) { 18: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_PARAM_ERROR ); 19: return( USBCDC_API_PARAM_ERROR ); 20: } 21: 22: 23: 24: 25: if( g_pCdcDriver == NULL ) { 26: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_NOT_INIT ); 27: return( USBCDC_API_SYS_SYSTEM_ERROR ); 28: } 29: 30: 31: 32: 33: 34: nRetStatus = Usbh_Cdc_CheckDeviceStatus(pContext, &pCdcDevice, &u8CntDeviceId, ID_API_DET); 35: if(nRetStatus != USBCDC_API_SUCCESS){ 36: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_SYSTEM_ERROR ); 37: return(nRetStatus); 38: } 39: 40: 41: 42: 43: nRetvalResorce = CdcUtils_AcquisitionSemaphore(pCdcDevice->pDataInExecuteLock, WAITFOREVER); 44: if( nRetvalResorce != TRUE ){ 45: 46: 47: 48: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 49: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE ); 50: return( USBCDC_API_SYS_OUT_OF_RESOURCE ); 51: } 52: 53: 54: 55: 56: if( (pCdcDevice->nDeviceStat == CDC_DEVICE_STAT_CONNECTING) || 57: (pCdcDevice->nDeviceStat == CDC_DEVICE_STAT_REGIST) ) { 58: 59: 60: 61: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 62: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 63: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_NOT_USE ); 64: return( USBCDC_API_NOT_READY ); 65: } 66: else if( pCdcDevice->nDeviceStat == CDC_DEVICE_STAT_NO_SUPPORT ) { 67: 68: 69: 70: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 71: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 72: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_NO_SUPPORT ); 73: return( USBCDC_API_NO_SUPPORT ); 74: } 75: else if( pCdcDevice->nDeviceStat == CDC_DEVICE_STAT_OPEN ) { 76: 77: 78: 79: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 80: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 81: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_ALREADY_OPEN ); 82: return( USBCDC_API_ALREADY_OPEN ); 83: } 84: else { 85: ; 86: } 87: 88: 89: 90: 91: if( (pCdcDevice->pBulkInBuff->pu8StartBuff = (uhs_ubit8_t*)CdcUtils_BuffMalloc((uhs_size_t) (pCdcDevice->pBulkInBuff->u8TotalBuffSize * 1024))) == NULL ) { 92: 93: 94: 95: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 96: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 97: 98: 99: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE ); 100: return( USBCDC_API_SYS_OUT_OF_RESOURCE ); 101: } 102: pCdcDevice->pBulkInBuff->pu8EndBuff = (pCdcDevice->pBulkInBuff->pu8StartBuff + (pCdcDevice->pBulkInBuff->u8TotalBuffSize * 1024)); 103: pCdcDevice->pBulkInBuff->pu8ReadPos = pCdcDevice->pBulkInBuff->pu8StartBuff; 104: pCdcDevice->pBulkInBuff->pu8WritePos = pCdcDevice->pBulkInBuff->pu8StartBuff; 105: pCdcDevice->pBulkInBuff->u32RemainBuffSize = (pCdcDevice->pBulkInBuff->u8TotalBuffSize * 1024); 106: 107: 108: 109: 110: if( (pCdcDevice->pBulkInBuff->pu8TempBuff = (uhs_ubit8_t*)CdcUtils_BuffMalloc((uhs_size_t) (CDC_BULKIN_TEMP_BUFF_SIZE))) == NULL ) { 111: 112: 113: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8StartBuff ); 114: pCdcDevice->pBulkInBuff->pu8StartBuff = NULL; 115: pCdcDevice->pBulkInBuff->pu8EndBuff = NULL; 116: pCdcDevice->pBulkInBuff->pu8ReadPos = NULL; 117: pCdcDevice->pBulkInBuff->pu8WritePos = NULL; 118: pCdcDevice->pBulkInBuff->u32RemainBuffSize = 0; 119: 120: 121: 122: 123: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 124: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 125: 126: 127: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE ); 128: return( USBCDC_API_SYS_OUT_OF_RESOURCE ); 129: } 130: 131: 132: 133: 134: nRetvalResorce = CdcUtils_AcquisitionSemaphore(pCdcDevice->pBulkINBuffAccessLock, WAITFOREVER); 135: if( nRetvalResorce != TRUE ){ 136: 137: 138: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8TempBuff ); 139: pCdcDevice->pBulkInBuff->pu8TempBuff = NULL; 140: 141: 142: 143: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8StartBuff ); 144: pCdcDevice->pBulkInBuff->pu8StartBuff = NULL; 145: pCdcDevice->pBulkInBuff->pu8EndBuff = NULL; 146: pCdcDevice->pBulkInBuff->pu8ReadPos = NULL; 147: pCdcDevice->pBulkInBuff->pu8WritePos = NULL; 148: pCdcDevice->pBulkInBuff->u32RemainBuffSize = 0; 149: 150: 151: 152: 153: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 154: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 155: 156: 157: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE ); 158: return( USBCDC_API_SYS_OUT_OF_RESOURCE ); 159: } 160: 161: 162: 163: 164: nRetval = Usbh_Cdc_IssueBulkINMsg(pCdcDevice); 165: if(nRetval != CDC_FUNC_STATUS_SUCCESS ) { 166: 167: 168: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8TempBuff ); 169: pCdcDevice->pBulkInBuff->pu8TempBuff = NULL; 170: 171: 172: 173: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8StartBuff ); 174: pCdcDevice->pBulkInBuff->pu8StartBuff = NULL; 175: pCdcDevice->pBulkInBuff->pu8EndBuff = NULL; 176: pCdcDevice->pBulkInBuff->pu8ReadPos = NULL; 177: pCdcDevice->pBulkInBuff->pu8WritePos = NULL; 178: pCdcDevice->pBulkInBuff->u32RemainBuffSize = 0; 179: 180: 181: 182: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pBulkINBuffAccessLock ); 183: 184: 185: 186: 187: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 188: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 189: 190: 191: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_FAILED_BULK ); 192: return( USBCDC_API_TRANS_DATA_FAILED ); 193: } 194: 195: 196: 197: 198: pCdcDevice->nDeviceStat = CDC_DEVICE_STAT_OPEN; 199: 200: 201: 202: pCdcDevice->pBulkInBuff->isBulkINFlag = TRUE; 203: 204: 205: 206: pCdcDevice->pBulkInBuff->isBulkINUserFlag = TRUE; 207: 208: 209: 210: 211: nRetvalResorce = CdcUtils_ReleaseSemaphore( pCdcDevice->pBulkINBuffAccessLock ); 212: if(nRetvalResorce != TRUE){ 213: 214: 215: (void)CdcUtils_AcquisitionSemaphore(pCdcDevice->pBulkINBuffAccessLock, WAITFOREVER); 216: 217: 218: 219: (void)Usbh_Cdc_StopBulkINMsg(pCdcDevice); 220: 221: pCdcDevice->nDeviceStat = CDC_DEVICE_STAT_CLOSE; 222: pCdcDevice->pBulkInBuff->isBulkINFlag = FALSE; 223: pCdcDevice->pBulkInBuff->isBulkINUserFlag = FALSE; 224: 225: 226: 227: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pBulkINBuffAccessLock ); 228: 229: 230: 231: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8TempBuff ); 232: pCdcDevice->pBulkInBuff->pu8TempBuff = NULL; 233: 234: 235: 236: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8StartBuff ); 237: pCdcDevice->pBulkInBuff->pu8StartBuff = NULL; 238: pCdcDevice->pBulkInBuff->pu8EndBuff = NULL; 239: pCdcDevice->pBulkInBuff->pu8ReadPos = NULL; 240: pCdcDevice->pBulkInBuff->pu8WritePos = NULL; 241: pCdcDevice->pBulkInBuff->u32RemainBuffSize = 0; 242: 243: 244: 245: 246: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 247: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 248: 249: 250: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE ); 251: return( USBCDC_API_SYS_OUT_OF_RESOURCE ); 252: } 253: 254: 255: 256: 257: nRetvalResorce = CdcUtils_ReleaseSemaphore( pCdcDevice->pDataInExecuteLock ); 258: if(nRetvalResorce != TRUE){ 259: 260: 261: (void)CdcUtils_AcquisitionSemaphore(pCdcDevice->pBulkINBuffAccessLock, WAITFOREVER); 262: 263: 264: 265: (void)Usbh_Cdc_StopBulkINMsg(pCdcDevice); 266: 267: pCdcDevice->nDeviceStat = CDC_DEVICE_STAT_CLOSE; 268: pCdcDevice->pBulkInBuff->isBulkINFlag = FALSE; 269: pCdcDevice->pBulkInBuff->isBulkINUserFlag = FALSE; 270: 271: 272: 273: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pBulkINBuffAccessLock ); 274: 275: 276: 277: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8TempBuff ); 278: pCdcDevice->pBulkInBuff->pu8TempBuff = NULL; 279: 280: 281: 282: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8StartBuff ); 283: pCdcDevice->pBulkInBuff->pu8StartBuff = NULL; 284: pCdcDevice->pBulkInBuff->pu8EndBuff = NULL; 285: pCdcDevice->pBulkInBuff->pu8ReadPos = NULL; 286: pCdcDevice->pBulkInBuff->pu8WritePos = NULL; 287: pCdcDevice->pBulkInBuff->u32RemainBuffSize = 0; 288: 289: 290: 291: (void)CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 292: 293: 294: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE ); 295: return( USBCDC_API_SYS_OUT_OF_RESOURCE ); 296: } 297: 298: 299: 300: 301: nRetvalResorce = CdcUtils_ReleaseSemaphore( g_pCdcDriver->pApiDetAccessLock[u8CntDeviceId] ); 302: if(nRetvalResorce != TRUE){ 303: 304: 305: (void)CdcUtils_AcquisitionSemaphore(pCdcDevice->pBulkINBuffAccessLock, WAITFOREVER); 306: 307: 308: 309: (void)Usbh_Cdc_StopBulkINMsg(pCdcDevice); 310: 311: pCdcDevice->nDeviceStat = CDC_DEVICE_STAT_CLOSE; 312: pCdcDevice->pBulkInBuff->isBulkINFlag = FALSE; 313: pCdcDevice->pBulkInBuff->isBulkINUserFlag = FALSE; 314: 315: 316: 317: (void)CdcUtils_ReleaseSemaphore( pCdcDevice->pBulkINBuffAccessLock ); 318: 319: 320: 321: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8TempBuff ); 322: pCdcDevice->pBulkInBuff->pu8TempBuff = NULL; 323: 324: 325: 326: (void)CdcUtils_BuffFree( pCdcDevice->pBulkInBuff->pu8StartBuff ); 327: pCdcDevice->pBulkInBuff->pu8StartBuff = NULL; 328: pCdcDevice->pBulkInBuff->pu8EndBuff = NULL; 329: pCdcDevice->pBulkInBuff->pu8ReadPos = NULL; 330: pCdcDevice->pBulkInBuff->pu8WritePos = NULL; 331: pCdcDevice->pBulkInBuff->u32RemainBuffSize = 0; 332: 333: 334: DIAPI_CDC_REPORT_SUMMARY( USBCDC_LOG_SYS_OUT_OF_RESOURCE ); 335: return( USBCDC_API_SYS_OUT_OF_RESOURCE ); 336: } 337: 338: 339: 340: 341: DIAPI_CDC_REPORT_MILESTONE( USBCDC_CHKPOINTS_API_OPEN_FINISH ); 342: 343: return( USBCDC_API_SUCCESS ); 344: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.