00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00025 #ifndef __NFC_CHIPS_PN53X_H__
00026 # define __NFC_CHIPS_PN53X_H__
00027
00028 # include <nfc/nfc-types.h>
00029
00030 # define MAX_FRAME_LEN 264
00031
00032
00033 # define REG_CIU_TX_MODE 0x6302
00034 # define SYMBOL_TX_CRC_ENABLE 0x80
00035 # define REG_CIU_RX_MODE 0x6303
00036 # define SYMBOL_RX_CRC_ENABLE 0x80
00037 # define SYMBOL_RX_NO_ERROR 0x08
00038 # define SYMBOL_RX_MULTIPLE 0x04
00039 # define REG_CIU_TX_AUTO 0x6305
00040 # define SYMBOL_FORCE_100_ASK 0x40
00041 # define SYMBOL_AUTO_WAKE_UP 0x20
00042 # define SYMBOL_INITIAL_RF_ON 0x04
00043 # define REG_CIU_MANUAL_RCV 0x630D
00044 # define SYMBOL_PARITY_DISABLE 0x10
00045 # define REG_CIU_STATUS2 0x6338
00046 # define SYMBOL_MF_CRYPTO1_ON 0x08
00047 # define REG_CIU_CONTROL 0x633C
00048 # define SYMBOL_INITIATOR 0x10
00049 # define SYMBOL_RX_LAST_BITS 0x07
00050 # define REG_CIU_BIT_FRAMING 0x633D
00051 # define SYMBOL_TX_LAST_BITS 0x07
00052
00053 # define SYMBOL_PARAM_fAutomaticRATS 0x10
00054 # define SYMBOL_PARAM_fAutomaticATR_RES 0x04
00055
00056
00057 # define PARAM_NONE 0x00
00058 # define PARAM_NAD_USED 0x01
00059 # define PARAM_DID_USED 0x02
00060 # define PARAM_AUTO_ATR_RES 0x04
00061 # define PARAM_AUTO_RATS 0x10
00062 # define PARAM_14443_4_PICC 0x20
00063 # define PARAM_NO_AMBLE 0x40
00064
00065
00066 # define RFCI_FIELD 0x01 // 1
00067 # define RFCI_TIMING 0x02 // 3
00068 # define RFCI_RETRY_DATA 0x04 // 1
00069 # define RFCI_RETRY_SELECT 0x05 // 3
00070 # define RFCI_ANALOG_TYPE_A_106 0x0A // 11
00071 # define RFCI_ANALOG_TYPE_A_212_424 0x0B // 8
00072 # define RFCI_ANALOG_TYPE_B 0x0C // 3
00073 # define RFCI_ANALOG_TYPE_14443_4 0x0D // 9
00074
00075
00076 # define DENACK 0x0100
00077 # define DEACKMISMATCH 0x0200
00078 # define DEISERRFRAME 0x0300
00079 # define DENOTSUP 0x0400
00080
00081 bool pn53x_transceive_check_ack_frame_callback (nfc_device_t * pnd, const byte_t * pbtRxFrame,
00082 const size_t szRxFrameLen);
00083 bool pn53x_transceive_check_error_frame_callback (nfc_device_t * pnd, const byte_t * pbtRxFrame,
00084 const size_t szRxFrameLen);
00085 bool pn53x_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxLen, byte_t * pbtRx,
00086 size_t * pszRxLen);
00087 bool pn53x_get_reg (nfc_device_t * pnd, uint16_t ui16Reg, uint8_t * ui8Value);
00088 bool pn53x_set_reg (nfc_device_t * pnd, uint16_t ui16Reg, uint8_t ui8SybmolMask, uint8_t ui8Value);
00089 bool pn53x_set_parameters (nfc_device_t * pnd, uint8_t ui8Value);
00090 bool pn53x_set_tx_bits (nfc_device_t * pnd, uint8_t ui8Bits);
00091 bool pn53x_wrap_frame (const byte_t * pbtTx, const size_t szTxBits, const byte_t * pbtTxPar, byte_t * pbtFrame,
00092 size_t * pszFrameBits);
00093 bool pn53x_unwrap_frame (const byte_t * pbtFrame, const size_t szFrameBits, byte_t * pbtRx, size_t * pszRxBits,
00094 byte_t * pbtRxPar);
00095 bool pn53x_decode_target_data (const byte_t * pbtRawData, size_t szDataLen, nfc_chip_t nc, nfc_target_type_t ntt,
00096 nfc_target_info_t * pnti);
00097
00098 bool pn53x_InListPassiveTarget (nfc_device_t * pnd, const nfc_modulation_t nmInitModulation,
00099 const byte_t szMaxTargets, const byte_t * pbtInitiatorData,
00100 const size_t szInitiatorDataLen, byte_t * pbtTargetsData, size_t * pszTargetsData);
00101 bool pn53x_InDeselect (nfc_device_t * pnd, const uint8_t ui8Target);
00102 bool pn53x_InRelease (nfc_device_t * pnd, const uint8_t ui8Target);
00103 bool pn53x_InAutoPoll (nfc_device_t * pnd, const nfc_target_type_t * pnttTargetTypes, const size_t szTargetTypes,
00104 const byte_t btPollNr, const byte_t btPeriod, nfc_target_t * pntTargets,
00105 size_t * pszTargetFound);
00106
00107 bool pn53x_get_firmware_version (nfc_device_t * pnd);
00108 bool pn53x_configure (nfc_device_t * pnd, const nfc_device_option_t ndo, const bool bEnable);
00109 bool pn53x_initiator_select_dep_target (nfc_device_t * pnd, const nfc_modulation_t nmInitModulation,
00110 const byte_t * pbtPidData, const size_t szPidDataLen,
00111 const byte_t * pbtNFCID3i, const size_t szNFCID3iDataLen,
00112 const byte_t * pbtGbData, const size_t szGbDataLen,
00113 nfc_target_info_t * pnti);
00114 bool pn53x_initiator_transceive_bits (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxBits,
00115 const byte_t * pbtTxPar, byte_t * pbtRx, size_t * pszRxBits,
00116 byte_t * pbtRxPar);
00117 bool pn53x_initiator_transceive_bytes (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxLen,
00118 byte_t * pbtRx, size_t * pszRxLen);
00119
00120 bool pn53x_target_init (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRxBits);
00121 bool pn53x_target_receive_bits (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRxBits, byte_t * pbtRxPar);
00122 bool pn53x_target_receive_bytes (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRxLen);
00123 bool pn53x_target_send_bits (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxBits,
00124 const byte_t * pbtTxPar);
00125 bool pn53x_target_send_bytes (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxLen);
00126
00127 const char *pn53x_strerror (const nfc_device_t * pnd);
00128
00129 static const struct chip_callbacks pn53x_callbacks_list = {
00130 pn53x_strerror
00131 };
00132
00133 #endif // __NFC_CHIPS_PN53X_H__