void main() { CcmImStatus imStatus; CcmImObj *imObj = NULL; imStatus = CCM_IM_StaticInit(); assert(imStatus == CCM_IM_STATUS_SUCCESS); imStatus = CCM_IM_Create(MCP_HAL_CHIP_ID_0, &imObj, NULL, NULL); assert(imStatus == CCM_IM_STATUS_SUCCESS); imStatus = CCM_IM_RegisterStack(imObj, CCM_IM_STACK_ID_BT, CcmImBtCb); assert(imStatus == CCM_IM_STATUS_SUCCESS); VerifyStackState(CCM_IM_STACK_ID_BT, CCM_IM_STACK_STATE_OFF); imStatus = CCM_IM_BtOn(imObj); assert(imStatus == CCM_IM_STATUS_SUCCESS); VerifyStackState(CCM_IM_STACK_ID_BT, CCM_IM_STACK_STATE_ON); imStatus = CCM_IM_BtOnAbort(imObj); assert(imStatus == CCM_IM_STATUS_IMPROPER_STATE); VerifyStackState(CCM_IM_STACK_ID_BT, CCM_IM_STACK_STATE_ON); imStatus = CCM_IM_BtOff(imObj); assert(imStatus == CCM_IM_STATUS_SUCCESS); VerifyStackState(CCM_IM_STACK_ID_BT, CCM_IM_STACK_STATE_OFF); imStatus = CCM_IM_DeregisterStack(imObj, CCM_IM_STACK_ID_BT); assert(imStatus == CCM_IM_STATUS_SUCCESS); imStatus = CCM_IM_Destroy(&imObj); assert(imStatus == CCM_IM_STATUS_SUCCESS); }
CcmStatus CCM_Destroy(CcmObj **thisObj) { CcmStatus status; CcmImStatus imStatus; McpHalChipId chipId = (*thisObj)->chipId; MCP_FUNC_START("CCM_Destroy"); MCP_VERIFY_FATAL((_CCM_StaticData._ccm_Objs[chipId].refCount > 0), CCM_STATUS_INTERNAL_ERROR, ("CCM_IM_Destroy: CCM(#%d) Doesn't Exist", chipId)); /* Another client of this instance wishes to destroy it */ --_CCM_StaticData._ccm_Objs[chipId].refCount; if (_CCM_StaticData._ccm_Objs[chipId].refCount == 0) { /* Last instance client, now we can actually perform destruction*/ imStatus = CCM_IM_Destroy(&((*thisObj)->imObj)); MCP_VERIFY_FATAL((imStatus == CCM_IM_STATUS_SUCCESS), CCM_STATUS_INTERNAL_ERROR, ("CCM_IM_Destroy Failed")); CCM_VAC_Destroy (&((*thisObj)->vacObj)); /* VAC destruction cannot fail */ CAL_Destroy (&((*thisObj)->calObj)); /* CAL destruction cannot fail */ } *thisObj = NULL; status = CCM_STATUS_SUCCESS; MCP_FUNC_END(); return status; }