Files
NxpNfcRdLib/Examples/Nfcrdlib_SimplifiedAPI_ISO/intfs/Nfcrdlib_SimplifiedApi_ISO_18000.h
2024-07-08 21:03:06 +08:00

133 lines
7.6 KiB
C

/*
* Copyright 2017-2020, NXP
*
* All rights are reserved. Reproduction in whole or in part is
* prohibited without the written consent of the copyright owner.
* NXP reserves the right to make changes without notice at any time.
* NXP makes no warranty, expressed, implied or statutory, including but
* not limited to any implied warranty of merchantability or fitness for any
*particular purpose, or that the use will not infringe any third party patent,
* copyright or trademark. NXP must not be liable for any loss or damage
* arising from its use.
*/
/** \file
* Simplified API ISO 18000.
*
* $Author$
* $Revision$ (v07.10.00)
* $Date$
*
*/
#ifndef EX11_SIMPLIFIEDAPI_ISO_18000_H
#define EX11_SIMPLIFIEDAPI_ISO_18000_H
/* ACK does not take any parameter and uses the handle present in context */
#define I18000_ACK() { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_Ack; \
}
/* REQRN takes the option with which to perform the REQRn Command */
/* bOpt can be only PHAL_I18000P3M3_REQRN_USE_HANDLE here */
#define I18000_REQRN(bOpt) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bOption = bOpt; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_ReqRn; \
}
/* READ takes the Memory Bank to read, address of the word to read, length of the word ptr and No of words to read */
/* bMembank can be 0x00 - 0x03 , pWordptr is user choice limited to tag memory size */
/* bWordPtrLength can be 0x00 - 0x03 and depends on the TAG memory size , bWordcount is the number of words to read */
#define I18000_READ(bMembank, pWordptr, bWordPtrlength, bWordcount) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bMemBank = bMembank; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pWordPtr = pWordptr; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bWordPtrLength = bWordPtrlength; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bWordCount = bWordcount; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_Read; \
}
/* WRITE takes the option, Memory Bank to write, address of the word to write, length of the word ptr and Data to write */
/* bOpt can be #PH_NFCLIB_18000P3M3_AC_NO_COVER_CODING or #PH_NFCLIB_18000P3M3_AC_USE_COVER_CODING, bMembank can be 0x00 - 0x03 */
/* pWordptr is user choice limited to tag memory size, bWordPtrLength can be 0x00 - 0x03 and depends on the TAG memory size */
/* pData is a 2 byte word to write */
#define I18000_WRITE(bOpt, bMembank, pWordptr, bWordPtrlength, pData) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bOption = bOpt; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bMemBank = bMembank; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pWordPtr = pWordptr; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bWordPtrLength = bWordPtrlength; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pBuffer = pData; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_Write; \
}
/* KILL takes the option , the password for the kill and recommissioning option */
/* bOpt can be #PH_NFCLIB_18000P3M3_AC_NO_COVER_CODING or #PH_NFCLIB_18000P3M3_AC_USE_COVER_CODING, pPassWord is a 4 byte password */
/* bReCom can be any optional or mandatory support Recom option, value 0x04 is a mandatory support */
#define I18000_KILL(bOpt, pPassWord, bReCom) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bOption = bOpt; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pPassword = pPassWord; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bRecom = bReCom; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_Kill; \
}
/* LOCK takes the Mask on which and the action with which to perform the Lock */
/* pLockMask and pLockAction both are a 10-bit field please refer ISO 18000-3M3 for detailed value */
#define I18000_LOCK(pLockMask, pLockAction) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pMask = pLockMask; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pAction = pLockAction; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_Lock; \
}
/* ACCESS takes the option and password for the Access */
/* bOpt can be #PH_NFCLIB_18000P3M3_AC_NO_COVER_CODING or #PH_NFCLIB_18000P3M3_AC_USE_COVER_CODING, pPassWord is a 4 byte password */
#define I18000_ACCESS(bOpt, pPassWord) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bOption = bOpt; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pPassword = pPassWord; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_Access; \
}
/* BLOCKWRITE takes the Memory Bank to write ,address of the word,length of the word ptr, No of words and Data to write */
/* bMembank can be 0x00 - 0x03, pWordptr is user choice limited to tag memory size, bWordPtrLen can be 0x00 - 0x03 and depends on the TAG memory size */
/* bWordcount is the no of words to write and is card support specific, pData takes the data to write */
#define I18000_BLOCKWRITE(bMembank, pWordptr, bWordPtrLen, bWordcount, pData) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bMemBank = bMembank; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pWordPtr = pWordptr; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bWordPtrLength = bWordPtrLen; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bWordCount = bWordcount; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pBuffer = pData; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_BlockWrite; \
}
/* BLOCKERASE takes the Memory Bank to write ,address of the word,length of the word ptr and No of words to erase */
/* bMembank can be 0x00 - 0x03, pWordptr is user choice limited to tag memory size */
/* bWordPtrLen can be 0x00 - 0x03 and depends on the TAG memory size and No of words to erase is card support specific*/
#define I18000_BLOCKERASE(bMembank, pWordptr, bWordPtrLen, bWordcount) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bMemBank = bMembank; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pWordPtr = pWordptr; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bWordPtrLength = bWordPtrLen; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bWordCount = bWordcount; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_BlockErase; \
}
/* BLOCKPERMALOCK takes the RFU, READ/LOCK choice, Memory Bank to PermaLock, starting address of the block and length of the block ptr, range of the block mask, and MemMask */
/* bRFU is to be kept 0, bReadlock can be 0/1, bMembank can be 0x00 - 0x03, pBlockptr is user choice limited to tag memory size */
/* bBlockPtrLen can be 0x00 - 0x03, bBlockrange depends on Tag Memory and pMemMask along with ReadLock depend upon 0/1 */
#define I18000_BLOCKPERMALOCK(bRfu, bReadlock, bMembank, pBlockptr, bBlockPtrLen, bBlockrange, pMemMask) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bRFU = bRfu; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bReadLock = bReadlock; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bMemBank = bMembank; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pBlockPtr = pBlockptr; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bBlockPtrLength = bBlockPtrLen; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bBlockRange = bBlockrange; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pMask = pMemMask; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_BlockPermaLock; \
}
/* SETHANDLE takes the pointer to the handle */
/* pHandlePtr is a 2 byte Handle return by the REQRN command */
#define I18000_SETHANDLE(pHandlePtr) { \
phNfcLib_TransmitInput.phNfcLib_ISO18000.pHandle = pHandlePtr; \
phNfcLib_TransmitInput.phNfcLib_ISO18000.bCommand = ISO18000_SetHandle; \
}
#endif /* EX11_SIMPLIFIEDAPI_ISO_18000_H */