static NFCSTATUS phFriNfc_MfUL_H_Transceive(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt) { NFCSTATUS Result = NFCSTATUS_SUCCESS; PH_LOG_NDEF_FUNC_ENTRY(); /* set the data for additional data exchange*/ NdefSmtCrdFmt->psDepAdditionalInfo.DepFlags.MetaChaining = 0; NdefSmtCrdFmt->psDepAdditionalInfo.DepFlags.NADPresent = 0; NdefSmtCrdFmt->psDepAdditionalInfo.NodeAddress = 0; /*set the completion routines for the card operations*/ NdefSmtCrdFmt->SmtCrdFmtCompletionInfo.CompletionRoutine = phFriNfc_NdefSmtCrd_Process; NdefSmtCrdFmt->SmtCrdFmtCompletionInfo.Context = NdefSmtCrdFmt; *NdefSmtCrdFmt->SendRecvLength = PH_FRINFC_SMTCRDFMT_MAX_SEND_RECV_BUF_SIZE; /* Call the Overlapped HAL Transceive function */ Result = phFriNfc_OvrHal_Transceive( NdefSmtCrdFmt->LowerDevice, &NdefSmtCrdFmt->SmtCrdFmtCompletionInfo, NdefSmtCrdFmt->psRemoteDevInfo, NdefSmtCrdFmt->Cmd, &NdefSmtCrdFmt->psDepAdditionalInfo, NdefSmtCrdFmt->SendRecvBuf, NdefSmtCrdFmt->SendLength, NdefSmtCrdFmt->SendRecvBuf, NdefSmtCrdFmt->SendRecvLength); PH_LOG_NDEF_FUNC_EXIT(); return Result; }
static NFCSTATUS phFriNfc_TopazFormat_Transceive(phFriNfc_sNdefSmtCrdFmt_t* NdefSmtCrdFmt, const uint8_t* SendBuffer, uint16_t SendBufferLength) { NFCSTATUS wStatus = NFCSTATUS_SUCCESS; PH_LOG_NDEF_FUNC_ENTRY(); assert(NdefSmtCrdFmt != NULL); assert(SendBuffer != NULL); assert(SendBufferLength != 0 && SendBufferLength <= PH_FRINFC_SMTCRDFMT_MAX_SEND_RECV_BUF_SIZE); /* Fill the send buffer */ NdefSmtCrdFmt->Cmd.JewelCmd = phNfc_eJewel_Raw; phOsalNfc_MemCopy(NdefSmtCrdFmt->SendRecvBuf, SendBuffer, SendBufferLength); NdefSmtCrdFmt->SendLength = SendBufferLength; /* Set the data for additional data exchange */ NdefSmtCrdFmt->psDepAdditionalInfo.DepFlags.MetaChaining = 0; NdefSmtCrdFmt->psDepAdditionalInfo.DepFlags.NADPresent = 0; NdefSmtCrdFmt->psDepAdditionalInfo.NodeAddress = 0; /* Set the completion routines for the card operations */ NdefSmtCrdFmt->SmtCrdFmtCompletionInfo.CompletionRoutine = phFriNfc_NdefSmtCrd_Process; NdefSmtCrdFmt->SmtCrdFmtCompletionInfo.Context = NdefSmtCrdFmt; *NdefSmtCrdFmt->SendRecvLength = PH_FRINFC_SMTCRDFMT_MAX_SEND_RECV_BUF_SIZE; wStatus = phFriNfc_OvrHal_Transceive(NdefSmtCrdFmt->LowerDevice, &NdefSmtCrdFmt->SmtCrdFmtCompletionInfo, NdefSmtCrdFmt->psRemoteDevInfo, NdefSmtCrdFmt->Cmd, &NdefSmtCrdFmt->psDepAdditionalInfo, NdefSmtCrdFmt->SendRecvBuf, NdefSmtCrdFmt->SendLength, NdefSmtCrdFmt->SendRecvBuf, NdefSmtCrdFmt->SendRecvLength); PH_LOG_NDEF_FUNC_EXIT(); return wStatus; }
static NFCSTATUS phFriNfc_LlcpMac_Nfcip_Receive(phFriNfc_LlcpMac_t *LlcpMac, phNfc_sData_t *psData, phFriNfc_LlcpMac_Reveive_CB_t LlcpMacReceive_Cb, void *pContext) { NFCSTATUS status = NFCSTATUS_SUCCESS; if(NULL == LlcpMac || NULL==psData || NULL == LlcpMacReceive_Cb || NULL == pContext) { status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_INVALID_PARAMETER); } else if(LlcpMac->MacReceive_Cb != NULL) { /*Previous callback is pending */ status = NFCSTATUS_REJECTED; } else { /* Save the LlcpMacReceive_Cb */ LlcpMac->MacReceive_Cb = LlcpMacReceive_Cb; LlcpMac->MacReceive_Context = pContext; /* Save the pointer to the receive buffer */ LlcpMac->psReceiveBuffer= psData; switch(LlcpMac->PeerRemoteDevType) { case phFriNfc_LlcpMac_ePeerTypeInitiator: { if(LlcpMac->SendPending) { /*set the completion routines for the LLCP Transceive function*/ LlcpMac->MacCompletionInfo.CompletionRoutine = phFriNfc_LlcpMac_Nfcip_Transceive_Cb; LlcpMac->MacCompletionInfo.Context = LlcpMac; /* set the command type*/ LlcpMac->Cmd.NfcIP1Cmd = phHal_eNfcIP1_Raw; /* set the Additional Info*/ LlcpMac->psDepAdditionalInfo.DepFlags.MetaChaining = 0; LlcpMac->psDepAdditionalInfo.DepFlags.NADPresent = 0; LlcpMac->RecvPending = TRUE; status = phFriNfc_OvrHal_Transceive(LlcpMac->LowerDevice, &LlcpMac->MacCompletionInfo, LlcpMac->psRemoteDevInfo, LlcpMac->Cmd, &LlcpMac->psDepAdditionalInfo, LlcpMac->psSendBuffer->buffer, (uint16_t)LlcpMac->psSendBuffer->length, psData->buffer, (uint16_t*)&psData->length); } else { LlcpMac->RecvPending = TRUE; return status = NFCSTATUS_PENDING; } }break; case phFriNfc_LlcpMac_ePeerTypeTarget: { /*set the completion routines for the LLCP Receive function*/ LlcpMac->MacCompletionInfo.CompletionRoutine = phFriNfc_LlcpMac_Nfcip_Receive_Cb; /* save the context of LlcpMacNfcip */ LlcpMac->MacCompletionInfo.Context = LlcpMac; LlcpMac->RecvPending = TRUE; status = phFriNfc_OvrHal_Receive(LlcpMac->LowerDevice, &LlcpMac->MacCompletionInfo, LlcpMac->psRemoteDevInfo, LlcpMac->psReceiveBuffer->buffer, (uint16_t*)&LlcpMac->psReceiveBuffer->length); }break; default: { status = PHNFCSTVAL(CID_FRI_NFC_LLCP_MAC, NFCSTATUS_INVALID_DEVICE); }break; } } return status; }
static NFCSTATUS phFriNfc_ISO15693_H_FmtReadWrite ( phFriNfc_sNdefSmtCrdFmt_t *psNdefSmtCrdFmt, uint8_t command, uint8_t *p_data, uint8_t data_length) { NFCSTATUS result = NFCSTATUS_SUCCESS; uint8_t send_index = 0; /* set the data for additional data exchange*/ psNdefSmtCrdFmt->psDepAdditionalInfo.DepFlags.MetaChaining = 0; psNdefSmtCrdFmt->psDepAdditionalInfo.DepFlags.NADPresent = 0; psNdefSmtCrdFmt->psDepAdditionalInfo.NAD = 0; psNdefSmtCrdFmt->SmtCrdFmtCompletionInfo.CompletionRoutine = phFriNfc_ISO15693_FmtProcess; psNdefSmtCrdFmt->SmtCrdFmtCompletionInfo.Context = psNdefSmtCrdFmt; *psNdefSmtCrdFmt->SendRecvLength = PH_FRINFC_SMTCRDFMT_MAX_SEND_RECV_BUF_SIZE; psNdefSmtCrdFmt->Cmd.Iso15693Cmd = phHal_eIso15693_Cmd; *(psNdefSmtCrdFmt->SendRecvBuf + send_index) = (uint8_t)ISO15693_FMT_FLAGS; send_index = (uint8_t)(send_index + 1); *(psNdefSmtCrdFmt->SendRecvBuf + send_index) = (uint8_t)command; send_index = (uint8_t)(send_index + 1); (void)memcpy ((void *)(psNdefSmtCrdFmt->SendRecvBuf + send_index), (void *)psNdefSmtCrdFmt->psRemoteDevInfo->RemoteDevInfo.Iso15693_Info.Uid, psNdefSmtCrdFmt->psRemoteDevInfo->RemoteDevInfo.Iso15693_Info.UidLength); send_index = (uint8_t)(send_index + psNdefSmtCrdFmt->psRemoteDevInfo->RemoteDevInfo.Iso15693_Info.UidLength); switch (command) { case ISO15693_WR_SINGLE_BLK_CMD: case ISO15693_RD_MULTIPLE_BLKS_CMD: { *(psNdefSmtCrdFmt->SendRecvBuf + send_index) = (uint8_t) psNdefSmtCrdFmt->AddInfo.s_iso15693_info.current_block; send_index = (uint8_t)(send_index + 1); if (data_length) { (void)memcpy ((void *)(psNdefSmtCrdFmt->SendRecvBuf + send_index), (void *)p_data, data_length); send_index = (uint8_t)(send_index + data_length); } else { result = PHNFCSTVAL (CID_FRI_NFC_NDEF_SMTCRDFMT, NFCSTATUS_INVALID_DEVICE_REQUEST); } break; } case ISO15693_RD_SINGLE_BLK_CMD: { *(psNdefSmtCrdFmt->SendRecvBuf + send_index) = (uint8_t) psNdefSmtCrdFmt->AddInfo.s_iso15693_info.current_block; send_index = (uint8_t)(send_index + 1); break; } case ISO15693_GET_SYSTEM_INFO_CMD: { /* Dont do anything */ break; } default: { result = PHNFCSTVAL (CID_FRI_NFC_NDEF_SMTCRDFMT, NFCSTATUS_INVALID_DEVICE_REQUEST); break; } } psNdefSmtCrdFmt->SendLength = send_index; if (!result) { result = phFriNfc_OvrHal_Transceive(psNdefSmtCrdFmt->LowerDevice, &psNdefSmtCrdFmt->SmtCrdFmtCompletionInfo, psNdefSmtCrdFmt->psRemoteDevInfo, psNdefSmtCrdFmt->Cmd, &psNdefSmtCrdFmt->psDepAdditionalInfo, psNdefSmtCrdFmt->SendRecvBuf, psNdefSmtCrdFmt->SendLength, psNdefSmtCrdFmt->SendRecvBuf, psNdefSmtCrdFmt->SendRecvLength); } return result; }