NXP_PN512_NFCReaderLibrary/intfs/phalMful.h

298 lines
14 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 MIFARE(R) Ultralight 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 05. October 2009
*
*/
#ifndef PHALMFUL_H
#define PHALMFUL_H
#include <ph_Status.h>
#include <phpalMifare.h>
#include <phhalHw.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef NXPBUILD__PHAL_MFUL_SW
/** \defgroup phalMful_Sw Component : Software
* @{
*/
#define PHAL_MFUL_SW_ID 0x01 /**< ID for Software MIFARE Ultralight layer */
/**
* \brief Private parameter structure
*/
typedef struct
{
uint16_t wId; /**< Layer ID for this component, NEVER MODIFY! */
void * pPalMifareDataParams; /**< Pointer to palMifare parameter structure. */
void * pKeyStoreDataParams; /**< Pointer to phKeystore parameter structure. */
void * pCryptoDataParams; /**< Pointer to phCrypto data parameters structure. */
void * pCryptoRngDataParams; /**< Pointer to the parameter structure of the CryptoRng layer. */
} phalMful_Sw_DataParams_t;
/**
* \brief Initialise this layer.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
*/
phStatus_t phalMful_Sw_Init(
phalMful_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 * pPalMifareDataParams, /**< [In] Pointer to palMifare parameter structure. */
void * pKeyStoreDataParams, /**< [In] Pointer to phKeystore parameter structure. */
void * pCryptoDataParams, /**< [In] Pointer to phCrypto data parameters structure. */
void * pCryptoRngDataParams /**< [In] Pointer to the parameter structure of the CryptoRng layer. */
);
/** @} */
#endif /* NXPBUILD__PHAL_MFUL_SW */
#ifdef NXPBUILD__PHAL_MFUL
/** \defgroup phalMful MIFARE(R) Ultralight
* \brief These Components implement the MIFARE(R) Ultralight, C, Ultralight EV1 commands.
* @{
*/
/**
* \name Block definitions
*/
/*@{*/
#define PHAL_MFUL_READ_BLOCK_LENGTH 16U /**< Length of a read MIFARE(R) Ultralight data block. */
#define PHAL_MFUL_WRITE_BLOCK_LENGTH 4U /**< Length of a write MIFARE(R) Ultralight data block. */
#define PHAL_MFUL_COMPWRITE_BLOCK_LENGTH 16U /**< Length of a compatibility write MIFARE(R) Ultralight data block. */
#define PHAL_MFUL_COUNTER_RD_VALUE_LENGTH 3U /**< Length of a counter MIFARE(R) Ultralight Read data block. */
#define PHAL_MFUL_COUNTER_WR_VALUE_LENGTH 4U /**< Length of a counter MIFARE(R) Ultralight Write data block. */
#define PHAL_MFUL_PACK_LENGTH 2U /**< Length of a password ack MIFARE(R) Ultralight data block. */
#define PHAL_MFUL_VERSION_LENGTH 8U /**< Length of a Version MIFARE(R) Ultralight data block. */
#define PHAL_MFUL_SIG_LENGTH 32U /**< Length of a Version MIFARE(R) Ultralight data block. */
/*@}*/
/**
* \name Crypto definitions
*/
/*@{*/
#define PHAL_MFUL_DES_BLOCK_SIZE 8U /**< Length of an MIFARE(R) Ultralight DES block. */
#define PHAL_MFUL_DES_KEY_LENGTH 16U /**< Length of an MIFARE(R) Ultralight DES key. */
/*@}*/
#ifdef NXPRDLIB_REM_GEN_INTFS
#include "../comps/phalMful/src/Sw/phalMful_Sw.h"
#define phalMful_UlcAuthenticate(pDataParams, wKeyNumber, wKeyVersion) \
phalMful_Sw_UlcAuthenticate((phalMful_Sw_DataParams_t *)pDataParams, wKeyNumber, wKeyVersion)
#define phalMful_Read(pDataParams, bAddress, pData) \
phalMful_Sw_Read((phalMful_Sw_DataParams_t *)pDataParams, bAddress, pData)
#define phalMful_SectorSelect(pDataParams, bSecNo) \
phalMful_Sw_SectorSelect((phalMful_Sw_DataParams_t *)pDataParams, bSecNo)
#define phalMful_Write(pDataParams, bAddress, pData) \
phalMful_Sw_Write((phalMful_Sw_DataParams_t *)pDataParams, bAddress, pData)
#define phalMful_CompatibilityWrite(pDataParams, bAddress, pData) \
phalMful_Sw_CompatibilityWrite((phalMful_Sw_DataParams_t *)pDataParams, bAddress, pData)
#define phalMful_IncrCnt(pDataParams, bCntNum, pCnt) \
phalMful_Sw_IncrCnt((phalMful_Sw_DataParams_t *)pDataParams, bCntNum, pCnt)
#define phalMful_ReadCnt(pDataParams, bCntNum, pCntValue) \
phalMful_Sw_ReadCnt((phalMful_Sw_DataParams_t *)pDataParams, bCntNum, pCntValue)
#define phalMful_PwdAuth(pDataParams, pPwd, pPack) \
phalMful_Sw_PwdAuth((phalMful_Sw_DataParams_t *)pDataParams, pPwd, pPack)
#define phalMful_GetVersion(pDataParams, pVersion) \
phalMful_Sw_GetVersion((phalMful_Sw_DataParams_t *)pDataParams, pVersion)
#define phalMful_FastRead(pDataParams, bStartAddr, bEndAddr,pData, pNumBytes) \
phalMful_Sw_FastRead((phalMful_Sw_DataParams_t *)pDataParams, bStartAddr, bEndAddr,pData, pNumBytes)
#define phalMful_ReadSign(pDataParams, bAddr, pSignature) \
phalMful_Sw_ReadSign((phalMful_Sw_DataParams_t *)pDataParams, bAddr, pSignature)
#define phalMful_ChkTearingEvent(pDataParams, bCntNum, pValidFlag) \
phalMful_Sw_ChkTearingEvent((phalMful_Sw_DataParams_t *)pDataParams, bCntNum, pValidFlag)
#else
/**
* \brief Perform MIFARE(R) Ultralight-C Authenticate command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval #PH_ERR_AUTH_ERROR Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_UlcAuthenticate(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wKeyNumber, /**< [In] Key number to be used in authentication. */
uint16_t wKeyVersion /**< [In] Key version to be used in authentication. */
);
/**
* \brief Perform MIFARE(R) Ultralight Read command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_Read(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bAddress, /**< [In] Address on Picc to read from. */
uint8_t * pData /**< [Out] pData[#PHAL_MFUL_READ_BLOCK_LENGTH] containing data returned from the Picc. */
);
/**
* \brief Perform Type 2 tag Sector Select command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_SectorSelect(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bSecNo /**< [In] Sector number to be selected. */
);
/**
* \brief Perform MIFARE(R) Ultralight Write command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_Write(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bAddress, /**< [In] Address on Picc to write to. */
uint8_t * pData /**< [In] pData[#PHAL_MFUL_WRITE_BLOCK_LENGTH] containing block to be written to the Picc. */
);
/**
* \brief Perform MIFARE(R) Ultralight Compatibility-Write command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_CompatibilityWrite(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bAddress, /**< [In] Address on Picc to write to. */
uint8_t * pData /**< [In] pData[#PHAL_MFUL_COMPWRITE_BLOCK_LENGTH] containing block to be written to the Picc. */
);
/**
* \brief Perform MIFARE(R) Ultralight EV1 Increment count command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_IncrCnt(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bCntNum, /**< [In] One byte counter number 00 to 02 */
uint8_t * pCnt /**< [In] pCnt[4] counter value LSB first. Only first three data bytes are used by the PICC. The 4th byte is ignored */
);
/**
* \brief Perform MIFARE(R) Ultralight EV1 Read count command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_ReadCnt(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bCntNum, /**< [In] One byte counter number 00 to 02 */
uint8_t * pCntValue /**< [Out] pCntValue[3] counter value. LSB first. Three bytes counter value returned from PICC. */
);
/**
* \brief Perform MIFARE(R) Ultralight EV1 Password auth command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_PwdAuth(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t * pPwd, /**< [In] Four byte array of type uint8_t containing four password bytes */
uint8_t * pPack /**< [Out] Two byte array of type uint8_t containing two password acknowledge bytes */
);
/**
* \brief Perform MIFARE(R) Ultralight EV1 get version command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_GetVersion(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t * pVersion /**< [Out] An eight byte array containing version information bytes */
);
/**
* \brief Perform MIFARE(R) Ultralight EV1 Fast read command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_FastRead(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bStartAddr, /**< [In] One byte start address */
uint8_t bEndAddr, /**< [In] One byte end address */
uint8_t ** pData, /**< [Out] Pointer to the data read from the card. The bytes are stored on the HAL's Rx buffer. */
uint16_t * wNumBytes /**< [Out] Contains number of bytes read from the card */
);
/**
* \brief Perform MIFARE(R) Ultralight EV1 read signature command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_ReadSign(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bAddr, /**< [In] Value is always 00. Present for forward compatibility reasons */
uint8_t ** pSignature /**< [Out] Pointer to a 32 byte signature read from the card */
);
/**
* \brief Perform MIFARE(R) Ultralight EV1 check tearing event command with Picc.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phalMful_ChkTearingEvent(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint8_t bCntNum, /**< [In] Value specifying the counter number 00 to 02 */
uint8_t * pValidFlag /**< [Out] Address of one byte containing the valid flag byte */
);
/** @} */
#endif /* NXPRDLIB_REM_GEN_INTFS */
#endif /* NXPBUILD__PHAL_MFUL */
#ifdef __cplusplus
} /* Extern C */
#endif
#endif /* PHALMFUL_H */