void phLibNfc_P2pConfigParamsCb(void* pContext,NFCSTATUS status,void* pInfo) { pphNciNfc_RfDiscConfigParams_t pRfDiscConfParam = (pphNciNfc_RfDiscConfigParams_t) pContext; NFCSTATUS wStatus = status; pphLibNfc_LibContext_t pLibContext = gpphLibNfc_Context; phLibNfc_Event_t TrigEvent = phLibNfc_EventReqCompleted; PH_LOG_LIBNFC_FUNC_ENTRY(); if(NULL != pLibContext) { if(NULL != pRfDiscConfParam) { phOsalNfc_FreeMemory(pRfDiscConfParam); } (void)phLibNfc_StateHandler(pLibContext, TrigEvent, pInfo, NULL, NULL); if(NULL != pLibContext->CBInfo.pClientNfcIpCfgCb) { if(NFCSTATUS_SUCCESS != wStatus) { wStatus = NFCSTATUS_FAILED; } pLibContext->CBInfo.pClientNfcIpCfgCb(pLibContext->CBInfo.pClientNfcIpCfgCntx, wStatus); } pLibContext->CBInfo.pClientNfcIpCfgCb = NULL; pLibContext->CBInfo.pClientNfcIpCfgCntx = NULL; } PH_LOG_LIBNFC_FUNC_EXIT(); }
static void phLibNfc_DeferredReceiveCb(void *pContext) { phNfc_sData_t tRecvBufferInfo; pphLibNfc_Receive_RspCb_t pUpperLayerCb = NULL; phLibNfc_LibContext_t *pLibContext = (phLibNfc_LibContext_t *)pContext; void *pUpperLayerCtx = NULL; phLibNfc_Event_t TrigEvent = phLibNfc_EventReqCompleted; PH_LOG_LIBNFC_FUNC_ENTRY(); if(NULL != pLibContext) { pUpperLayerCb = pLibContext->CBInfo.pClientNfcIpRxCb; pUpperLayerCtx = pLibContext->CBInfo.pClientNfcIpRxCntx; pLibContext->CBInfo.pClientNfcIpRxCb = NULL; pLibContext->CBInfo.pClientNfcIpRxCntx = NULL; (void)phLibNfc_StateHandler(pLibContext, TrigEvent, NULL, NULL, NULL); if(NULL != pUpperLayerCb) { tRecvBufferInfo.buffer = pLibContext->HCE_FirstBuffer.buffer; tRecvBufferInfo.length = pLibContext->HCE_FirstBuffer.length; pUpperLayerCb(pUpperLayerCtx,&tRecvBufferInfo,NFCSTATUS_SUCCESS); } if(pLibContext->HCE_FirstBuffer.buffer ) { phOsalNfc_FreeMemory(pLibContext->HCE_FirstBuffer.buffer); pLibContext->HCE_FirstBuffer.buffer = NULL; pLibContext->HCE_FirstBuffer.length = 0; } } PH_LOG_LIBNFC_FUNC_EXIT(); return; }
static void phLibNfc_P2pRemoteDev_ReceiveCb(void* pContext,NFCSTATUS status,void* pInfo) { NFCSTATUS wStatus = status; phNfc_sData_t tRecvBufferInfo; pphNciNfc_TransactInfo_t pTransInfo = pInfo; pphLibNfc_LibContext_t pLibContext = (pphLibNfc_LibContext_t) pContext; phLibNfc_Event_t TrigEvent = phLibNfc_EventReqCompleted; pphLibNfc_Receive_RspCb_t pUpperLayerCb = NULL; void *pUpperLayerCtx = NULL; UNUSED(pContext); PH_LOG_LIBNFC_FUNC_ENTRY(); if((NULL != pLibContext) && (gpphLibNfc_Context == pLibContext)&& (NULL != pTransInfo)) { pUpperLayerCb = pLibContext->CBInfo.pClientNfcIpRxCb; pUpperLayerCtx = pLibContext->CBInfo.pClientNfcIpRxCntx; (void)phLibNfc_StateHandler(pLibContext, TrigEvent, NULL, NULL, NULL); if(NULL != pUpperLayerCb) { tRecvBufferInfo.buffer = pTransInfo->pbuffer; tRecvBufferInfo.length = (uint32_t)pTransInfo->wLength; pUpperLayerCb(pUpperLayerCtx,&tRecvBufferInfo,wStatus); } } PH_LOG_LIBNFC_FUNC_EXIT(); }
NFCSTATUS phLibNfc_RemoteDev_Receive( phLibNfc_Handle hRemoteDevice, pphLibNfc_Receive_RspCb_t pReceiveRspCb, void* pContext) { NFCSTATUS wStatus = NFCSTATUS_FAILED; pphLibNfc_LibContext_t pLibContext = gpphLibNfc_Context; phLibNfc_Event_t TrigEvent = phLibNfc_EventRecv; pphNciNfc_RemoteDevInformation_t pNciRemDevHandle = NULL; phLibNfc_sRemoteDevInformation_t *pLibRemDevHandle = (phLibNfc_sRemoteDevInformation_t *)hRemoteDevice; PH_LOG_LIBNFC_FUNC_ENTRY(); wStatus = phLibNfc_IsInitialised(pLibContext); if(NFCSTATUS_SUCCESS != wStatus) { wStatus=NFCSTATUS_NOT_INITIALISED; } /* Check for valid state,If De initialize is called then return NFCSTATUS_SHUTDOWN */ else if(gpphLibNfc_Context->StateContext.TrgtState == phLibNfc_StateReset) { wStatus = NFCSTATUS_SHUTDOWN; } else if((NULL == pReceiveRspCb) || (NULL == pLibRemDevHandle)) { wStatus = NFCSTATUS_INVALID_PARAMETER; } else { wStatus = phLibNfc_MapRemoteDevHandle(&pLibRemDevHandle,&pNciRemDevHandle,PH_LIBNFC_INTERNAL_LIBTONCI_MAP); if((NFCSTATUS_SUCCESS == wStatus) && (NULL != pNciRemDevHandle)) { pLibContext->CBInfo.pClientNfcIpRxCb = pReceiveRspCb; pLibContext->CBInfo.pClientNfcIpRxCntx = pContext; wStatus = phLibNfc_StateHandler(pLibContext,TrigEvent, NULL,NULL,NULL); if(NFCSTATUS_PENDING == wStatus) { /* Do nothing */ } else if(NFCSTATUS_INVALID_STATE == wStatus) { PH_LOG_LIBNFC_WARN_STR("phLibNfc_RemoteDev_Receive: StateHandler returned NFCSTATUS_INVALID_STATE"); wStatus = NFCSTATUS_DESELECTED; } else { PH_LOG_LIBNFC_CRIT_U32MSG("phLibNfc_RemoteDev_Receive: StateHandler returned status:",wStatus); wStatus = NFCSTATUS_FAILED; } } else { wStatus = NFCSTATUS_INVALID_HANDLE; } } PH_LOG_LIBNFC_FUNC_EXIT(); return wStatus; }
static NFCSTATUS phLibNfc_InitializeComplete(void* pContext, NFCSTATUS status, void* pInfo) { NFCSTATUS wStatus = status; pphLibNfc_LibContext_t pLibContext = (pphLibNfc_LibContext_t)pContext; phLibNfc_Event_t TrigEvent = phLibNfc_EventReqCompleted; pphLibNfc_InitCallback_t pClientCb; void * pUpperLayerContext; UNUSED(pInfo); PH_LOG_LIBNFC_FUNC_ENTRY(); if(NFCSTATUS_SUCCESS == wStatus) { /* Initializing the Flags during init*/ gpphLibNfc_Context->HCE_FirstBuf = 0; pLibContext->bPcdConnected = FALSE; pLibContext->dev_cnt = 0; wStatus = phLibNfc_StateHandler(pContext, TrigEvent, pInfo, NULL, NULL); } if(NFCSTATUS_SUCCESS == wStatus) { pClientCb = pLibContext->CBInfo.pClientInitCb; pUpperLayerContext = pLibContext->CBInfo.pClientInitCntx; pLibContext->CBInfo.pClientInitCb = NULL; pLibContext->CBInfo.pClientInitCntx = NULL; if(NULL != pClientCb) { (*pClientCb)(pUpperLayerContext,pLibContext->eConfigStatus,wStatus); } } else { phLibNfc_ReleaseLibNfcContext(pContext,NFCSTATUS_FAILED); } PH_LOG_LIBNFC_FUNC_EXIT(); return wStatus; }
static void phLibNfc_P2pRemoteDev_SendCb(void* pContext,NFCSTATUS status,void* pInfo) { NFCSTATUS wStatus = status; pphLibNfc_LibContext_t pLibContext = (pphLibNfc_LibContext_t)pContext; phLibNfc_Event_t TrigEvent = phLibNfc_EventReqCompleted; pphLibNfc_RspCb_t pUpperLayerCb = NULL; void *UpperLayerCtx = NULL; UNUSED(pInfo); PH_LOG_LIBNFC_FUNC_ENTRY(); if((NULL != pLibContext) && (gpphLibNfc_Context == pLibContext)) { pUpperLayerCb = pLibContext->CBInfo.pClientNfcIpTxCb; UpperLayerCtx = pLibContext->CBInfo.pClientNfcIpTxCntx; pLibContext->CBInfo.pClientNfcIpTxCb = NULL; pLibContext->CBInfo.pClientNfcIpTxCntx = NULL; (void)phLibNfc_StateHandler(pLibContext, TrigEvent, NULL, NULL, NULL); if(NULL != pUpperLayerCb) { pUpperLayerCb(UpperLayerCtx,wStatus); } } PH_LOG_LIBNFC_FUNC_EXIT(); }
NFCSTATUS phLibNfc_Mgt_SetP2P_ConfigParams(phLibNfc_sNfcIPCfg_t *pConfigInfo, pphLibNfc_RspCb_t pConfigRspCb, void * pContext) { NFCSTATUS wStatus = NFCSTATUS_FAILED; pphLibNfc_LibContext_t pLibContext = gpphLibNfc_Context; pphNciNfc_RfDiscConfigParams_t pRfDiscConfParam = NULL; uint8_t bGeneralBytesLength = 0; phLibNfc_DummyInfo_t Info; phLibNfc_Event_t TrigEvent = phLibNfc_EventDummy; PH_LOG_LIBNFC_FUNC_ENTRY(); Info.Evt = phLibNfc_DummyEventInvalid; if(NULL == pLibContext) { wStatus = NFCSTATUS_NOT_INITIALISED; } else if((NULL == pConfigInfo) ||(NULL == pConfigRspCb)) { wStatus = NFCSTATUS_INVALID_PARAMETER; } else { bGeneralBytesLength = pConfigInfo->generalBytesLength; if((pLibContext->bDtaFlag || (0 != bGeneralBytesLength)) && (PH_LIBNFC_INTERNAL_MAX_ATR_LENGTH >= bGeneralBytesLength)) { /* Allocate memory for the input parameter that needs to be sent to 'phNciNfc_SetConfigRfParameters' API */ pRfDiscConfParam = (pphNciNfc_RfDiscConfigParams_t)phOsalNfc_GetMemory( sizeof(phNciNfc_RfDiscConfigParams_t)); if(NULL != pRfDiscConfParam) { phOsalNfc_SetMemory(pRfDiscConfParam,0,sizeof(phNciNfc_RfDiscConfigParams_t)); pLibContext->CBInfo.pClientNfcIpCfgCb = pConfigRspCb; pLibContext->CBInfo.pClientNfcIpCfgCntx = pContext; /* Set general bytes for Poll Nfc-Dep parameters */ switch(pConfigInfo->p2pMode) { case NFC_DEP_POLL: pRfDiscConfParam->tConfigInfo.PollNfcDepConfig = 1; /* Configuring general bytes for ATR_REQ */ pRfDiscConfParam->tPollNfcDepDiscParams.PollNfcDepConfig.EnableConfig = 0; pRfDiscConfParam->tPollNfcDepDiscParams.PollNfcDepConfig.Config.bSetGenBytes = 1; pRfDiscConfParam->tPollNfcDepDiscParams.bAtrReqGeneBytesSize = bGeneralBytesLength; phOsalNfc_MemCopy(pRfDiscConfParam->tPollNfcDepDiscParams.aAtrReqGenBytes, pConfigInfo->generalBytes,bGeneralBytesLength); /*Enable General Bytes to default values*/ /*Configure to default value = 0x30*/ pRfDiscConfParam->tPollNfcDepDiscParams.PollNfcDepConfig.Config.bSetAtrConfig = 1; pRfDiscConfParam->tPollNfcDepDiscParams.AtrReqConfig.bDid = 0; /*0 For LLCP*/ pRfDiscConfParam->tPollNfcDepDiscParams.AtrReqConfig.bLr = 0x03;/*0x03 for LLCP*/ break; case NFC_DEP_LISTEN: /* Set general bytes for Listen Nfc-Dep parameters */ pRfDiscConfParam->tConfigInfo.LstnNfcDepConfig = 1; /* Configuring general bytes for ATR_RES */ pRfDiscConfParam->tLstnNfcDepDiscParams.LstnNfcDepConfig.EnableConfig = 0; pRfDiscConfParam->tLstnNfcDepDiscParams.LstnNfcDepConfig.Config.bSetGenBytes = 1; pRfDiscConfParam->tLstnNfcDepDiscParams.bAtrResGenBytesSize = bGeneralBytesLength; phOsalNfc_MemCopy(pRfDiscConfParam->tLstnNfcDepDiscParams.aAtrResGenBytes, pConfigInfo->generalBytes,bGeneralBytesLength); /*Enable General Bytes in response*/ /*Configure to defaule value*/ pRfDiscConfParam->tLstnNfcDepDiscParams.LstnNfcDepConfig.Config.bSetAtrRespConfig = 1; pRfDiscConfParam->tLstnNfcDepDiscParams.AtrRespConfig.bLengthReduction = 0x03; /*For LLCP*/ break; case NFC_DEP_DEFAULT: default: pRfDiscConfParam->tConfigInfo.PollNfcDepConfig = 1; /* Configuring general bytes for ATR_REQ */ pRfDiscConfParam->tPollNfcDepDiscParams.PollNfcDepConfig.EnableConfig = 0; pRfDiscConfParam->tPollNfcDepDiscParams.PollNfcDepConfig.Config.bSetGenBytes = 1; pRfDiscConfParam->tPollNfcDepDiscParams.bAtrReqGeneBytesSize = bGeneralBytesLength; phOsalNfc_MemCopy(pRfDiscConfParam->tPollNfcDepDiscParams.aAtrReqGenBytes, pConfigInfo->generalBytes,bGeneralBytesLength); /*Enable General Bytes to default values*/ /*Configure to default value = 0x30*/ pRfDiscConfParam->tPollNfcDepDiscParams.PollNfcDepConfig.Config.bSetAtrConfig = 1; pRfDiscConfParam->tPollNfcDepDiscParams.AtrReqConfig.bDid = 0; /*0 For LLCP*/ pRfDiscConfParam->tPollNfcDepDiscParams.AtrReqConfig.bLr = 0x03;/*0x03 for LLCP*/ pRfDiscConfParam->tConfigInfo.LstnNfcDepConfig = 1; /* Configuring general bytes for ATR_RES */ pRfDiscConfParam->tLstnNfcDepDiscParams.LstnNfcDepConfig.EnableConfig = 0; pRfDiscConfParam->tLstnNfcDepDiscParams.LstnNfcDepConfig.Config.bSetGenBytes = 1; pRfDiscConfParam->tLstnNfcDepDiscParams.bAtrResGenBytesSize = bGeneralBytesLength; phOsalNfc_MemCopy(pRfDiscConfParam->tLstnNfcDepDiscParams.aAtrResGenBytes, pConfigInfo->generalBytes,bGeneralBytesLength); /*Enable General Bytes in response*/ /*Configure to defaule value*/ pRfDiscConfParam->tLstnNfcDepDiscParams.LstnNfcDepConfig.Config.bSetAtrRespConfig = 1; pRfDiscConfParam->tLstnNfcDepDiscParams.AtrRespConfig.bLengthReduction = 0x03; /*For LLCP*/ break; } Info.Evt = phLibNfc_DummyEventSetP2PConfigs; Info.Params = (void *)pRfDiscConfParam; wStatus = phLibNfc_StateHandler(pLibContext, TrigEvent, NULL, &Info, NULL); if(NFCSTATUS_PENDING != wStatus) { phOsalNfc_FreeMemory(pRfDiscConfParam); pLibContext->CBInfo.pClientNfcIpCfgCb = NULL; pLibContext->CBInfo.pClientNfcIpCfgCntx = NULL; } } else { wStatus = NFCSTATUS_INSUFFICIENT_RESOURCES; } } else { wStatus = NFCSTATUS_INVALID_PARAMETER; } } PH_LOG_LIBNFC_FUNC_EXIT(); return wStatus; }
NFCSTATUS phLibNfc_RemoteDev_Send(phLibNfc_Handle hRemoteDevice, phNfc_sData_t* pTransferData, pphLibNfc_RspCb_t pSendRspCb, void* pContext) { NFCSTATUS wStatus = NFCSTATUS_FAILED; pphLibNfc_LibContext_t pLibContext = gpphLibNfc_Context; phLibNfc_Event_t TrigEvent = phLibNfc_EventSend; pphNciNfc_RemoteDevInformation_t pNciRemDevHandle = NULL; phLibNfc_sRemoteDevInformation_t *pLibRemDevHandle = (phLibNfc_sRemoteDevInformation_t *)hRemoteDevice; PH_LOG_LIBNFC_FUNC_ENTRY(); wStatus = phLibNfc_IsInitialised(pLibContext); if(NFCSTATUS_SUCCESS != wStatus) { wStatus=NFCSTATUS_NOT_INITIALISED; } /* Check for valid state,If De initialize is called then return NFCSTATUS_SHUTDOWN */ else if(gpphLibNfc_Context->StateContext.TrgtState == phLibNfc_StateReset) { wStatus = NFCSTATUS_SHUTDOWN; } else if((NULL == pSendRspCb) || (NULL == pTransferData) || (NULL == pLibRemDevHandle)) { wStatus = NFCSTATUS_INVALID_PARAMETER; } else { if((NULL != pTransferData->buffer) || (0 == pTransferData->length)) { wStatus = phLibNfc_MapRemoteDevHandle(&pLibRemDevHandle,&pNciRemDevHandle,PH_LIBNFC_INTERNAL_LIBTONCI_MAP); if((NFCSTATUS_SUCCESS == wStatus) && (NULL != pNciRemDevHandle)) { pLibContext->CBInfo.pClientNfcIpTxCb = pSendRspCb; pLibContext->CBInfo.pClientNfcIpTxCntx = pContext; wStatus = phLibNfc_StateHandler(pLibContext,TrigEvent, (void *)pTransferData,NULL,NULL); if(NFCSTATUS_PENDING == wStatus) { /* Do nothing */ } else if(NFCSTATUS_INVALID_STATE == wStatus) { wStatus = NFCSTATUS_DESELECTED; pLibContext->CBInfo.pClientNfcIpTxCb = NULL; pLibContext->CBInfo.pClientNfcIpTxCntx = NULL; } else { wStatus = NFCSTATUS_FAILED; pLibContext->CBInfo.pClientNfcIpTxCb = NULL; pLibContext->CBInfo.pClientNfcIpTxCntx = NULL; } } else { wStatus = NFCSTATUS_INVALID_HANDLE; } } else { wStatus = NFCSTATUS_INVALID_PARAMETER; } } PH_LOG_LIBNFC_FUNC_EXIT(); return wStatus; }