NXP_PN512_NFCReaderLibrary/intfs/phpalI14443p4mC.h

324 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 ISO 14443p4mC component of Reader Library Framework.
* $Author: Sundaresan Swaminathan (nxp36013) $
* $Revision: 5441 $ (v4.040.05.011646)
* $Date: 2016-07-05 16:39:00 +0530 (Tue, 05 Jul 2016) $
*
* History:
* KK: Generated 19. March 2014
*/
#ifndef PHPALI14443P4MC_H
#define PHPALI14443P4MC_H
#include <ph_Status.h>
#include <phhalHw.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef NXPBUILD__PHPAL_I14443P4MC_SW
/** \defgroup phpalI14443p4mC_Sw Component : Software
* @{
*/
#define PHPAL_I14443P4MC_SW_ID 0x01U /**< ID for software I18092 MT component */
/**< Event posted by response time extension timer ISR. Reader library thread listens to this event and sends the RTOx packet. */
#ifndef E_PH_OSAL_EVT_RTO_TIMEOUT
# define E_PH_OSAL_EVT_RTO_TIMEOUT (1 << 3)
#endif
/**
* \brief WTX timer call-back function type.
*/
typedef void(*pWtxTimerCallback)(uint8_t bTimerId);
/**
* \brief ISO14443-4 card mode PAL parameter structure
*/
typedef struct
{
uint16_t wId; /**< Layer ID for this component, NEVER MODIFY. */
uint16_t wLastTxLen; /**< Length of last I block send. */
void * pHalDataParams; /**< Pointer to the parameter structure of underlying hardware component. */
void * pPlatform; /**< Pointer to Platform layer. */
void * pTimerHandle; /**< Timer Handle (For WTX). */
phOsal_EventObj_t mcEventObj;
uint8_t bDisableWtx; /**< WTX Disabler (i.e. '0' if WTX enabled). */
uint8_t bWtx; /**< Frame Waiting Time Extension. */
uint8_t bFsdi; /**< FSDI parameter. */
uint8_t bFsci; /**< ATS FSCI parameter. */
uint8_t bDr; /**< ATS DR parameter. */
uint8_t bDs; /**< ATS DS parameter. */
uint8_t bUnequalDrDs; /**< DR and DS are different. */
uint8_t bFwi; /**< ATS FWI parameter. */
uint8_t bSfgi; /**< ATS SFGI parameter. */
uint8_t bCidEnable; /**< CID, Enabled = 1 or Disabled. */
uint8_t bCidPresence; /**< Flag to indicate CID presence in current command-response pair. */
uint8_t bCid; /**< CID parameter. */
uint8_t bNadEnable; /**< NAD, Enabled = 1 or Disabled. */
uint8_t bNadPresence; /**< Flag to indicate NAD presence in current command-response pair. */
uint8_t bNad; /**< NAD parameter. */
uint8_t bStateNow; /**< Current state. */
uint8_t bBlockNr; /**< Current block number. */
uint8_t bChainingRx; /**< We are chaining Rx. */
uint8_t bChainingTx; /**< We are chaining Tx. */
uint8_t bOpMode; /**< Operating mode - ISO or NFC. */
uint16_t wWtDelta; /**< Holds the configured delta time to be subtracted from the time in WTX timer. */
uint8_t bWtPercentage; /**< Percentage of actual wait time to be used in WTX timer. */
pWtxTimerCallback pWtxTimerCallback; /**< Holds WTX timer call-back function address. */
}phpalI14443p4mC_Sw_DataParams_t;
/**
* \brief Initializes this layer.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
*/
phStatus_t phpalI14443p4mC_Sw_Init(
phpalI14443p4mC_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 * pHalDataParams, /**< [In] Pointer to the parameter structure of the underlying layer.*/
pWtxTimerCallback pWtxCallback /**< [In] Pointer to WTX timer call-back function */
);
/** @} */
#endif /* NXPBUILD__PHPAL_I14443P4MC_SW */
#ifdef NXPBUILD__PHPAL_I14443P4MC
/** \defgroup phpalI14443p4mC ISO/IEC 14443-4mC
* \brief This component implements the PICC side of ISO/IEC 14443-4 Protocol.
* @{
*/
/**
* \name ISO14443-4 card mode data rates
*/
/*@{*/
#define PHPAL_I14443P4MC_106 0x00 /**< Set communication speed to 106 kbs. */
#define PHPAL_I14443P4MC_212 0x01 /**< Set communication speed to 212 kbs. */
#define PHPAL_I14443P4MC_424 0x02 /**< Set communication speed to 424 kbs. */
#define PHPAL_I14443P4MC_848 0x04 /**< Set communication speed to 848 kbs. */
/** @} */
/**
* \name ISO14443-4 card mode states
*/
/*@{*/
#define PHPAL_I14443P4MC_STATE_NONE 0x00U /**< Initialized State. */
#define PHPAL_I14443P4MC_STATE_ATS 0x01U /**< State once we send successful ATS for RATS. */
#define PHPAL_I14443P4MC_STATE_PPS 0x02U /**< State once we receive PPS Request. */
#define PHPAL_I14443P4MC_STATE_RX 0x03U /**< Internal State once we are in Receive State. */
#define PHPAL_I14443P4MC_STATE_TX_I 0x04U /**< State once we have received successful I (Information) Block. */
#define PHPAL_I14443P4MC_STATE_TX_R 0x05U /**< State once we have received R Block. */
#define PHPAL_I14443P4MC_STATE_WTX 0x07U /**< State once we have received S Block (WTX). */
#define PHPAL_I14443P4MC_STATE_DESELECT 0x08U /**< State once we have received S Block (DESELECT). */
#define PHPAL_I14443P4MC_STATE_PARAMETERS 0x09U /**< State once we have received S Block (PARAMETERS). */
#define PHPAL_I14443P4MC_STATE_RESEND 0x0AU /**< State to handle errors, like in case of NAK. */
#define PHPAL_I14443P4MC_STATE_RXCHAINING 0x0BU /**< State to handle RX Data Chaining. */
#define PHPAL_I14443P4MC_STATE_TXCHAINING 0x0CU /**< State to handle TX Data Chaining. */
/** @} */
/**
* \name ISO14443-4 card mode configuration parameters
*/
/*@{*/
#define PHPAL_I14443P4MC_CONFIG_WTX 0x0000U /**< Enable/Disable WTX feature. */
#define PHPAL_I14443P4MC_CONFIG_WTX_VALUE 0x0001U /**< Set the WTX value. */
#define PHPAL_I14443P4MC_CONFIG_BLOCKNO 0x0002U /**< Get the value of current ISO14443-4 protocol block number. */
#define PHPAL_I14443P4MC_CONFIG_FSDI 0x0003U /**< Get the FSDI value. */
#define PHPAL_I14443P4MC_CONFIG_MODE 0x0004U /**< Set/Get the operation mode (#RD_LIB_MODE_NFC or #RD_LIB_MODE_ISO). */
#define PHPAL_I14443P4MC_CONFIG_FSD 0x0005U /**< Get the current frame size (FSD) value. */
#define PHPAL_I14443P4MC_CONFIG_WT_PERCENTAGE 0x0006U /**< Set/Get the percentage of actual time to be used in WTX timer. */
#define PHPAL_I14443P4MC_CONFIG_WT_DELTA 0x0007U /**< Set/Get the delta time to be subtracted from the time in WTX timer. */
#define PHPAL_I14443P4MC_CONFIG_CID_PRESENCE 0x0008U /**< Check if CID is present in current received block. 1 - Present; 0 - Not present. */
#define PHPAL_I14443P4MC_CONFIG_NAD_PRESENCE 0x0009U /**< Check if NAD is present in current received I-block. 1 - Present; 0 - Not present. */
/** @} */
#ifdef NXPRDLIB_REM_GEN_INTFS
#include "../comps/phpalI14443p4mC/src/Sw/phpalI14443p4mC_Sw.h"
#define phpalI14443p4mC_ResetProtocol( pDataParams) \
phpalI14443p4mC_Sw_ResetProtocol((phpalI14443p4mC_Sw_DataParams_t *)pDataParams)
#define phpalI14443p4mC_Activate( pDataParams, pRats, wRatsLength, pAts, wAtsLength) \
phpalI14443p4mC_Sw_Activate((phpalI14443p4mC_Sw_DataParams_t *)pDataParams, pRats, wRatsLength, pAts, wAtsLength)
#define phpalI14443p4mC_SetConfig( pDataParams, wConfig, wValue) \
phpalI14443p4mC_Sw_SetConfig((phpalI14443p4mC_Sw_DataParams_t *)pDataParams, wConfig, wValue)
#define phpalI14443p4mC_GetConfig( pDataParams, wConfig,pValue) \
phpalI14443p4mC_Sw_GetConfig((phpalI14443p4mC_Sw_DataParams_t *)pDataParams, wConfig, pValue)
#define phpalI14443p4mC_Receive( pDataParams, wOption, ppRxBuffer, pRxLength) \
phpalI14443p4mC_Sw_Receive(( phpalI14443p4mC_Sw_DataParams_t *)pDataParams, wOption, ppRxBuffer, pRxLength)
#define phpalI14443p4mC_Transmit( pDataParams, wOption, pTxBuffer, wTxLength) \
phpalI14443p4mC_Sw_Transmit((phpalI14443p4mC_Sw_DataParams_t *)pDataParams, wOption, pTxBuffer, wTxLength)
#define phpalI14443p4mC_Wtx( pDataParams ) \
phpalI14443p4mC_Sw_Wtx((phpalI14443p4mC_Sw_DataParams_t *) pDataParams)
#else
/**
* \brief Reset protocol parameters.
*
* Removes any state information stored in previous runs.
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
*/
phStatus_t phpalI14443p4mC_ResetProtocol(
void * pDataParams /**< [In] Pointer to this layer's parameter structure. */
);
/**
* \brief Validates received RATS request and send ATS response.
*
* The user has to call \ref phpalI14443p4mC_Receive() once this function has
* returned with success status.
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval #PH_ERR_EXT_RF_ERROR External field turned OFF.
* \retval #PH_ERR_PROTOCOL_ERROR Protocol Error, RATS is invalid.
* \retval #PH_ERR_INVALID_PARAMETER Invalid input parameter, ATS is invalid.
* \retval Other depending on implementation and underlying components.
*/
phStatus_t phpalI14443p4mC_Activate(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure */
uint8_t * pRats, /**< [In] Pointer to received RATS request */
uint8_t bRatsLength, /**< [In] RATS Length*/
uint8_t * pAts, /**< [In] ATS to be sent */
uint16_t wAtsLength /**< [In] ATS length */
);
/**
* \brief Perform receive operation and validate received block.
*
* Used to receive the next command from PCD after the Activate() is successful.
* Responses to S-block and R-Block are sent internally. Response to I-Block can
* be sent using \ref phpalI14443p4mC_Transmit.
* This function also handles PPS request sent from the reader by sending
* a PPS response. An I-Frame received from the reader is returned back to the
* user.
* Handles DESELECT by sending DESELECT response
* Starts WTx timer before returning with the valid received packet to the caller
*
*
* \c wOption can be one of:\n
* \li #PH_RECEIVE_DEFAULT
* \li #PH_RECEIVE_CHAINING
* \li #PH_RECEIVE_CHAINING_BUFSIZE
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval #PH_ERR_SUCCESS_CHAINING RX chaining incomplete.
* \retval #PH_ERR_SUCCESS_DESELECTED Card got DESELECTED.
* \retval #PH_ERR_EXT_RF_ERROR External field turned OFF.
* \retval #PH_ERR_BUFFER_OVERFLOW Buffer overflow.
* \retval Other depending on implementation and underlying components.
*/
phStatus_t phpalI14443p4mC_Receive(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wOption, /**< [In] Option parameter. */
uint8_t ** ppRxBuffer, /**< [Out] Pointer to received data. */
uint16_t * pRxLength /**< [Out] Number of received data bytes. */
);
/**
* \brief Transmit I-Block block
*
* This function transmits an information block.
* Stops the WTx timer if it is running.
*
*
* \c wOption can be one of:\n
* \li #PH_TRANSMIT_DEFAULT
* \li #PH_TRANSMIT_BUFFER_FIRST
* \li #PH_TRANSMIT_BUFFER_CONT
* \li #PH_TRANSMIT_BUFFER_LAST
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval #PH_ERR_EXT_RF_ERROR External field turned OFF.
* \retval #PH_ERR_BUFFER_OVERFLOW buffer overflow.
* \retval Other depending on implementation and underlying components.
*/
phStatus_t phpalI14443p4mC_Transmit(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wOption, /**< [In] Option parameter. */
uint8_t * pTxBuffer, /**< [In] I-Block data to transmit. */
uint16_t wTxLength /**< [In] Length of data to transmit. */
);
/**
* \brief Sends WTX request and receive WTX response.
*
* Wait time extension request is sent by this function and this will block
* till it receives a response from the external reader.
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval #PH_ERR_PROTOCOL_ERROR Protocol Error.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phpalI14443p4mC_Wtx(
void * pDataParams /**< [In] Pointer to this layer's parameter structure */
);
/**
* \brief Set configuration parameter.
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval #PH_ERR_INVALID_PARAMETER Parameter value is invalid.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phpalI14443p4mC_SetConfig(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wConfig, /**< [In] Configuration identifier. */
uint16_t wValue /**< [In] Configuration value. */
);
/**
* \brief Get configuration parameter.
*
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval #PH_ERR_INVALID_PARAMETER Parameter value is invalid.
*/
phStatus_t phpalI14443p4mC_GetConfig(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wConfig, /**< [In] Configuration identifier. */
uint16_t *pValue /**< [Out] Configuration value. */
);
/** @} */
#endif /* NXPRDLIB_REM_GEN_INTFS */
#endif/*NXPBUILD__PHPAL_I14443P4MC */
#ifdef __cplusplus
} /* Extern C */
#endif
#endif /* PHPALI14443P4MC_H */