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);
}
Esempio n. 2
0
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;
}