/* *************************** Function Definitions ****************************** */ void phLibNfc_config_discovery_cb(void *context, NFCSTATUS status) { if((phLibNfc_LibContext_t *)context == gpphLibContext) { /*check for same context*/ if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state) { /*If shutdown called in between allow shutdown to happen*/ phLibNfc_Pending_Shutdown(); status = NFCSTATUS_SHUTDOWN; } else { gpphLibContext->status.GenCb_pending_status = FALSE; gpphLibContext->status.DiscEnbl_status = FALSE; phLibNfc_UpdateCurState(status,gpphLibContext); #ifdef RESTART_CFG if(gpphLibContext->status.Discovery_pending_status == TRUE) { NFCSTATUS RetStatus = NFCSTATUS_FAILED; /* Application has called discovery before receiving this callback, so NO notification to the upper layer, instead lower layer discovery is called */ gpphLibContext->status.Discovery_pending_status = FALSE; RetStatus = phHal4Nfc_ConfigureDiscovery( gpphLibContext->psHwReference, gpphLibContext->eLibNfcCfgMode, &gpphLibContext->sADDconfig, (pphLibNfc_RspCb_t) phLibNfc_config_discovery_cb, (void *)gpphLibContext); if (NFCSTATUS_PENDING == RetStatus) { (void)phLibNfc_UpdateNextState(gpphLibContext, eLibNfcHalStateConfigReady); gpphLibContext->status.GenCb_pending_status = TRUE; gpphLibContext->status.DiscEnbl_status = TRUE; } else { status = NFCSTATUS_FAILED; } } #endif /* #ifdef RESTART_CFG */ } } /*End of if-context check*/ else { /*exception: wrong context pointer returned*/ phOsalNfc_RaiseException(phOsalNfc_e_InternalErr,1); status = NFCSTATUS_FAILED; } if(gpphLibContext->CBInfo.pClientDisConfigCb!=NULL) { gpphLibContext->CBInfo.pClientDisConfigCb(gpphLibContext->CBInfo.pClientDisCfgCntx,status); gpphLibContext->CBInfo.pClientDisConfigCb=NULL; } return; }
NFCSTATUS phLibNfc_Mgt_ConfigureTestMode(void *pDriverHandle, pphLibNfc_RspCb_t pTestModeCb, phLibNfc_Cfg_Testmode_t eTstmode, void *pContext) { NFCSTATUS Status = NFCSTATUS_SUCCESS; phHal4Nfc_InitType_t eInitType=eInitDefault; if((NULL == pDriverHandle)||(NULL == pTestModeCb)) { Status = NFCSTATUS_INVALID_PARAMETER; } else if((NULL != gpphLibContext) && \ (gpphLibContext->LibNfcState.next_state==eLibNfcHalStateShutdown)) { Status = NFCSTATUS_SHUTDOWN; } else if( (eTstmode == phLibNfc_TstMode_On) && (NULL != gpphLibContext)) { Status=NFCSTATUS_ALREADY_INITIALISED; } else if( (eTstmode == phLibNfc_TstMode_Off) && (NULL == gpphLibContext)) { Status = NFCSTATUS_NOT_INITIALISED; } else if( (eTstmode == phLibNfc_TstMode_Off) && (NULL != gpphLibContext)) { if (NULL!= gpphLibContext->CBInfo.pClientShutdownCb) { /* Previous callback pending */ Status = NFCSTATUS_BUSY; } else { Status = NFCSTATUS_PENDING; if(TRUE != gpphLibContext->status.GenCb_pending_status) { Status = phHal4Nfc_Close(gpphLibContext->psHwReference, phLibNfc_ShutdownCb, (void *)gpphLibContext); } if(Status== NFCSTATUS_PENDING) { gpphLibContext->CBInfo.pClientShutdownCb = pTestModeCb; gpphLibContext->CBInfo.pClientShtdwnCntx = pContext; gpphLibContext->status.GenCb_pending_status=TRUE; gpphLibContext->LibNfcState.next_state= eLibNfcHalStateShutdown; } else { Status =NFCSTATUS_FAILED; } } } else { /* Initialize the Lib context */ gpphLibContext=(pphLibNfc_LibContext_t)phOsalNfc_GetMemory( (uint32_t)sizeof(phLibNfc_LibContext_t)); if(NULL == gpphLibContext) { Status=NFCSTATUS_INSUFFICIENT_RESOURCES; } else { (void)memset((void *)gpphLibContext,0,( (uint32_t)sizeof(phLibNfc_LibContext_t))); /* Store the Callback and context in LibContext structure*/ gpphLibContext->CBInfo.pClientInitCb=pTestModeCb; gpphLibContext->CBInfo.pClientInitCntx=pContext; /* Initialize the HwReferece structure */ gpphLibContext->psHwReference=(phHal_sHwReference_t *) phOsalNfc_GetMemory((uint32_t)sizeof(phHal_sHwReference_t)); (void)memset((void *)gpphLibContext->psHwReference,0, ((uint32_t)sizeof(phHal_sHwReference_t))); /* Allocate the Memory for the Transceive info */ if( gpphLibContext->psHwReference!=NULL) { gpphLibContext->psHwReference->p_board_driver = pDriverHandle; Status = phLibNfc_UpdateNextState(gpphLibContext, eLibNfcHalStateInitandIdle); if(Status==NFCSTATUS_SUCCESS) { if(eTstmode == phLibNfc_TstMode_On) eInitType = eInitTestModeOn; if(eTstmode == phLibNfc_TstMode_Off) eInitType = eInitDefault; Status=phHal4Nfc_Open( gpphLibContext->psHwReference, eInitType, phLibNfc_InitCb, (void *)gpphLibContext); } } else { Status = NFCSTATUS_INSUFFICIENT_RESOURCES; } phLibNfc_Ndef_Init(); } } return Status; }
NFCSTATUS phLibNfc_Mgt_Initialize(void *pDriverHandle, pphLibNfc_RspCb_t pInitCb, void *pContext) { NFCSTATUS Status = NFCSTATUS_SUCCESS; if((NULL == pDriverHandle)||(NULL == pInitCb)) { Status = NFCSTATUS_INVALID_PARAMETER; } else if(NULL == gpphLibContext) { /* Initialize the Lib context */ gpphLibContext=(pphLibNfc_LibContext_t)phOsalNfc_GetMemory( (uint32_t)sizeof(phLibNfc_LibContext_t)); if(NULL == gpphLibContext) { Status=NFCSTATUS_INSUFFICIENT_RESOURCES; } else { (void)memset((void *)gpphLibContext,0,( (uint32_t)sizeof(phLibNfc_LibContext_t))); /* Store the Callback and context in LibContext structure*/ gpphLibContext->CBInfo.pClientInitCb=pInitCb; gpphLibContext->CBInfo.pClientInitCntx=pContext; /* Initialize the HwReferece structure */ gpphLibContext->psHwReference=(phHal_sHwReference_t *) phOsalNfc_GetMemory((uint32_t)sizeof(phHal_sHwReference_t)); (void)memset((void *)gpphLibContext->psHwReference,0, ((uint32_t)sizeof(phHal_sHwReference_t))); /* Allocate the Memory for the Transceive info */ if( gpphLibContext->psHwReference!=NULL) { gpphLibContext->psHwReference->p_board_driver = pDriverHandle; Status = phLibNfc_UpdateNextState(gpphLibContext, eLibNfcHalStateInitandIdle); if(Status==NFCSTATUS_SUCCESS) { Status=phHal4Nfc_Open( gpphLibContext->psHwReference, eInitDefault, phLibNfc_InitCb, (void *)gpphLibContext); } } else { Status = NFCSTATUS_INSUFFICIENT_RESOURCES; } phLibNfc_Ndef_Init(); } } else if(gpphLibContext->LibNfcState.next_state==eLibNfcHalStateShutdown) { Status = NFCSTATUS_SHUTDOWN; } else { Status=NFCSTATUS_ALREADY_INITIALISED; } return Status; }