1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /* 18 * NCI Interface 19 */ 20 21 #ifndef PHNCINFCTYPES_H 22 #define PHNCINFCTYPES_H 23 24 /* 25 ################################################################################ 26 ***************************** Header File Inclusion 27 **************************** 28 ################################################################################ 29 */ 30 #include <phNfcStatus.h> 31 32 /* 33 ################################################################################ 34 ****************************** Macro Definitions 35 ******************************* 36 ################################################################################ 37 */ 38 #define PH_NCINFCTYPES_MAX_UID_LENGTH (0x0AU) 39 /* Maximum length of ATR_RES (General Bytes) length expected */ 40 #define PH_NCINFCTYPES_MAX_ATR_LENGTH (0x30U) 41 #define PH_NCINFCTYPES_ATQA_LENGTH (0x02U) /* ATQA length */ 42 #define PH_NCINFCTYPES_MAX_HIST_BYTES \ 43 (0x0FU) /* Max Historical bytes returned by Type A tag */ 44 45 /* 46 * Enum definition contains supported RF Protocols 47 */ 48 typedef enum { 49 phNciNfc_e_RfProtocolsUnknownProtocol = 0x00, /* Protocol is not known */ 50 phNciNfc_e_RfProtocolsT1tProtocol = 0x01, /* Type 1 Tag protocol */ 51 phNciNfc_e_RfProtocolsT2tProtocol = 0x02, /* Type 2 Tag protocol */ 52 phNciNfc_e_RfProtocolsT3tProtocol = 0x03, /* Type 3 Tag protocol */ 53 phNciNfc_e_RfProtocolsIsoDepProtocol = 0x04, /* ISO DEP protocol */ 54 phNciNfc_e_RfProtocolsNfcDepProtocol = 0x05, /* NFC DEP protocol */ 55 phNciNfc_e_RfProtocols15693Protocol = 0x06, /* 15693 protocol */ 56 phNciNfc_e_RfProtocolsMifCProtocol = 0x80, /* Mifare Classic protocol */ 57 phNciNfc_e_RfProtocolsHidProtocol = 0x81, /* Hid protocol */ 58 phNciNfc_e_RfProtocolsEpcGen2Protocol = 0x82, /* EpcGen2 protocol */ 59 phNciNfc_e_RfProtocolsKovioProtocol = 0x83 /* Kovio protocol */ 60 } phNciNfc_RfProtocols_t; 61 62 /* 63 * Supported RF Interfaces 64 */ 65 typedef enum { 66 phNciNfc_e_RfInterfacesNfceeDirect_RF = 0x00, /* Nfcee Direct RF Interface */ 67 phNciNfc_e_RfInterfacesFrame_RF = 0x01, /* Frame RF Interface */ 68 phNciNfc_e_RfInterfacesISODEP_RF = 0x02, /* ISO DEP RF Interface */ 69 phNciNfc_e_RfInterfacesNFCDEP_RF = 0x03, /* NFC DEP RF Interface */ 70 phNciNfc_e_RfInterfacesTagCmd_RF = 0x80, /* Tag-Cmd RF Interface (Nxp prop) */ 71 phNciNfc_e_RfInterfacesHID_RF = 0x81 /* Hid RF Interface (Nxp prop) */ 72 } phNciNfc_RfInterfaces_t; 73 74 /* 75 * Enum definition contains RF technology modes supported. 76 * This information is a part of RF_DISCOVER_NTF or RF_INTF_ACTIVATED_NTF. 77 */ 78 typedef enum { 79 phNciNfc_NFCA_Poll = 0x00, /* Nfc A Technology in Poll Mode */ 80 phNciNfc_NFCB_Poll = 0x01, /* Nfc B Technology in Poll Mode */ 81 phNciNfc_NFCF_Poll = 0x02, /* Nfc F Technology in Poll Mode */ 82 phNciNfc_NFCA_Active_Poll = 0x03, /* Nfc A Technology in Active Poll Mode */ 83 phNciNfc_NFCF_Active_Poll = 0x05, /* Nfc F Technology in Active Poll Mode */ 84 phNciNfc_NFCISO15693_Poll = 0x06, /* Nfc ISO15693 Technology in Poll Mode */ 85 phNciNfc_NxpProp_NFCHID_Poll = 0x70, /* Nfc Hid Technology in Poll Mode */ 86 phNciNfc_NxpProp_NFCEPFGEN2_Poll = 87 0x71, /* Nfc EpcGen2 Technology in Poll Mode */ 88 phNciNfc_NxpProp_NFCKOVIO_Poll = 0x72, /* Nfc Kovio Technology in Poll Mode */ 89 phNciNfc_NFCA_Listen = 0x80, /* Nfc A Technology in Listen Mode */ 90 phNciNfc_NFCB_Listen = 0x81, /* Nfc B Technology in Listen Mode */ 91 phNciNfc_NFCF_Listen = 0x82, /* Nfc F Technology in Listen Mode */ 92 phNciNfc_NFCA_Active_Listen = 93 0x83, /* Nfc A Technology in Active Listen Mode */ 94 phNciNfc_NFCF_Active_Listen = 95 0x85, /* Nfc F Technology in Active Listen Mode */ 96 phNciNfc_NFCISO15693_Active_Listen = 97 0x86 /* Nfc ISO15693 Technology in Listen Mode */ 98 } phNciNfc_RfTechMode_t; 99 100 /* 101 * This is used to identify the exact device type 102 */ 103 typedef enum { 104 phNciNfc_eUnknown_DevType = 0x00U, 105 106 /* Generic PICC Type */ 107 phNciNfc_ePICC_DevType, 108 /* Specific PICC Devices */ 109 /* This PICC type explains that the card is compliant to the 110 * ISO 14443-1 and 2A specification. This type can be used for the 111 * cards that is supporting these specifications 112 */ 113 phNciNfc_eISO14443_A_PICC, 114 /* This PICC type explains that the card is compliant to the 115 * ISO 14443-4A specification 116 */ 117 phNciNfc_eISO14443_4A_PICC, 118 /* This PICC type explains that the card is compliant to the 119 * ISO 14443-3A specification 120 */ 121 phNciNfc_eISO14443_3A_PICC, 122 /* This PICC type explains that the card is Mifare UL/1k/4k and 123 * also it is compliant to ISO 14443-3A. There can also be other 124 * ISO 14443-3A cards, so the phNciNfc_eISO14443_3A_PICC is also used for 125 * PICC detection 126 */ 127 phNciNfc_eMifareUL_PICC, 128 phNciNfc_eMifare1k_PICC, 129 phNciNfc_eMifare4k_PICC, 130 phNciNfc_eMifareMini_PICC, 131 /* This PICC type explains that the card is compliant to the 132 * ISO 14443-1, 2 and 3B specification 133 */ 134 phNciNfc_eISO14443_B_PICC, 135 /* This PICC type explains that the card is compliant to the 136 * ISO 14443-4B specification 137 */ 138 phNciNfc_eISO14443_4B_PICC, 139 /* This PICC type explains that the card is B-Prime type */ 140 phNciNfc_eISO14443_BPrime_PICC, 141 phNciNfc_eFelica_PICC, 142 phNciNfc_eJewel_PICC, 143 /* This PICC type explains that the card is ISO15693 type */ 144 phNciNfc_eISO15693_PICC, 145 /* This PICC type explains that the card is EpcGen2 type */ 146 phNciNfc_eEpcGen_PICC, 147 148 /* NFC-IP1 Device Types */ 149 phNciNfc_eNfcIP1_Target, 150 phNciNfc_eNfcIP1_Initiator, 151 152 /* Other Sources */ 153 phNciNfc_eInvalid_DevType 154 155 } phNciNfc_RFDevType_t; 156 157 /* 158 * RATS Response Params structure 159 */ 160 typedef struct phNciNfc_RATSResp { 161 uint8_t bFormatByte; /* Format Byte */ 162 uint8_t bIByteTA; /* Interface Byte TA(1) */ 163 uint8_t bIByteTB; /* Interface Byte TB(1) */ 164 uint8_t bIByteTC; /* Interface Byte TC(1) */ 165 uint8_t bHistByte[PH_NCINFCTYPES_MAX_HIST_BYTES]; /* Historical Bytes - Max 166 size 15 */ 167 } phNciNfc_RATSResp_t; 168 169 /* 170 * The Reader A structure includes the available information 171 * related to the discovered ISO14443A remote device. This information 172 * is updated for every device discovery. 173 */ 174 typedef struct phNciNfc_Iso14443AInfo { 175 uint8_t Uid[PH_NCINFCTYPES_MAX_UID_LENGTH]; /* UID information of the TYPE A 176 Tag Discovered NFCID1 - 177 Considering max size of NFCID1*/ 178 uint8_t UidLength; /* UID information length, shall not be greater 179 than PHNCINFC_MAX_UID_LENGTH i.e., 10 */ 180 uint8_t AppData[PH_NCINFCTYPES_MAX_ATR_LENGTH]; /* Application data 181 information of the tag discovered 182 (= Historical bytes for type A) */ 183 uint8_t AppDataLength; /* Application data length */ 184 uint8_t Sak; /* SAK information of the TYPE ATag Discovered 185 Mapped to SEL_RES Response*/ 186 uint8_t AtqA[PH_NCINFCTYPES_ATQA_LENGTH]; /* ATQA information of the TYPE A 187 Tag Discovered */ 188 uint8_t MaxDataRate; /* Maximum data rate supported by the TYPE A 189 Tag Discovered */ 190 uint8_t Fwi_Sfgt; /* Frame waiting time and start up frame guard 191 time as defined in ISO/IEC 14443-4[7] for type A */ 192 uint8_t bSensResResp[2]; /* SENS_RES Response */ 193 uint8_t bSelResRespLen; /* SEL_RES Response Length */ 194 uint8_t bRatsRespLen; /* Length of RATS Response */ 195 phNciNfc_RATSResp_t tRatsResp; /* RATS Response Info */ 196 } phNciNfc_Iso14443AInfo_t; 197 198 /* 199 * The Remote Device Information Union includes the available Remote Device 200 * Information structures. Following the device detected, the corresponding data 201 * structure is used. 202 */ 203 typedef union phNciNfc_RemoteDevInfo { 204 phNciNfc_Iso14443AInfo_t Iso14443A_Info; /* Type A tag Info */ 205 } phNciNfc_RemoteDevInfo_t; 206 207 /* Contains Details of Discovered Target */ 208 typedef struct phNciNfc_RemoteDevInformation { 209 uint8_t SessionOpened; /* Flag indicating the validity of the handle of the 210 remote device. */ 211 phNciNfc_RFDevType_t 212 RemDevType; /* Remote device type which says that remote 213 is Reader A or Reader B or NFCIP or Felica or 214 Reader B Prime or Jewel*/ 215 uint8_t bRfDiscId; /* ID of the Tag */ 216 phNciNfc_RfInterfaces_t eRfIf; /* RF Interface */ 217 phNciNfc_RfProtocols_t eRFProtocol; /* RF protocol of the target */ 218 phNciNfc_RfTechMode_t 219 eRFTechMode; /* RF Technology mode of the discovered/activated target */ 220 uint8_t bMaxPayLoadSize; /* Max data payload size*/ 221 uint8_t bInitialCredit; /* Initial credit*/ 222 uint8_t bTechSpecificParamLen; /* Technology Specific parameter length, for 223 Debugging purpose only*/ 224 phNciNfc_RfTechMode_t 225 eDataXchgRFTechMode; /* Data Exchange RF Technology mode of the activated 226 target */ 227 uint8_t bTransBitRate; /* Transmit Bit Rate */ 228 uint8_t bRecvBitRate; /* Receive Bit Rate */ 229 phNciNfc_RemoteDevInfo_t 230 tRemoteDevInfo; /* Structure object to #phNciNfc_RemoteDevInfo_t*/ 231 } phNciNfc_RemoteDevInformation_t, 232 *pphNciNfc_RemoteDevInformation_t; /* Pointer to Remote Dev Info*/ 233 234 /* 235 * Structure contains buffer where payload of the received data packet 236 * shall be stored and length of the payload stored in the buffer. 237 */ 238 typedef struct phNciNfc_Data { 239 uint8_t* pBuff; /* Buffer to store received data packet's payload */ 240 uint16_t wLen; /* Length of the payload */ 241 } phNciNfc_Data_t, *pphNciNfc_Data_t; 242 243 /* 244 * Type 2 tag command list supported by NCI stack 245 * It includes command lists applicable to Mifare family cards also 246 */ 247 typedef enum phNciNfc_T2TCmdList { 248 phNciNfc_eT2TRaw = 0x00, /* Performs Raw communication over T2T Tag*/ 249 phNciNfc_eT2TWriteN, /* Write Multiple blocks to T2T tag*/ 250 phNciNfc_eT2TreadN, /* Read Multiple blocks to T2T tag*/ 251 phNciNfc_eT2TSectorSel, /* Sector Select for MifareStd Cards*/ 252 phNciNfc_eT2TAuth, /* Sector Select for MifareStd Cards*/ 253 phNciNfc_eT2TProxCheck, /* Proxy Check command for MF+*/ 254 phNciNfc_eT2TInvalidCmd /* Invalid Command*/ 255 } phNciNfc_T2TCmdList_t; /* Type2 Tag and Mifare specicific command list*/ 256 257 /* All command list for tag operation supported by NCI stack */ 258 typedef union phNciNfc_TagCmdList { 259 phNciNfc_T2TCmdList_t T2TCmd; /* T2T Specific command*/ 260 } phNciNfc_TagCmdList_t; /* Tag specific command */ 261 262 /* Transceive info */ 263 typedef struct phNciNfc_TransceiveInfo { 264 phNciNfc_TagCmdList_t uCmd; /* Technology Specific commands */ 265 uint8_t bAddr; /* Start address to perform operation,Valid for T1T T2T T3T and 266 some Propriatery tags */ 267 uint8_t bNumBlock; /* Number of blocks */ 268 uint16_t wTimeout; /* Timeout value to be used during transceive */ 269 phNciNfc_Data_t tSendData; /* Buffer information for sending data */ 270 phNciNfc_Data_t tRecvData; /* Buffer information for receiving data */ 271 /* Details for Felica To be Added if Check and Update supported */ 272 } phNciNfc_TransceiveInfo_t, 273 *pphNciNfc_TransceiveInfo_t; /* pointer to struct #phNciNfc_TransceiveInfo_t 274 */ 275 276 #endif /* end of #ifndef PHNCINFCTYPES_H */ 277