NXP_PN512_NFCReaderLibrary/intfs/phalSli.h

492 lines
19 KiB
C

/*
* Copyright (c), NXP Semiconductors Gratkorn / Austria
*
* (C)NXP Semiconductors
* 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
* Generic ICode SLI Application Component of Reader Library Framework.
* $Author: Purnank G (ing05193) $
* $Revision: 5076 $ (v4.040.05.011646)
* $Date: 2016-06-13 17:29:09 +0530 (Mon, 13 Jun 2016) $
*
* History:
* CHu: Generated 10. November 2009
*
*/
#ifndef PHALSLI_H
#define PHALSLI_H
#include <ph_Status.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef NXPBUILD__PHAL_SLI_SW
/** \defgroup phalSli_Sw Component : Software
* @{
*/
#define PHAL_SLI_SW_ID 0x01 /**< ID for Software ICode SLI layer. */
/**
* \brief Private parameter structure
*/
typedef struct
{
uint16_t wId; /**< Layer ID for this component, NEVER MODIFY! */
void * pPalSli15693DataParams; /**< Pointer to palSli15693 parameter structure. */
} phalSli_Sw_DataParams_t;
/**
* \brief Initialise this layer.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
*/
phStatus_t phalSli_Sw_Init(
phalSli_Sw_DataParams_t * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wSizeOfDataParams, /**< [In] Specifies the size of the data parameter structure. */
void * pPalSli15693DataParams /**< [In] Pointer to palSli15693 parameter structure. */
);
/** @} */
#endif /* NXPBUILD__PHAL_SLI_SW */
#ifdef NXPBUILD__PHAL_SLI
/** \defgroup phalSli ICode SLI
* \brief These Components implement the ICode SLI commands.
* @{
*/
/**
* \name Options
*/
/*@{*/
#define PHAL_SLI_OPTION_OFF PH_OFF /**< Option Bit is cleared. */
#define PHAL_SLI_OPTION_ON PH_ON /**< Option Bit is set. */
#define PHAL_SLI_OPTION_DEFAULT PHAL_SLI_OPTION_OFF /**< Default Option. */
/*@}*/
/**
* \name Block definitions
*/
/*@{*/
#define PHAL_SLI_BLOCK_SIZE 4U /**< Length of an ICode SLI data block. */
/*@}*/
/**
* \name Password identifiers
*/
/*@{*/
#define PHAL_SLI_PWD_READ 0x01U /**< Read Password. */
#define PHAL_SLI_PWD_WRITE 0x02U /**< Write Password. */
#define PHAL_SLI_PWD_PRIVACY 0x04U /**< Privacy Password. */
#define PHAL_SLI_PWD_DESTROY 0x08U /**< Destroy Password. */
#define PHAL_SLI_PWD_EAS 0x10U /**< EAS Password. */
/*@}*/
/**
* \name Protection status
*/
/*@{*/
#define PHAL_SLI_PROTECTION_PUBLIC 0x00U /**< No protection. */
#define PHAL_SLI_PROTECTION_READ_PWD_ONLY 0x01U /**< Read and Write protected by the Read password. */
#define PHAL_SLI_PROTECTION_WRITE_PWD_ONLY 0x10U /**< Write protected by the Write password. */
#define PHAL_SLI_PROTECTION_READ_AND_WRITE_PWD 0x11U /**< Read protected by the Read password, Write protected by the Write password. */
/*@}*/
/**
* \name Block Protection bits
*/
/*@{*/
#define PHAL_SLI_PROTECTION_BIT_BLOCK_LOCK 0x01U /**< Block is locked. */
#define PHAL_SLI_PROTECTION_BIT_READ 0x02U /**< Block is read protected. */
#define PHAL_SLI_PROTECTION_BIT_WRITE 0x04U /**< Block is write protected. */
#define PHAL_SLI_PROTECTION_BIT_PROT_LOCK 0x08U /**< Page protection is locked. */
/*@}*/
#ifdef NXPRDLIB_REM_GEN_INTFS
#include "../comps/phalSli/src/Sw/phalSli_Sw.h"
#define phalSli_GetRandomNumber(pDataParams, pRnd) \
phalSli_Sw_GetRandomNumber((phalSli_Sw_DataParams_t *)pDataParams, pRnd)
#define phalSli_SetPWD(pDataParams, bPwdIdentifier, pXorPwd) \
phalSli_Sw_SetPWD((phalSli_Sw_DataParams_t *)pDataParams, bPwdIdentifier, pXorPwd)
#define phalSli_WritePWD(pDataParams, bPwdIdentifier, pPwd) \
phalSli_Sw_WritePWD((phalSli_Sw_DataParams_t *)pDataParams, bPwdIdentifier, pPwd)
#define phalSli_LockPWD(pDataParams, bPwdIdentifier) \
phalSli_Sw_LockPWD((phalSli_Sw_DataParams_t *)pDataParams, bPwdIdentifier)
#define phalSli_64BitPWDProtection(pDataParams) \
phalSli_Sw_64BitPWDProtection((phalSli_Sw_DataParams_t *)pDataParams)
#define phalSli_ProtectPage(pDataParams, bPageNo, bProtectionStatus) \
phalSli_Sw_ProtectPage((phalSli_Sw_DataParams_t *)pDataParams, bPageNo, bProtectionStatus)
#define phalSli_LockPageProtectionCondition(pDataParams, bPageNo) \
phalSli_Sw_LockPageProtectionCondition((phalSli_Sw_DataParams_t *)pDataParams, bPageNo)
#define phalSli_GetMultipleBlockProtStatus(pDataParams, bBlockNo, wNumBlocks, pProtectionStates, pNumReceivedStates) \
phalSli_Sw_GetMultipleBlockProtStatus((phalSli_Sw_DataParams_t *)pDataParams, bBlockNo, wNumBlocks, pProtectionStates, pNumReceivedStates)
#define phalSli_Destroy(pDataParams) \
phalSli_Sw_Destroy((phalSli_Sw_DataParams_t *)pDataParams)
#define phalSli_EnablePrivacy(pDataParams) \
phalSli_Sw_EnablePrivacy((phalSli_Sw_DataParams_t *)pDataParams)
#define phalSli_ReadSignature(pDataParams, pSignature) \
phalSli_Sw_ReadSignature((phalSli_Sw_DataParams_t *)pDataParams, pSignature)
#define phalSli_SetEAS(pDataParams) \
phalSli_Sw_SetEAS((phalSli_Sw_DataParams_t *)pDataParams)
#define phalSli_ResetEAS(pDataParams) \
phalSli_Sw_ResetEAS((phalSli_Sw_DataParams_t *)pDataParams)
#define phalSli_LockEAS(pDataParams) \
phalSli_Sw_LockEAS((phalSli_Sw_DataParams_t *)pDataParams)
#define phalSli_EASAlarm(pDataParams, bOption, pEasIdValue, bEasIdMaskLength, pEas) \
phalSli_Sw_EASAlarm((phalSli_Sw_DataParams_t *)pDataParams, bOption, pEasIdValue, bEasIdMaskLength, pEas)
#define phalSli_PwdProtectEAS(pDataParams) \
phalSli_Sw_PwdProtectEAS((phalSli_Sw_DataParams_t *)pDataParams)
#define phalSli_WriteEAS_ID(pDataParams, pEasIdValue) \
phalSli_Sw_WriteEAS_ID((phalSli_Sw_DataParams_t *)pDataParams, pEasIdValue)
#define phalSli_ReadEPC(pDataParams, pEpc) \
phalSli_Sw_ReadEPC((phalSli_Sw_DataParams_t *)pDataParams, pEpc)
#define phalSli_GetNxpSystemInfo(pDataParams, pProtectionPointer, pProtectionCondition, pLockBits, pFeatureFlags) \
phalSli_Sw_GetNxpSystemInfo((phalSli_Sw_DataParams_t *)pDataParams, pProtectionPointer, pProtectionCondition, pLockBits, pFeatureFlags)
#define phalSli_GetRandomNumberSetPWD(pDataParams, bPwdIdentifier, pPwd) \
phalSli_Sw_GetRandomNumberSetPWD((phalSli_Sw_DataParams_t *)pDataParams, bPwdIdentifier, pPwd)
#else
/**
* \brief This command generates a random number from the label IC.
*
* The received random number shall be used to diversify the
* password for the \ref phalSli_SetPWD command.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_GetRandomNumber(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t * pRnd /**< [Out] Random number; 16 bits. */
);
/**
* \brief This command transmits different passwords to the label to get access to protected functionalities.
*
* This command has to be executed just once for the related passwords if the label is powered.
* The different passwords are addressed with the Password Identifier.
\verbatim
[XOR password calculation example]
pXorPwd[0] = pPassword[0] ^ pRnd[0];
pXorPwd[1] = pPassword[1] ^ pRnd[1];
pXorPwd[2] = pPassword[2] ^ pRnd[0];
pXorPwd[3] = pPassword[3] ^ pRnd[1];
\endverbatim
*
* \b Remark: This command can only be executed in addressed or selected mode except of Privay Password.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_SetPWD(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bPwdIdentifier, /**< [In] Password Identifier; Refer to the PHAL_SLI_PWD_* definitions. */
uint8_t * pXorPwd /**< [In] XOR Password; 32 bits. */
);
/**
* \brief With this command, a new password is written into the related memory.
*
* Note that the old password has to be transmitted before with \ref phalSli_SetPWD.
* The new password takes effect immediately which means that the new password has to be
* transmitted with \ref phalSli_SetPWD to get access to protected blocks/pages.
* \b Remark: This command can only be executed in addressed or selected mode.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_WritePWD(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bPwdIdentifier, /**< [In] Password Identifier; Refer to the PHAL_SLI_PWD_* definitions. */
uint8_t * pPwd /**< [In] Plain Password; 32 bits. */
);
/**
* \brief This command locks the addressed password.
*
* Note that the addressed password has to be transmitted before with \ref phalSli_SetPWD.
* A locked password can not be changed any longer.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_LockPWD(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bPwdIdentifier /**< [In] Password Identifier; Refer to the PHAL_SLI_PWD_* definitions. */
);
/**
* \brief This instructs the label that both of the Read and Write passwords are required for protected access.
*
* Note that both the Read and Write passwords have to be
* transmitted before with \ref phalSli_SetPWD.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_64BitPWDProtection(
void * pDataParams /**< [In] Pointer to this layer's parameter structure. */
);
/**
* \brief This command changes the protection status of a page.
*
* Note that the related passwords have to be transmitted before
* with \ref phalSli_SetPWD if the page is not public.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_ProtectPage(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bPageNo, /**< [In] Page number. */
uint8_t bProtectionStatus /**< [In] New protection status; Refer to the PHAL_SLI_PROTECTION_* definitions. */
);
/**
* \brief This command permanenty locks the protection status of a page.
*
* Note that the related passwords have to be transmitted before
* with \ref phalSli_SetPWD if the page is not public.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_LockPageProtectionCondition(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bPageNo /**< [In] Page number. */
);
/**
* \brief This instructs the label to return the block protection status of the requested blocks.
*
* \b Remark: If \c bBlockNo + \c bNumBlocks exceeds the total available number of
* user blocks, the number of received status bytes is less than the requested number.
* This means that the last returned status byte corresponds to the highest available user block.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_GetMultipleBlockProtStatus(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bBlockNo, /**< [In] First Block number. */
uint16_t wNumBlocks, /**< [In] Number of blocks. */
uint8_t * pProtectionStates, /**< [Out] Protection states of requested blocks. Refer to the PHAL_SLI_PROTECTION_BIT_* definitions. */
uint8_t * pNumReceivedStates /**< [Out] Number of received block protection states. */
);
/**
* \brief This command permanently destroys the label.
*
* The Destroy password has to be transmitted before with \ref phalSli_SetPWD.
* \b Remark: This command is irreversible and the label will never respond to any command again.
* \b Remark: This command can only be executed in addressed or selected mode.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_Destroy(
void * pDataParams /**< [In] Pointer to this layer's parameter structure. */
);
/**
* \brief This command instructs the label to enter privacy mode.
*
* In privacy mode, the label will only respond to \ref phalSli_GetRandomNumber and \ref phalSli_SetPWD commands.
* To get out of the privacy mode, the Privacy password has to be transmitted before with \ref phalSli_SetPWD.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_EnablePrivacy(
void * pDataParams /**< [In] Pointer to this layer's parameter structure. */
);
/**
* \brief The command returns an IC specific, 32-byte ECC signature, to verify
* NXP Semiconductors as the silicon vendor..
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalSli_ReadSignature(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t * pSignature /**< [Out] Signature; 256 bits. */
);
/**
* \brief This command enables the EAS mode if the EAS mode is not locked.
*
* If the EAS mode is password protected the EAS password has to be
* transmitted before with \ref phalSli_SetPWD.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_SetEAS(
void * pDataParams /**< [In] Pointer to this layer's parameter structure. */
);
/**
* \brief This command disables the EAS mode if the EAS mode is not locked.
*
* If the EAS mode is password protected the EAS password has to be
* transmitted before with \ref phalSli_SetPWD.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_ResetEAS(
void * pDataParams /**< [In] Pointer to this layer's parameter structure. */
);
/**
* \brief This command locks the current state of the EAS mode and the EAS ID.
*
* If the EAS mode is password protected the EAS password has to be
* transmitted before with \ref phalSli_SetPWD.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_LockEAS(
void * pDataParams /**< [In] Pointer to this layer's parameter structure. */
);
/**
* \brief This command returns the EAS sequence if the EAS mode is enabled.
*
* \li \c bOption disabled: \c bEasIdMaskLength and \c pEasIdValue are not transmitted, EAS Sequence is returned;
* \li \c bOption enabled and \c bEasIdMaskLength = \c 0: EAS ID is returned;
* \li \c bOption enabled and \c bEasIdMaskLength > \c 0: EAS Sequence is returned by ICs with matching \c pEasIdValue;
*
* If the EAS mode is disabled, the label remains silent.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_EASAlarm(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bOption, /**< [In] Option flag; \c #PHAL_SLI_OPTION_OFF: disable; \c #PHAL_SLI_OPTION_ON: enable. */
uint8_t * pEasIdValue, /**< [In] EAS ID; 0, 8 or 16 bits; optional. */
uint8_t bEasIdMaskLength, /**< [In] 8 bits; optional. */
uint8_t * pEas /**< [Out] EAS ID (16 bits) or EAS Sequence (256 bits). */
);
/**
* \brief This command enables the password protection for EAS.
*
* The EAS password has to be transmitted before with \ref phalSli_SetPWD.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_PwdProtectEAS(
void * pDataParams /**< [In] Pointer to this layer's parameter structure. */
);
/**
* \brief With this command, a new EAS identifier is stored in the corresponding configuration memory.
*
* If the EAS mode is password protected the EAS password has to be
* transmitted before with \ref phalSli_SetPWD.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_WriteEAS_ID(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t * pEasIdValue /**< [In] EAS ID; 16 bits. */
);
/**
* \brief On this command, the label will respond with it's EPC data.
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlaying component.
*/
phStatus_t phalSli_ReadEPC(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t * pEpc /**< [Out] EPC data; 96 bits. */
);
/**
* \brief The command provides information about IC access conditions and supported features.
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalSli_GetNxpSystemInfo(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t * pProtectionPointer, /**< [Out] Protection pointer address; 8 bits. */
uint8_t * pProtectionCondition, /**< [Out] Protection conditions for the password protection; 8 bits. */
uint8_t * pLockBits, /**< [Out] Lock bits settings; 8 bits. */
uint8_t * pFeatureFlags /**< [Out] Supported commands and features; 32 bits (+) additional 32 bits if EXT flag is set. */
);
/**
* \brief Get random number and set password using this random number and provided password
*
* This command combines together \ref phalSli_GetRandomNumber and \ref phalSli_SetPWD commands.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalSli_GetRandomNumberSetPWD(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bPwdIdentifier, /**< [In] Password Identifier; Refer to the PHAL_SLI_PWD_* definitions. */
uint8_t * pPwd /**< [In] Password; 32 bits. */
);
/** @} */
#endif /* NXPRDLIB_REM_GEN_INTFS */
#endif /* NXPBUILD__PHAL_SLI */
#ifdef __cplusplus
} /* Extern C */
#endif
#endif /* PHALSLI_H */