NXP NFC Reader Library v4.040.05.011646

Modules | Functions
ISO/IEC 18000-3 Mode3
Protocol Abstraction Layer

These Components implement the ISO/IEC 18000-3 Mode3 support. More...

Collaboration diagram for ISO/IEC 18000-3 Mode3:

## Modules
| Component : Software

## Functions
phStatus_t | phpalI18000p3m3_Exchange (void *pDataParams, uint16_t wOption, uint8_t *pTxBuffer, uint16_t wTxLength, uint8_t bTxLastBits, uint8_t **ppRxBuffer, uint16_t *pRxLength, uint8_t *pRxLastBits)
| Perform Data Exchange with Tag. More...
phStatus_t | phpalI18000p3m3_CreateSelectCmd (void *pDataParams, uint8_t bTarget, uint8_t bAction, uint8_t bMemBank, uint8_t *pPointer, uint8_t bPointerLength, uint8_t *pMask, uint8_t bMaskBitLength, uint8_t bTruncate, uint8_t *pSelectCmd, uint8_t *bLen, uint8_t *bValidBits)
| Create the Select command frame. More...
phStatus_t | phpalI18000p3m3_CreateBeginRoundCmd (void *pDataParams, uint8_t bDr, uint8_t bM, uint8_t bTRext, uint8_t bSel, uint8_t bSession, uint8_t bRfu, uint8_t bQ, uint8_t *pBeginRnd)
| Create the BeginRound command frame. More...
phStatus_t | phpalI18000p3m3_Ack (void *pDataParams, uint8_t bOption, uint8_t *pHandle, uint8_t **ppRxBuffer, uint16_t *pRxBitLength)
| Perform a Ack for ISO18000-3 Mode3 tags. More...
phStatus_t | phpalI18000p3m3_Nak (void *pDataParams)
| Perform a Nak for ISO18000-3 Mode3 tags. More...
phStatus_t | phpalI18000p3m3_ActivateCard (void *pDataParams, uint8_t *pSelCmd, uint8_t bSelCmdLen, uint8_t bNumValidBitsinLastByte, uint8_t *pBeginRndCmd, uint8_t bTSprocessing, uint8_t **ppRxBuffer, uint16_t *pRxBufferLen, uint8_t *pMoreCardsAvailable)
| Bring the first matching tag to OPEN or SECURED state. More...
phStatus_t | phpalI18000p3m3_SetConfig (void *pDataParams, uint16_t wConfig, uint16_t wValue)
| Sets the configuration parameter. More...

## Targets
#define | PHPAL_I18000P3M3_TARGET_INVENTORIED_S0 0x00U
| INVENTORIED_S0 Target. More...
#define | PHPAL_I18000P3M3_TARGET_INVENTORIED_S2 0x02U
| INVENTORIED_S2 Target. More...
#define | PHPAL_I18000P3M3_TARGET_SL 0x04U
| SL Target. More...

## Memory Banks
#define | PHPAL_I18000P3M3_MEMBANK_RESERVED 0x00U /** < Reserved Memory Bank. */
#define | PHPAL_I18000P3M3_MEMBANK_UII 0x01U /** < UII Memory Bank. */
#define | PHPAL_I18000P3M3_MEMBANK_TID 0x02U /** < TID Memory Bank. */
#define | PHPAL_I18000P3M3_MEMBANK_USER 0x03U /** < User Memory Bank. */

## Link Frequencies (DR)
#define | PHPAL_I18000P3M3_LF_423KHZ 0x00U
| 423kHz (fc/32). More...
#define | PHPAL_I18000P3M3_LF_847KHZ 0x01U
| 847kHz (fc/16). More...

## 'M' Values
#define | PHPAL_I18000P3M3_M_MANCHESTER_2 0x02U
| 2 sub-carrier pulse Manchester. More...
#define | PHPAL_I18000P3M3_M_MANCHESTER_4 0x03U
| 4 sub-carrier pulse Manchester. More...

## 'Sel' Values
#define | PHPAL_I18000P3M3_SEL_ALL_00 0x00U
| All. More...
#define | PHPAL_I18000P3M3_SEL_ALL_01 0x01U
| All. More...
#define | PHPAL_I18000P3M3_SEL_NOT_SL 0x02U
| Select only tags not matching SL. More...
#define | PHPAL_I18000P3M3_SEL_SL 0x03U
| Select only tags matching SL. More...

## 'Session' Values
#define | PHPAL_I18000P3M3_SESSION_S0 0x00U
| Session S0. More...
#define | PHPAL_I18000P3M3_SESSION_S1 0x01U
| Session S1 (Optional). More...
#define | PHPAL_I18000P3M3_SESSION_S2 0x02U
| Session S2. More...
#define | PHPAL_I18000P3M3_SESSION_S3 0x03U
| Session S3 (Optional). More...

## 'UpDn' Values
#define | PHPAL_I18000P3M3_UPDN_INCREMENT 0x06U
| Increment Q. More...
#define | PHPAL_I18000P3M3_UPDN_NOCHANGE 0x00U
| Do not change Q. More...
#define | PHPAL_I18000P3M3_UPDN_DECREMENT 0x03U
| Decrement Q. More...

## ACK Options
#define | PHPAL_I18000P3M3_ACK_USE_CRC 0x00U
| Use StoredCrc for ACK command. More...
#define | PHPAL_I18000P3M3_ACK_USE_HANDLE 0x01U
| Use given Handle for ACK command. More...

## Communication Configs
#define | PHPAL_I18000P3M3_CONFIG_TXLASTBITS 0x0003U
| Set number of valid bits of last Tx-Byte. More...
#define | PHPAL_I18000P3M3_CONFIG_TIMEOUT_VALUE_MS 0x000EU
| Set RC Timeout (in [ms]). More...

## Values used for Communication Configs
#define | PHPAL_I18000P3M3_TXLASTBITS_MAX 0x000FU
| Maximum value used for configuring TXLASTBITS. More...
#define | PHPAL_I18000P3M3_VALID_TXLASTBITS 0x0007U
| Valid value of TXLASTBITS. More...

## Detailed Description

These Components implement the ISO/IEC 18000-3 Mode3 support.

## Macro Definition Documentation

## § PHPAL_I18000P3M3_TARGET_INVENTORIED_S0

#define PHPAL_I18000P3M3_TARGET_INVENTORIED_S0 0x00U

INVENTORIED_S0 Target.

## § PHPAL_I18000P3M3_TARGET_INVENTORIED_S2

#define PHPAL_I18000P3M3_TARGET_INVENTORIED_S2 0x02U

INVENTORIED_S2 Target.

## § PHPAL_I18000P3M3_TARGET_SL

#define PHPAL_I18000P3M3_TARGET_SL 0x04U

SL Target.

## § PHPAL_I18000P3M3_LF_423KHZ

#define PHPAL_I18000P3M3_LF_423KHZ 0x00U

423kHz (fc/32).

Equivalent to PHHAL_HW_SUBCARRIER_DUAL DR = 0

## § PHPAL_I18000P3M3_LF_847KHZ

#define PHPAL_I18000P3M3_LF_847KHZ 0x01U

847kHz (fc/16).

Equivalent to PHHAL_HW_SUBCARRIER_QUAD DR = 1

## § PHPAL_I18000P3M3_M_MANCHESTER_2

#define PHPAL_I18000P3M3_M_MANCHESTER_2 0x02U

2 sub-carrier pulse Manchester.

Equivalent to #PHHAL_HW_RF_RX_DATARATE_I18000P3M3_MAN2.

## § PHPAL_I18000P3M3_M_MANCHESTER_4

#define PHPAL_I18000P3M3_M_MANCHESTER_4 0x03U

4 sub-carrier pulse Manchester.

Equivalent to #PHHAL_HW_RF_RX_DATARATE_I18000P3M3_MAN4.

## § PHPAL_I18000P3M3_SEL_ALL_00

#define PHPAL_I18000P3M3_SEL_ALL_00 0x00U

All.

## § PHPAL_I18000P3M3_SEL_ALL_01

#define PHPAL_I18000P3M3_SEL_ALL_01 0x01U

All.

## § PHPAL_I18000P3M3_SEL_NOT_SL

#define PHPAL_I18000P3M3_SEL_NOT_SL 0x02U

Select only tags not matching SL.

## § PHPAL_I18000P3M3_SEL_SL

#define PHPAL_I18000P3M3_SEL_SL 0x03U

Select only tags matching SL.

## § PHPAL_I18000P3M3_SESSION_S0

#define PHPAL_I18000P3M3_SESSION_S0 0x00U

Session S0.

## § PHPAL_I18000P3M3_SESSION_S1

#define PHPAL_I18000P3M3_SESSION_S1 0x01U

Session S1 (Optional).

## § PHPAL_I18000P3M3_SESSION_S2

#define PHPAL_I18000P3M3_SESSION_S2 0x02U

Session S2.

## § PHPAL_I18000P3M3_SESSION_S3

#define PHPAL_I18000P3M3_SESSION_S3 0x03U

Session S3 (Optional).

## § PHPAL_I18000P3M3_UPDN_INCREMENT

#define PHPAL_I18000P3M3_UPDN_INCREMENT 0x06U

Increment Q.

## § PHPAL_I18000P3M3_UPDN_NOCHANGE

#define PHPAL_I18000P3M3_UPDN_NOCHANGE 0x00U

Do not change Q.

## § PHPAL_I18000P3M3_UPDN_DECREMENT

#define PHPAL_I18000P3M3_UPDN_DECREMENT 0x03U

Decrement Q.

## § PHPAL_I18000P3M3_ACK_USE_CRC

#define PHPAL_I18000P3M3_ACK_USE_CRC 0x00U

Use StoredCrc for ACK command.

## § PHPAL_I18000P3M3_ACK_USE_HANDLE

#define PHPAL_I18000P3M3_ACK_USE_HANDLE 0x01U

Use given Handle for ACK command.

## § PHPAL_I18000P3M3_CONFIG_TXLASTBITS

#define PHPAL_I18000P3M3_CONFIG_TXLASTBITS 0x0003U

Set number of valid bits of last Tx-Byte.

## § PHPAL_I18000P3M3_CONFIG_TIMEOUT_VALUE_MS

#define PHPAL_I18000P3M3_CONFIG_TIMEOUT_VALUE_MS 0x000EU

Set RC Timeout (in [ms]).

## § PHPAL_I18000P3M3_TXLASTBITS_MAX

#define PHPAL_I18000P3M3_TXLASTBITS_MAX 0x000FU

Maximum value used for configuring TXLASTBITS.

## § PHPAL_I18000P3M3_VALID_TXLASTBITS

#define PHPAL_I18000P3M3_VALID_TXLASTBITS 0x0007U

Valid value of TXLASTBITS.

## Function Documentation

## § phpalI18000p3m3_Exchange()

phStatus_t phpalI18000p3m3_Exchange | ( | void * | pDataParams,
|  | uint16_t | wOption,
|  | uint8_t * | pTxBuffer,
|  | uint16_t | wTxLength,
|  | uint8_t | bTxLastBits,
|  | uint8_t ** | ppRxBuffer,
|  | uint16_t * | pRxLength,
|  | uint8_t * | pRxLastBits
| ) |  |

Perform Data Exchange with Tag.

`wOption` can be one of:

- PH_EXCHANGE_DEFAULT
- PH_EXCHANGE_BUFFER_FIRST
- PH_EXCHANGE_BUFFER_CONT
- PH_EXCHANGE_BUFFER_LAST

Alternatively, the following bits can be combined:

- PH_EXCHANGE_BUFFERED_BIT
- PH_EXCHANGE_LEAVE_BUFFER_BIT

Returns
  Status code

Return values

  PH_ERR_SUCCESS | Operation successful.
  Other | Depending on implementation and underlying component.

Parameters

  [in] | pDataParams | Pointer to this layer's parameter structure.
  [in] | wOption | Option parameter.
  [in] | pTxBuffer | Data to transmit.
  [in] | wTxLength | Length of input data.
  [in] | bTxLastBits | Number of valid bits of last byte (Tx).
  [out] | ppRxBuffer | Pointer to received data.
  [out] | pRxLength | Number of received data bytes including incomplete byte.
  [out] | pRxLastBits | Number of valid bits of last byte (Rx).

## § phpalI18000p3m3_CreateSelectCmd()

phStatus_t phpalI18000p3m3_CreateSelectCmd | ( | void * | pDataParams,
|  | uint8_t | bTarget,
|  | uint8_t | bAction,
|  | uint8_t | bMemBank,
|  | uint8_t * | pPointer,
|  | uint8_t | bPointerLength,
|  | uint8_t * | pMask,
|  | uint8_t | bMaskBitLength,
|  | uint8_t | bTruncate,
|  | uint8_t * | pSelectCmd,
|  | uint8_t * | bLen,
|  | uint8_t * | bValidBits
| ) |  |

Create the Select command frame.

This is a utility function to create the Select frame in the required format of ISO 18000p3m3. Parameters are validated to ensure that wrong values or wrong combinations are checked.

Returns
  Status code

Return values

  PH_ERR_SUCCESS | Operation successful.
  PH_ERR_INVALID_PARAMETER | if wrong options are provided.

Parameters

  [in] | pDataParams | Pointer to this layer's parameter structure.
  [in] | bTarget | Indicates whether the SL flag or the inventoried flags shall be modified.
  [in] | bAction | Indicates the way of changing the SL flag and the inventoried flags.
  [in] | bMemBank | Memory bank where the mask shall be applied.
  [in] | pPointer | Memory address where the mask shall be applied.
  [in] | bPointerLength | Length of the pointer, 0->8bits,1->16bits,2->24bits or 3->32bits.
  [in] | pMask | Contains a bit string that a tag compares against the memory location that begins at pPointer.
  [in] | bMaskBitLength | Length of the mask in bits.
  [in] | bTruncate | Specifies whether a tag load modulates its entire UII (PH_OFF), or only that portion of the UII immediately following Mask (PH_ON).
  [out] | pSelectCmd | Select Command frame. (Max 39 bytes)
  [out] | bLen | Length of Select cmd bytes
  [out] | bValidBits | Number of valid bits in the last byte of pSelectCmd.

## § phpalI18000p3m3_CreateBeginRoundCmd()

phStatus_t phpalI18000p3m3_CreateBeginRoundCmd | ( | void * | pDataParams,
|  | uint8_t | bDr,
|  | uint8_t | bM,
|  | uint8_t | bTRext,
|  | uint8_t | bSel,
|  | uint8_t | bSession,
|  | uint8_t | bRfu,
|  | uint8_t | bQ,
|  | uint8_t * | pBeginRnd
| ) |  |

Create the BeginRound command frame.

This is a utility function to create the BeginRound frame in the required format of ISO 18000p3m3. Parameters are validated to ensure that wrong values or wrong combinations are checked.

bDr can be one of

- PHPAL_I18000P3M3_LF_423KHZ
- PHPAL_I18000P3M3_LF_847KHZ

(Number of subcarrier cycles per symbol) cane be one of

- PHPAL_I18000P3M3_M_MANCHESTER_2 (M = 10b)
- PHPAL_I18000P3M3_M_MANCHESTER_4 (M = 11b)

Returns
  Status code

Return values

  PH_ERR_SUCCESS | Operation successful.
  PH_ERR_INVALID_PARAMETER | if wrong options are provided.

Parameters

  [in] | pDataParams | Pointer to this layer's parameter structure.
  [in] | bDr | Divide ratio.
  [in] | bM | Cycles per symbol.
  [in] | bTRext | Indicates whether a pilot tone shall be used in the T=>R pre-amble (PH_ON) or not (PH_OFF).
  [in] | bSel | Indicates which tags shall take part of the inventory round.
  [in] | bSession | Indicates the session of the inventory round.
  [in] | bRfu | RFU (1 bit).
  [in] | bQ | Indicates the number of slots in a round (2^Q slots).
  [out] | pBeginRnd | Begin round command frame (3 bytes)

## § phpalI18000p3m3_Ack()

phStatus_t phpalI18000p3m3_Ack | ( | void * | pDataParams,
|  | uint8_t | bOption,
|  | uint8_t * | pHandle,
|  | uint8_t ** | ppRxBuffer,
|  | uint16_t * | pRxBitLength
| ) |  |

Perform a Ack for ISO18000-3 Mode3 tags.

`bOption` can be one of:

- PHPAL_I18000P3M3_ACK_USE_CRC - This option is deprecated and no longer used.
- PHPAL_I18000P3M3_ACK_USE_HANDLE

Returns
  Status code

Return values

  PH_ERR_SUCCESS | Operation successful.
  Other | Depending on implementation and underlying component.

Parameters

  [in] | pDataParams | Pointer to this layer's parameter structure.
  [in] | bOption | Option parameter.
  [in] | pHandle | Handle value, mandatory if `bOption` is PHPAL_I18000P3M3_ACK_USE_HANDLE; uint8_t[2].
  [out] | ppRxBuffer | Pointer to Tag data and, if required, PacketCRC.
  [out] | pRxBitLength | Tag response length in bits.

## § phpalI18000p3m3_Nak()

phStatus_t phpalI18000p3m3_Nak | ( | void * | pDataParams | ) |

Perform a Nak for ISO18000-3 Mode3 tags.

All tags will move to arbitrate state after receive this command.

Returns
  Status code

Return values

  PH_ERR_SUCCESS | Operation successful.
  Other | Depending on implementation and underlying component.

Parameters

  [in] | pDataParams | Pointer to this layer's parameter structure.

## § phpalI18000p3m3_ActivateCard()

phStatus_t phpalI18000p3m3_ActivateCard | ( | void * | pDataParams,
|  | uint8_t * | pSelCmd,
|  | uint8_t | bSelCmdLen,
|  | uint8_t | bNumValidBitsinLastByte,
|  | uint8_t * | pBeginRndCmd,
|  | uint8_t | bTSprocessing,
|  | uint8_t ** | ppRxBuffer,
|  | uint16_t * | pRxBufferLen,
|  | uint8_t * | pMoreCardsAvailable
| ) |  |

Bring the first matching tag to OPEN or SECURED state.

The command performs a selection followed by an inventory round. The first responding tag is set to the OPEN or SECURED state and the tag handle is returned. If more tags are in the field, it shall resolve collision and activate one tag. The pMoreCardsAvailable value will be set to 1 if more cards are available in the field.

Issuing the Select command is optional based on the value of bSelCmdLen parameter. If bSelCmdLen parameter is zero, then ISO 18000p3m3 Select command is not issued. Only the BeginRound command is issued.

Returns
  Status code

Return values

  PH_ERR_SUCCESS | Operation successful.
  Other | Depending on implementation and underlying component.

Parameters

  [in] | pDataParams | Pointer to this layer's parameter structure.
  [in] | pSelCmd | ISO 18000p3m3 Select command frame.
  [in] | bSelCmdLen | Select command length in bytes- 1 to 39 bytes. If set to zero, Select command is not sent.
  [in] | bNumValidBitsinLastByte | Number of valid bits in last byte of pSelCmd.
  [in] | pBeginRndCmd | ISO 18000p3m3 BeginRound command frame. This is 17bits i.e., 3 bytes are expected. CRC5 should not be provided.
  [in] | bTSprocessing | TimeSlot processing behavior.
  [out] | ppRxBuffer | Pointer to HAL Rx Buffer containing handle of the activated tag.
  [out] | pRxBufferLen | Length of response in hal Rx Buffer.
  [out] | pMoreCardsAvailable | Indicates if more tags are present in the field.

## § phpalI18000p3m3_SetConfig()

phStatus_t phpalI18000p3m3_SetConfig | ( | void * | pDataParams,
|  | uint16_t | wConfig,
|  | uint16_t | wValue
| ) |  |

Sets the configuration parameter.

This function sets the values for the provided configuration parameter

Returns
  Status code

Return values

  PH_ERR_SUCCESS | Operation successful.
  Other | Depending on implementation and underlying component.

Parameters

  [in] | pDataParams | Pointer to this layer's parameter structure.
  [in] | wConfig | Configuration Identifier.
  [in] | wValue | Configuration Value.