Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2010 NXP Semiconductors |
| 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 | * =========================================================================== * |
| 19 | * * |
| 20 | * * |
| 21 | * \file phHciNfc_Generic.h * |
| 22 | * \brief Common HCI Header for the Generic HCI Management. * |
| 23 | * * |
| 24 | * * |
| 25 | * Project: NFC-FRI-1.1 * |
| 26 | * * |
| 27 | * $Date: Mon Mar 29 17:34:47 2010 $ * |
| 28 | * $Author: ing04880 $ * |
| 29 | * $Revision: 1.73 $ * |
| 30 | * $Aliases: NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $ |
| 31 | * * |
| 32 | * =========================================================================== * |
| 33 | */ |
| 34 | |
| 35 | /*@{*/ |
| 36 | #ifndef PHHCINFC_GENERIC_H |
| 37 | #define PHHCINFC_GENERIC_H |
| 38 | |
| 39 | /*@}*/ |
| 40 | |
| 41 | |
| 42 | /** |
| 43 | * \name HCI |
| 44 | * |
| 45 | * File: \ref phHciNfc_Generic.h |
| 46 | * |
| 47 | */ |
| 48 | /*@{*/ |
| 49 | #define PHHCINFC_GENERIC_FILEREVISION "$Revision: 1.73 $" /**< \ingroup grp_file_attributes */ |
| 50 | #define PHHCINFC_GENERIC_FILEALIASES "$Aliases: NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $" /**< \ingroup grp_file_attributes */ |
| 51 | /*@}*/ |
| 52 | /* |
| 53 | |
| 54 | ################################################################################ |
| 55 | ***************************** Header File Inclusion **************************** |
| 56 | ################################################################################ |
| 57 | */ |
Nick Pelly | 34ff48f | 2011-06-27 09:01:51 -0700 | [diff] [blame] | 58 | #define LOG_TAG "NFC-HCI" |
| 59 | #include <cutils/log.h> |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 60 | #include <phNfcIoctlCode.h> |
| 61 | #include<phNfcInterface.h> |
| 62 | #include <phHciNfc.h> |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 63 | /* |
| 64 | ################################################################################ |
| 65 | ****************************** Macro Definitions ******************************* |
| 66 | ################################################################################ |
| 67 | */ |
| 68 | |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 69 | #define Trace_buffer phOsalNfc_DbgTraceBuffer |
| 70 | |
| 71 | /* HCI TRACE Macros */ |
| 72 | #if defined(HCI_TRACE)&& !defined(SILENT_HCI) |
| 73 | #include <phOsalNfc.h> |
| 74 | #include <stdio.h> |
| 75 | extern char phOsalNfc_DbgTraceBuffer[]; |
| 76 | #define MAX_TRACE_BUFFER 150 |
| 77 | /* #define HCI_PRINT( str ) phOsalNfc_DbgTrace(str) */ |
| 78 | #define HCI_PRINT( str ) phOsalNfc_DbgString(str) |
Steve Block | 1f23e48 | 2011-12-20 16:20:37 +0000 | [diff] [blame] | 79 | #define HCI_DEBUG(...) ALOGD(__VA_ARGS__) |
Nick Pelly | 34ff48f | 2011-06-27 09:01:51 -0700 | [diff] [blame] | 80 | |
| 81 | |
| 82 | |
| 83 | |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 84 | #define HCI_PRINT_BUFFER(msg,buf,len) \ |
| 85 | { \ |
Nick Pelly | 34ff48f | 2011-06-27 09:01:51 -0700 | [diff] [blame] | 86 | snprintf(Trace_buffer,MAX_TRACE_BUFFER,"\t %s:",msg); \ |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 87 | phOsalNfc_DbgString(Trace_buffer); \ |
| 88 | phOsalNfc_DbgTrace(buf,len); \ |
| 89 | phOsalNfc_DbgString("\r"); \ |
| 90 | \ |
| 91 | } |
| 92 | #else |
| 93 | #include <phDbgTrace.h> |
| 94 | #if defined(PHDBG_TRACES) && !defined(HCI_TRACE) |
| 95 | #define HCI_PRINT( str ) PHDBG_INFO(str) |
| 96 | #define HCI_DEBUG(str, arg) |
| 97 | #define HCI_PRINT_BUFFER(msg,buf,len) |
| 98 | #else |
| 99 | #define HCI_PRINT( str ) |
Nick Pelly | 34ff48f | 2011-06-27 09:01:51 -0700 | [diff] [blame] | 100 | #define HCI_DEBUG(...) |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 101 | #define HCI_PRINT_BUFFER(msg,buf,len) |
| 102 | #endif /* #if defined(PHDBG_TRACES) */ |
| 103 | /* #if defined(PHDBG_INFO) && defined (PHDBG_CRITICAL_ERROR) */ |
| 104 | |
| 105 | #endif /* #if defined(HCI_TRACE) */ |
| 106 | |
| 107 | #define ZERO 0x00U |
| 108 | |
| 109 | |
| 110 | #ifdef MASK_BITS |
| 111 | #define BYTE_SIZE 0x08U |
| 112 | |
| 113 | /* HCI GET and SET BITS Macros */ |
| 114 | #define MASK_BITS8(p,l) \ |
| 115 | ( ( (((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE )? \ |
| 116 | (~(0xFFU<<((p)+(l))) & (0xFFU<<(p))):(0U) ) |
| 117 | #ifdef MASK_BITS |
| 118 | #define GET_BITS8(num,p,l) \ |
| 119 | ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \ |
| 120 | (((num)& (MASK_BITS8(p,l)))>>(p)):(0U) ) |
| 121 | #else |
| 122 | #define GET_BITS8(num,p,l) \ |
| 123 | ( ((((p)+(l))<=BYTE_SIZE))? \ |
| 124 | (((num)>>(p))& (~(0xFFU<<(l)))):(0U) ) |
| 125 | #endif |
| 126 | #define SET_BITS8(num,p,l,val) \ |
| 127 | ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \ |
| 128 | (((num)& (~MASK_BITS8(p,l)))|((val)<<(p))):(0U)) |
| 129 | |
| 130 | #endif |
| 131 | |
| 132 | /** \ingroup grp_hci_retval |
| 133 | The Corresponding HCI Gate Not Supported. |
| 134 | */ |
| 135 | #define NFCSTATUS_HCI_GATE_NOT_SUPPORTED (0x71U) |
| 136 | |
| 137 | /** \ingroup grp_hci_retval |
| 138 | Invalid Command from the HCI Layer |
| 139 | */ |
| 140 | #define NFCSTATUS_INVALID_HCI_COMMAND (0x72U) |
| 141 | |
| 142 | /** \ingroup grp_hci_retval |
| 143 | HCI Command not supported . */ |
| 144 | #define NFCSTATUS_COMMAND_NOT_SUPPORTED (0x73U) |
| 145 | |
| 146 | /** \ingroup grp_hci_retval |
| 147 | Invalide Response from the HCI Layer |
| 148 | */ |
| 149 | #define NFCSTATUS_INVALID_HCI_RESPONSE (0x74U) |
| 150 | |
| 151 | /** \ingroup grp_hci_retval |
| 152 | The Invalid Instruction type (Neither Command/Response nor Event ). |
| 153 | */ |
| 154 | #define NFCSTATUS_INVALID_HCI_INSTRUCTION (0x75U) |
| 155 | |
| 156 | /** \ingroup grp_hci_retval |
| 157 | The Invalid Instruction type (Neither Command/Response nor Event ). |
| 158 | */ |
| 159 | #define NFCSTATUS_INVALID_HCI_INFORMATION (0x76U) |
| 160 | |
| 161 | /** \ingroup grp_hci_retval |
| 162 | The Invalid HCI Sequence. |
| 163 | */ |
| 164 | #define NFCSTATUS_INVALID_HCI_SEQUENCE (0x78U) |
| 165 | |
| 166 | |
| 167 | /** \ingroup grp_hci_retval |
| 168 | The HCI Error Response with Response code. |
| 169 | */ |
| 170 | #define NFCSTATUS_HCI_RESPONSE(code) (code) |
| 171 | |
| 172 | |
| 173 | /* Length of the HCP and the HCP Message Header in Bytes */ |
| 174 | #define HCP_HEADER_LEN 0x02U |
| 175 | |
| 176 | /* Length of the HCP Message Header in Bytes */ |
| 177 | #define HCP_MESSAGE_LEN 0x01U |
| 178 | |
| 179 | /* HCP Header Chaining Bit Offset */ |
| 180 | #define HCP_CHAINBIT_OFFSET 0x07U |
| 181 | /* HCP Header Chaining Bit Length */ |
| 182 | #define HCP_CHAINBIT_LEN 0x01U |
| 183 | |
| 184 | /* Chaining Bit Values */ |
| 185 | #define HCP_CHAINBIT_DEFAULT 0x01U |
| 186 | #define HCP_CHAINBIT_BEGIN 0x00U |
| 187 | #define HCP_CHAINBIT_END HCP_CHAINBIT_DEFAULT |
| 188 | |
| 189 | /* HCP Header Pipe ID Offset */ |
| 190 | #define HCP_PIPEID_OFFSET 0x00U |
| 191 | /* HCP Header Pipe ID Length */ |
| 192 | #define HCP_PIPEID_LEN 0x07U |
| 193 | |
| 194 | /* HCP Message Header Type Offset */ |
| 195 | #define HCP_MSG_TYPE_OFFSET 0x06U |
| 196 | /* HCP Message Header Type Length */ |
| 197 | #define HCP_MSG_TYPE_LEN 0x02U |
| 198 | |
| 199 | /* HCP Message Type Values */ |
| 200 | #define HCP_MSG_TYPE_COMMAND 0x00U |
| 201 | #define HCP_MSG_TYPE_EVENT 0x01U |
| 202 | #define HCP_MSG_TYPE_RESPONSE 0x02U |
| 203 | #define HCP_MSG_TYPE_RESERVED 0x03U |
| 204 | |
| 205 | /* HCP Message Header Instruction Offset */ |
| 206 | #define HCP_MSG_INSTRUCTION_OFFSET 0x00U |
| 207 | /* HCP Message Header Instruction Length */ |
| 208 | #define HCP_MSG_INSTRUCTION_LEN 0x06U |
| 209 | /* HCP Invalid Message Instruction */ |
| 210 | #define HCP_MSG_INSTRUCTION_INVALID 0x3FU |
| 211 | |
| 212 | |
| 213 | /* HCP Packet Zero Length */ |
| 214 | #define HCP_ZERO_LEN 0x00U |
| 215 | |
| 216 | |
| 217 | |
| 218 | /** \internal Generic HCI Commands for all the Gates */ |
| 219 | #define ANY_SET_PARAMETER 0x01U |
| 220 | #define ANY_GET_PARAMETER 0x02U |
| 221 | #define ANY_OPEN_PIPE 0x03U |
| 222 | #define ANY_CLOSE_PIPE 0x04U |
| 223 | #define ANY_GENERIC_CMD_RFU_B 0x05U |
| 224 | #define ANY_GENERIC_CMD_RFU_E 0x0FU |
| 225 | |
| 226 | /* |
| 227 | * 0x05-0x0F is Reserved for Future Use |
| 228 | */ |
| 229 | |
| 230 | /** \internal HCI Administration Com mands for the Management of the Host Network */ |
| 231 | |
| 232 | #define ADM_CREATE_PIPE 0x10U |
| 233 | #define ADM_DELETE_PIPE 0x11U |
| 234 | #define ADM_NOTIFY_PIPE_CREATED 0x12U |
| 235 | #define ADM_NOTIFY_PIPE_DELETED 0x13U |
| 236 | #define ADM_CLEAR_ALL_PIPE 0x14U |
| 237 | #define ADM_NOTIFY_ALL_PIPE_CLEARED 0x15U |
| 238 | #define ADM_CMD_RFU_B 0x16U |
| 239 | #define ADM_CMD_RFU_E 0x3FU |
| 240 | |
| 241 | #define MSG_INSTRUCTION_UNKNWON 0x3FU |
| 242 | |
| 243 | /* |
| 244 | * 0x16-0x3F is Reserved for Future Use |
| 245 | */ |
| 246 | |
| 247 | |
| 248 | /** \internal HCI Generic Responses from the Gates */ |
| 249 | #define ANY_OK 0x00U |
| 250 | #define ANY_E_NOT_CONNECTED 0x01U |
| 251 | #define ANY_E_CMD_PAR_UNKNOWN 0x02U |
| 252 | #define ANY_E_NOK 0x03U |
| 253 | #define ANY_E_PIPES_FULL 0x04U |
| 254 | #define ANY_E_REG_PAR_UNKNOWN 0x05U |
| 255 | #define ANY_E_PIPE_NOT_OPENED 0x06U |
| 256 | #define ANY_E_CMD_NOT_SUPPORTED 0x07U |
| 257 | #define ANY_E_INHIBITED 0x08U |
| 258 | #define ANY_E_TIMEOUT 0x09U |
| 259 | #define ANY_E_REG_ACCESS_DENIED 0x0AU |
| 260 | #define ANY_E_PIPE_ACCESS_DENIED 0x0BU |
| 261 | |
| 262 | /* Response Error Code for RF Reader Gate */ |
| 263 | #define WR_RF_ERROR 0x10U |
| 264 | |
| 265 | /* |
| 266 | * 0x08, 0x0B-0x3F is Reserved for Future Use |
| 267 | */ |
| 268 | |
| 269 | |
| 270 | /** \internal HCI Generic Events from the Gates */ |
| 271 | #define EVT_HCI_END_OF_OPERATION 0x01 |
| 272 | #define EVT_POST_DATA 0x02 |
| 273 | #define EVT_HOT_PLUG 0x03 |
| 274 | |
| 275 | |
| 276 | /* Maximum Buffer Size for the HCI Data */ |
| 277 | #define PHHCINFC_MAX_BUFFERSIZE (PHHAL_MAX_DATASIZE + 0x50U) |
| 278 | |
| 279 | #define PHHCINFC_MAX_OPENPIPE 0x6FU |
| 280 | #define PHHCINFC_MAX_PIPE 0x6FU |
| 281 | #define PHHCINFC_MIN_PIPE 0x02U |
| 282 | |
| 283 | |
| 284 | /* Maximum Payload Length of HCI. */ |
| 285 | #define PHHCINFC_MAX_PACKET_DATA 0x1CU |
| 286 | #define PHHCINFC_MAX_HCP_LEN PHHCINFC_MAX_PACKET_DATA + 1 |
| 287 | |
| 288 | |
| 289 | |
| 290 | /* Maximum Payload Length of HCI. */ |
| 291 | |
| 292 | |
| 293 | /* |
| 294 | ################################################################################ |
| 295 | ******************** Enumeration and Structure Definition ********************** |
| 296 | ################################################################################ |
| 297 | */ |
| 298 | #if 1 |
| 299 | typedef NFCSTATUS (*pphHciNfc_Pipe_Receive_t) ( |
| 300 | void *pContext, |
| 301 | void *pHwRef, |
| 302 | uint8_t *data, |
| 303 | #ifdef ONE_BYTE_LEN |
| 304 | uint8_t length |
| 305 | #else |
| 306 | uint16_t length |
| 307 | #endif |
| 308 | ); |
| 309 | #else |
| 310 | |
| 311 | typedef pphNfcIF_Transact_t pphHciNfc_Pipe_Receive_t; |
| 312 | |
| 313 | #endif |
| 314 | |
| 315 | /** \defgroup grp_hci_nfc HCI Component |
| 316 | * |
| 317 | * |
| 318 | */ |
| 319 | |
| 320 | typedef enum phHciNfc_HostID { |
| 321 | phHciNfc_HostControllerID = 0x00U, |
| 322 | phHciNfc_TerminalHostID = 0x01U, |
| 323 | phHciNfc_UICCHostID = 0x02U |
| 324 | /* |
| 325 | phHciNfc_HostID_RFU_B = 0x03U, |
| 326 | phHciNfc_HostID_RFU_E = 0xBFU, |
| 327 | phHciNfc_HostIDProprietary_B = 0xC0U, |
| 328 | phHciNfc_HostIDProprietary_E = 0xFFU |
| 329 | */ |
| 330 | }phHciNfc_HostID_t; |
| 331 | |
| 332 | |
| 333 | typedef enum phHciNfc_GateID{ |
| 334 | phHciNfc_AdminGate = 0x00U, |
| 335 | /* |
| 336 | phHciNfc_evGateIDProprietary_B = 0x01U, |
| 337 | phHciNfc_evGateIDProprietary_E = 0x03U, |
| 338 | */ |
| 339 | phHciNfc_LoopBackGate = 0x04U, |
| 340 | phHciNfc_IdentityMgmtGate = 0x05U, |
| 341 | phHciNfc_LinkMgmtGate = 0x06U, |
| 342 | /* |
| 343 | phHciNfc_GateID_RFU_B = 0x07U, |
| 344 | phHciNfc_GateID_RFU_E = 0x0FU, |
| 345 | */ |
| 346 | |
| 347 | /* TODO: Fillin Other Gate Information */ |
| 348 | /* ETSI HCI Specific RF Reader Gates */ |
| 349 | phHciNfc_RFReaderAGate = 0x13, |
| 350 | phHciNfc_RFReaderBGate = 0x11, |
| 351 | |
| 352 | /* Proprietary Reader Gate */ |
| 353 | phHciNfc_ISO15693Gate = 0x12, |
| 354 | phHciNfc_RFReaderFGate = 0x14, |
| 355 | phHciNfc_JewelReaderGate = 0x15, |
| 356 | |
| 357 | /* ETSI HCI Card RF Gates */ |
| 358 | phHciNfc_CETypeBGate = 0x21, |
| 359 | phHciNfc_CETypeBPrimeGate = 0x22, |
| 360 | phHciNfc_CETypeAGate = 0x23, |
| 361 | phHciNfc_CETypeFGate = 0x24, |
| 362 | |
| 363 | /* NFC-IP1 Gates */ |
| 364 | phHciNfc_NFCIP1InitRFGate = 0x30, |
| 365 | phHciNfc_NFCIP1TargetRFGate = 0x31, |
| 366 | |
| 367 | /* ETSI HCI Connectivity Gate */ |
| 368 | phHciNfc_ConnectivityGate = 0x41, |
| 369 | |
| 370 | |
| 371 | /* Device Configuration Gates */ |
| 372 | phHciNfc_PN544MgmtGate = 0x90, |
| 373 | phHciNfc_HostCommGate = 0x91, |
| 374 | phHciNfc_GPIOGate = 0x92, |
| 375 | phHciNfc_RFMgmtGate = 0x93, |
| 376 | phHciNfc_PollingLoopGate = 0x94, |
| 377 | phHciNfc_DownloadMgmtGate = 0x95, |
| 378 | |
| 379 | /* Card Emulation Managment Gates */ |
| 380 | phHciNfc_SwpMgmtGate = 0xA0, |
| 381 | phHciNfc_NfcWIMgmtGate = 0xA1, |
| 382 | phHciNfc_UnknownGate = 0xFF |
| 383 | |
| 384 | }phHciNfc_GateID_t; |
| 385 | |
| 386 | |
| 387 | typedef enum phHciNfc_PipeID{ |
| 388 | HCI_LINKMGMT_PIPE_ID = 0x00U, |
| 389 | HCI_ADMIN_PIPE_ID = 0x01U, |
| 390 | HCI_DYNAMIC_PIPE_ID = 0x02U, |
| 391 | HCI_RESERVED_PIPE_ID = 0x70U, |
| 392 | HCI_UNKNOWN_PIPE_ID = PHHCINFC_MAX_PIPE |
| 393 | /* |
| 394 | phHciNfc_evOtherGatePipeID_B = 0x02U, |
| 395 | phHciNfc_evOtherGatePipeID_E = 0x6FU, |
| 396 | phHciNfc_evGatePipeID_RFU_B = 0x70U, |
| 397 | phHciNfc_evGatePipeID_RFU_E = 0x7FU, |
| 398 | */ |
| 399 | }phHciNfc_PipeID_t; |
| 400 | |
| 401 | |
| 402 | typedef enum phHciNfc_eState { |
| 403 | hciState_Reset = 0x00U, |
| 404 | hciState_Initialise, |
| 405 | hciState_Test, |
| 406 | hciState_Config, |
| 407 | hciState_IO, |
| 408 | hciState_Select, |
| 409 | hciState_Listen, |
| 410 | hciState_Activate, |
| 411 | hciState_Reactivate, |
| 412 | hciState_Connect, |
| 413 | hciState_Transact, |
| 414 | hciState_Disconnect, |
| 415 | hciState_Presence, |
| 416 | hciState_Release, |
| 417 | hciState_Unknown |
| 418 | }phHciNfc_eState_t; |
| 419 | |
| 420 | typedef enum phHciNfc_eMode { |
| 421 | hciMode_Reset = 0x00U, |
| 422 | hciMode_Session, |
| 423 | hciMode_Override, |
| 424 | hciMode_Test, |
| 425 | hciMode_Unknown |
| 426 | }phHciNfc_eMode_t; |
| 427 | |
| 428 | |
| 429 | typedef enum phHciNfc_eSeq{ |
| 430 | /* HCI Admin Sequence */ |
| 431 | ADMIN_INIT_SEQ = 0x00U, |
| 432 | ADMIN_SESSION_SEQ, |
| 433 | ADMIN_CE_SEQ, |
| 434 | ADMIN_REL_SEQ, |
| 435 | ADMIN_EVT_HOTPLUG_SEQ, |
| 436 | |
| 437 | /* HCI Link Management Sequence */ |
| 438 | LINK_MGMT_INIT_SEQ, |
| 439 | LINK_MGMT_REL_SEQ, |
| 440 | |
| 441 | /* HCI Identity Management Sequence */ |
| 442 | IDENTITY_INIT_SEQ, |
| 443 | IDENTITY_INFO_SEQ, |
| 444 | IDENTITY_REL_SEQ, |
| 445 | |
| 446 | /* HCI Polling Loop Sequence */ |
| 447 | PL_INIT_SEQ, |
| 448 | PL_DURATION_SEQ, |
| 449 | PL_CONFIG_PHASE_SEQ, |
| 450 | PL_TGT_DISABLE_SEQ, |
| 451 | PL_RESTART_SEQ, |
| 452 | PL_STOP_SEQ, |
| 453 | PL_REL_SEQ, |
| 454 | |
| 455 | /* HCI Device Management Sequence */ |
| 456 | DEV_INIT_SEQ, |
Rob von Behren | 6dd9483 | 2011-09-16 15:05:25 -0700 | [diff] [blame] | 457 | DEV_HAL_INFO_SEQ, |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 458 | DEV_CONFIG_SEQ, |
| 459 | DEV_REL_SEQ, |
| 460 | |
| 461 | /* HCI Reader Management Sequence */ |
| 462 | READER_MGMT_INIT_SEQ, |
| 463 | READER_ENABLE_SEQ, |
| 464 | READER_SELECT_SEQ, |
| 465 | READER_REACTIVATE_SEQ, |
| 466 | READER_SW_AUTO_SEQ, |
| 467 | READER_PRESENCE_CHK_SEQ, |
| 468 | READER_UICC_DISPATCH_SEQ, |
| 469 | READER_DESELECT_SEQ, |
| 470 | READER_RESELECT_SEQ, |
| 471 | READER_DISABLE_SEQ, |
| 472 | READER_MGMT_REL_SEQ, |
| 473 | |
| 474 | /* HCI NFC-IP1 Sequence */ |
| 475 | NFCIP1_INIT_SEQ, |
| 476 | INITIATOR_SPEED_SEQ, |
| 477 | INITIATOR_GENERAL_SEQ, |
| 478 | TARGET_GENERAL_SEQ, |
| 479 | TARGET_SPEED_SEQ, |
| 480 | NFCIP1_REL_SEQ, |
| 481 | |
| 482 | /* HCI Emulation Management Sequence */ |
| 483 | EMULATION_INIT_SEQ, |
| 484 | EMULATION_SWP_SEQ, |
| 485 | EMULATION_CONFIG_SEQ, |
| 486 | EMULATION_REL_SEQ, |
| 487 | |
| 488 | HCI_END_SEQ, |
| 489 | HCI_INVALID_SEQ |
| 490 | } phHciNfc_eSeq_t; |
| 491 | |
| 492 | |
| 493 | |
| 494 | typedef enum phHciNfc_eSeqType{ |
| 495 | RESET_SEQ = 0x00U, |
| 496 | INIT_SEQ, |
| 497 | UPDATE_SEQ, |
| 498 | INFO_SEQ, |
| 499 | CONFIG_SEQ, |
| 500 | REL_SEQ, |
| 501 | END_SEQ |
| 502 | } phHciNfc_eSeqType_t; |
| 503 | |
| 504 | |
| 505 | typedef enum phHciNfc_eConfigType{ |
| 506 | INVALID_CFG = 0x00U, |
| 507 | POLL_LOOP_CFG, |
| 508 | SMX_WI_CFG, |
| 509 | SMX_WI_MODE, |
| 510 | UICC_SWP_CFG, |
| 511 | SWP_EVT_CFG, |
| 512 | SWP_PROTECT_CFG, |
| 513 | NFC_GENERAL_CFG, |
| 514 | NFC_TARGET_CFG, |
| 515 | NFC_CE_A_CFG, |
| 516 | NFC_CE_B_CFG |
| 517 | } phHciNfc_eConfigType_t; |
| 518 | |
| 519 | |
| 520 | typedef struct phHciNfc_HCP_Message{ |
| 521 | /** \internal Identifies the Type and Kind of Instruction */ |
| 522 | uint8_t msg_header; |
| 523 | /** \internal Host Controller Protocol (HCP) Packet Message Payload */ |
| 524 | uint8_t payload[PHHCINFC_MAX_PACKET_DATA - 1]; |
| 525 | }phHciNfc_HCP_Message_t; |
| 526 | |
| 527 | |
| 528 | typedef struct phHciNfc_HCP_Packet{ |
| 529 | /** \internal Chaining Information and Pipe Identifier */ |
| 530 | uint8_t hcp_header; |
| 531 | /** \internal Host Controller Protocol (HCP) Packet Message or Payload */ |
| 532 | union |
| 533 | { |
| 534 | /** \internal Host Controller Protocol (HCP) Packet Message */ |
| 535 | phHciNfc_HCP_Message_t message; |
| 536 | /** \internal Host Controller Protocol (HCP) Packet Payload */ |
| 537 | uint8_t payload[PHHCINFC_MAX_PACKET_DATA]; |
| 538 | }msg; |
| 539 | }phHciNfc_HCP_Packet_t; |
| 540 | |
| 541 | |
| 542 | |
| 543 | typedef struct phHciNfc_Gate_Info{ |
| 544 | /** \internal HCI Host Identifier */ |
| 545 | uint8_t host_id; |
| 546 | /** \internal HCI Gate Identifier */ |
| 547 | uint8_t gate_id; |
| 548 | }phHciNfc_Gate_Info_t; |
| 549 | |
| 550 | |
| 551 | typedef struct phHciNfc_Pipe_Params{ |
| 552 | /** \internal HCI Source Gate Information for the pipe */ |
| 553 | phHciNfc_Gate_Info_t source; |
| 554 | /** \internal HCI Destination Gate Information for the pipe */ |
| 555 | phHciNfc_Gate_Info_t dest; |
| 556 | /** \internal HCI Pipe Identifier */ |
| 557 | uint8_t pipe_id; |
| 558 | }phHciNfc_Pipe_Params_t; |
| 559 | |
| 560 | |
| 561 | typedef struct phHciNfc_Pipe_Info{ |
| 562 | /** \internal Structure containing the created dynamic pipe information */ |
| 563 | phHciNfc_Pipe_Params_t pipe; |
| 564 | /** \internal Status of the previous command sent to this pipe */ |
| 565 | NFCSTATUS prev_status; |
| 566 | /** \internal previous message type Sent to this pipe */ |
| 567 | uint8_t sent_msg_type; |
| 568 | /** \internal Message type Received in this pipe */ |
| 569 | uint8_t recv_msg_type; |
| 570 | /** \internal previous message sent to this pipe */ |
| 571 | uint8_t prev_msg; |
| 572 | /** \internal Index of the previous Set/Get Parameter command |
| 573 | * sent to this pipe */ |
| 574 | uint8_t reg_index; |
| 575 | /** \internal length of Parameter of the Set/Get Parameter |
| 576 | * command sent to this pipe */ |
| 577 | uint16_t param_length; |
| 578 | /** \internal Parameter of the Set/Get Parameter command |
| 579 | * sent to this pipe */ |
| 580 | void *param_info; |
| 581 | /** \internal Pointer to a Pipe specific Receive Response function */ |
| 582 | pphHciNfc_Pipe_Receive_t recv_resp; |
| 583 | /** \internal Pointer to a Pipe specific Receive Event function */ |
| 584 | pphHciNfc_Pipe_Receive_t recv_event; |
| 585 | /** \internal Pointer to a Pipe specific Receive Command function */ |
| 586 | pphHciNfc_Pipe_Receive_t recv_cmd; |
| 587 | }phHciNfc_Pipe_Info_t; |
| 588 | |
| 589 | |
| 590 | typedef struct phHciNfc_sContext{ |
| 591 | /** \internal HCI Layer Pointer from the upper layer for |
| 592 | lower layer function registration */ |
| 593 | phNfcLayer_sCfg_t *p_hci_layer; |
| 594 | /** \internal Pointer to the upper layer context */ |
| 595 | void *p_upper_context; |
| 596 | /** \internal Pointer to the Hardware Reference Sturcture */ |
| 597 | phHal_sHwReference_t *p_hw_ref; |
| 598 | /** \internal Pointer to the upper layer notification callback function */ |
| 599 | pphNfcIF_Notification_CB_t p_upper_notify; |
| 600 | /** \internal Structure to store the lower interface operations */ |
| 601 | phNfc_sLowerIF_t lower_interface; |
| 602 | /** \internal Execution Sequence using the HCI Context */ |
| 603 | volatile phHciNfc_eSeq_t hci_seq; |
| 604 | |
| 605 | /** \internal State of the HCI Context */ |
| 606 | volatile phNfc_sState_t hci_state; |
| 607 | |
| 608 | /** \internal Mode of HCI Initialisation */ |
| 609 | phHciNfc_Init_t init_mode; |
| 610 | |
Rob von Behren | 6dd9483 | 2011-09-16 15:05:25 -0700 | [diff] [blame] | 611 | /** \internal Memory Information for HCI Initialisation */ |
| 612 | uint8_t hal_mem_info[NXP_HAL_MEM_INFO_SIZE]; |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 613 | |
| 614 | /** \internal HCI Configuration Type */ |
| 615 | phHciNfc_eConfigType_t config_type; |
| 616 | /** \internal HCI SmartMX Mode Configuration */ |
| 617 | phHal_eSmartMX_Mode_t smx_mode; |
| 618 | /** \internal HCI Configuration Information */ |
| 619 | void *p_config_params; |
| 620 | |
| 621 | /** \internal Current RF Reader/Emulation Gate in Use */ |
| 622 | phHal_eRFDevType_t host_rf_type; |
| 623 | |
| 624 | /** \internal Connected Target Information */ |
| 625 | phHal_sRemoteDevInformation_t *p_target_info; |
| 626 | |
| 627 | /** \internal Information of all the pipes created and opened */ |
| 628 | phHciNfc_Pipe_Info_t *p_pipe_list[PHHCINFC_MAX_PIPE+1]; |
| 629 | |
| 630 | /** \internal Tag */ |
| 631 | phHciNfc_XchgInfo_t *p_xchg_info; |
| 632 | |
| 633 | /** \internal Information of the HCI Gates */ |
| 634 | /** \internal HCI Admin Management Gate Information */ |
| 635 | void *p_admin_info; |
| 636 | /** \internal HCI Link Management Gate Information */ |
| 637 | void *p_link_mgmt_info; |
| 638 | /** \internal HCI Identity Management Gate Information */ |
| 639 | void *p_identity_info; |
| 640 | /** \internal HCI Polling Loop Gate Information */ |
| 641 | void *p_poll_loop_info; |
| 642 | /** \internal HCI NFC Device Management Information */ |
| 643 | void *p_device_mgmt_info; |
| 644 | /** \internal HCI RF Reader Gates Management Information */ |
| 645 | void *p_reader_mgmt_info; |
| 646 | /** \internal HCI Card Application Gates and Emulation |
| 647 | Information */ |
| 648 | void *p_emulation_mgmt_info; |
| 649 | /** \internal HCI RF Reader A Gate Information */ |
| 650 | void *p_reader_a_info; |
| 651 | #ifdef TYPE_B |
| 652 | /** \internal HCI RF Reader B Gate Information */ |
| 653 | void *p_reader_b_info; |
| 654 | #endif |
| 655 | #ifdef TYPE_FELICA |
| 656 | /** \internal HCI Felica Reader Gate Information */ |
| 657 | void *p_felica_info; |
| 658 | #endif |
| 659 | #ifdef TYPE_JEWEL |
| 660 | /** \internal HCI Jewel Reader Gate Information */ |
| 661 | void *p_jewel_info; |
| 662 | #endif |
| 663 | #ifdef TYPE_ISO15693 |
| 664 | /** \internal HCI ISO15693 Reader Gate Information */ |
| 665 | void *p_iso_15693_info; |
| 666 | #endif |
| 667 | |
| 668 | #ifdef ENABLE_P2P |
| 669 | /** \internal HCI NFC-IP1 Peer to Peer Information */ |
| 670 | void *p_nfcip_info; |
| 671 | #endif |
| 672 | /** \internal HCI Secure Element Management Information */ |
| 673 | void *p_wi_info; |
| 674 | /** \internal HCI UICC Information */ |
| 675 | void *p_uicc_info; |
| 676 | /** \internal HCI SWP Information */ |
| 677 | void *p_swp_info; |
| 678 | #ifdef HOST_EMULATION |
| 679 | /** \internal HCI Card Emulation A Gate Information */ |
| 680 | void *p_ce_a_info; |
| 681 | /** \internal HCI Card Emulation B Gate Information */ |
| 682 | void *p_ce_b_info; |
| 683 | #endif |
| 684 | |
| 685 | /** \internal HCI Packet Data to be sent to the lower layer */ |
| 686 | phHciNfc_HCP_Packet_t tx_packet; |
| 687 | /** \internal HCI Packet Data to be received from the lower layer */ |
| 688 | phHciNfc_HCP_Packet_t rx_packet; |
| 689 | |
| 690 | /** \internal Previous Status (To Store the Error Status ) */ |
| 691 | NFCSTATUS error_status; |
| 692 | |
| 693 | /** \internal Pointer to HCI Send Buffer */ |
| 694 | uint8_t send_buffer[PHHCINFC_MAX_BUFFERSIZE]; |
| 695 | /** \internal Pointer to HCI Receive Buffer */ |
| 696 | uint8_t recv_buffer[PHHCINFC_MAX_BUFFERSIZE]; |
| 697 | |
| 698 | /** \internal Total Number of bytes to be Sent */ |
| 699 | volatile uint16_t tx_total; |
| 700 | /** \internal Number of bytes Remaining to be Sent */ |
| 701 | volatile uint16_t tx_remain; |
| 702 | /** \internal Number of bytes sent */ |
| 703 | volatile uint16_t tx_sent; |
| 704 | |
| 705 | volatile uint16_t rx_index; |
| 706 | |
| 707 | /** \internal Total Number of bytes received */ |
| 708 | volatile uint16_t rx_total; |
| 709 | /** \internal Number of bytes received */ |
| 710 | volatile uint16_t rx_recvd; |
| 711 | /** \internal Index of the received data in the |
| 712 | * response packet |
| 713 | */ |
| 714 | |
| 715 | /** \internal Send HCP Chaining Information */ |
| 716 | volatile uint8_t tx_hcp_chaining; |
| 717 | /** \internal Send HCP Fragment Index */ |
| 718 | volatile uint16_t tx_hcp_frgmnt_index; |
| 719 | |
| 720 | /** \internal Receive HCP Chaining Information */ |
| 721 | volatile uint8_t rx_hcp_chaining; |
| 722 | /** \internal Receive HCP Fragment Index */ |
| 723 | volatile uint16_t rx_hcp_frgmnt_index; |
| 724 | |
| 725 | /** \internal The Device under Test */ |
| 726 | volatile uint8_t hci_mode; |
| 727 | /** \internal Wait for Response if Response is Pending */ |
| 728 | volatile uint8_t response_pending; |
| 729 | /** \internal Notify the Event if Notifcation is Pending */ |
| 730 | volatile uint8_t event_pending; |
| 731 | |
| 732 | /** \internal Pending Release of the detected Target */ |
| 733 | uint8_t target_release; |
| 734 | |
| 735 | }phHciNfc_sContext_t; |
| 736 | |
| 737 | /* |
| 738 | ################################################################################ |
| 739 | *********************** Function Prototype Declaration ************************* |
| 740 | ################################################################################ |
| 741 | */ |
| 742 | |
| 743 | |
| 744 | /** |
| 745 | * |
| 746 | * \ingroup grp_hci_nfc |
| 747 | * |
| 748 | * The phHciNfc_Receive function receives the HCI Events or Response from the |
| 749 | * corresponding peripheral device, described by the HCI Context Structure. |
| 750 | * |
| 751 | * \param[in] psContext psContext is the context of |
| 752 | * the HCI Layer. |
| 753 | * \param[in] pHwRef pHwRef is the Information of |
| 754 | * the Device Interface Link . |
| 755 | * \param[out] pdata Pointer to the response buffer that |
| 756 | * receives the response read. |
| 757 | * \param[in] length Variable that receives |
| 758 | * the number of bytes read. |
| 759 | * |
| 760 | * \retval NFCSTATUS_PENDING Data successfully read. |
| 761 | * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters |
| 762 | * could not be interpreted properly. |
| 763 | * \retval Other errors Other related errors |
| 764 | * |
| 765 | */ |
| 766 | |
| 767 | extern |
| 768 | NFCSTATUS |
| 769 | phHciNfc_Receive( |
| 770 | void *psContext, |
| 771 | void *pHwRef, |
| 772 | uint8_t *pdata, |
| 773 | #ifdef ONE_BYTE_LEN |
| 774 | uint8_t length |
| 775 | #else |
| 776 | uint16_t length |
| 777 | #endif |
| 778 | ); |
| 779 | |
| 780 | /** |
| 781 | * \ingroup grp_hci_nfc |
| 782 | * |
| 783 | * The phHciNfc_Send_Complete function acknowledges the completion of the HCI |
| 784 | * Commands sent to the device. |
| 785 | * |
| 786 | * \param[in] psContext psContext is the context of |
| 787 | * the HCI Layer. |
| 788 | * \param[in] pHwRef pHwRef is the Information of |
| 789 | * the Device Interface Link . |
| 790 | * \param[in] pInfo Transaction information like |
| 791 | * status and length after the |
| 792 | * completion of the send. |
| 793 | * |
| 794 | * \retval NONE. |
| 795 | * |
| 796 | */ |
| 797 | |
| 798 | extern |
| 799 | void |
| 800 | phHciNfc_Send_Complete ( |
| 801 | void *psContext, |
| 802 | void *pHwRef, |
| 803 | phNfc_sTransactionInfo_t *pInfo |
| 804 | ); |
| 805 | |
| 806 | /** |
| 807 | * \ingroup grp_hci_nfc |
| 808 | * |
| 809 | * The phHciNfc_Receive_Complete function acknowledges the completion of the HCI |
| 810 | * Event Information or Response received from the device. |
| 811 | * |
| 812 | * \param[in] psContext psContext is the context of |
| 813 | * the HCI Layer. |
| 814 | * \param[in] pHwRef pHwRef is the Information of |
| 815 | * the Device Interface Link . |
| 816 | * \param[in] pInfo Transaction information like status |
| 817 | * data and length after the completely |
| 818 | * receiving the response . |
| 819 | * \retval NONE. |
| 820 | * |
| 821 | * |
| 822 | */ |
| 823 | |
| 824 | extern |
| 825 | void |
| 826 | phHciNfc_Receive_Complete ( |
| 827 | void *psContext, |
| 828 | void *pHwRef, |
| 829 | phNfc_sTransactionInfo_t *pInfo |
| 830 | ); |
| 831 | |
| 832 | /** |
| 833 | * \ingroup grp_hci_nfc |
| 834 | * |
| 835 | * The phHciNfc_Notify_Event function notifies the occurence of the HCI |
| 836 | * Event from the device. |
| 837 | * |
| 838 | * \param[in] psContext psContext is the context of |
| 839 | * the HCI Layer. |
| 840 | * \param[in] pHwRef pHwRef is the Information of |
| 841 | * the Device Interface Link . |
| 842 | * \param[in] type reason returned for the notification to |
| 843 | * the HCI. |
| 844 | * \param[in] pInfo Notification information like status |
| 845 | * data,length etc from the lower layer |
| 846 | * to the HCI Layer. |
| 847 | * \retval NONE. |
| 848 | * |
| 849 | */ |
| 850 | |
| 851 | extern |
| 852 | void |
| 853 | phHciNfc_Notify_Event( |
| 854 | void *psContext, |
| 855 | void *pHwRef, |
| 856 | uint8_t type, |
| 857 | void *pInfo |
| 858 | ); |
| 859 | |
| 860 | /** |
| 861 | * \ingroup grp_hci_nfc |
| 862 | * |
| 863 | * The phHciNfc_Tag_Notify function notifies the the upper layer |
| 864 | * with the Tag Specific Notifications . |
| 865 | * |
| 866 | * \param[in] psContext psContext is the context of |
| 867 | * the HCI Layer. |
| 868 | * \param[in] pHwRef pHwRef is the Information of |
| 869 | * the Device Interface Link . |
| 870 | * \param[in] type reason returned for the notification to |
| 871 | * the HCI. |
| 872 | * \param[in] pInfo Notification information like status |
| 873 | * data,length etc from the lower layer |
| 874 | * to the HCI Layer. |
| 875 | * \retval NONE. |
| 876 | * |
| 877 | */ |
| 878 | extern |
| 879 | void |
| 880 | phHciNfc_Tag_Notify( |
| 881 | phHciNfc_sContext_t *psHciContext, |
| 882 | void *pHwRef, |
| 883 | uint8_t type, |
| 884 | void *pInfo |
| 885 | ); |
| 886 | |
| 887 | /** |
| 888 | * \ingroup grp_hci_nfc |
| 889 | * |
| 890 | * The phHciNfc_Tag_Notify function notifies the the upper layer |
| 891 | * with the Tag Specific Notifications . |
| 892 | * |
| 893 | * \param[in] psContext psContext is the context of |
| 894 | * the HCI Layer. |
| 895 | * \param[in] pHwRef pHwRef is the Information of |
| 896 | * the Device Interface Link . |
| 897 | * \param[in] type reason returned for the notification to |
| 898 | * the HCI. |
| 899 | * \param[in] pInfo Notification information like status |
| 900 | * data,length etc from the lower layer |
| 901 | * to the HCI Layer. |
| 902 | * \retval NONE. |
| 903 | * |
| 904 | */ |
| 905 | |
| 906 | extern |
| 907 | void |
| 908 | phHciNfc_Target_Select_Notify( |
| 909 | phHciNfc_sContext_t *psHciContext, |
| 910 | void *pHwRef, |
| 911 | uint8_t type, |
| 912 | void *pInfo |
| 913 | ); |
| 914 | |
| 915 | |
| 916 | /** |
| 917 | * \ingroup grp_hci_nfc |
| 918 | * |
| 919 | * The phHciNfc_Transceive_Notify function notifies the the upper layer |
| 920 | * with the after the transceive operation. |
| 921 | * |
| 922 | * \param[in] psContext psContext is the context of |
| 923 | * the HCI Layer. |
| 924 | * \param[in] pHwRef pHwRef is the Information of |
| 925 | * the Device Interface Link . |
| 926 | * \param[in] type reason returned for the notification to |
| 927 | * the HCI. |
| 928 | * \param[in] pInfo Notification information like status |
| 929 | * data,length etc from the lower layer |
| 930 | * to the HCI Layer. |
| 931 | * \retval NONE. |
| 932 | * |
| 933 | */ |
| 934 | extern |
| 935 | void |
| 936 | phHciNfc_Transceive_Notify( |
| 937 | phHciNfc_sContext_t *psHciContext, |
| 938 | void *pHwRef, |
| 939 | uint8_t type, |
| 940 | void *pInfo |
| 941 | ); |
| 942 | |
| 943 | /** |
| 944 | * \ingroup grp_hci_nfc |
| 945 | * |
| 946 | * The phHciNfc_Notify function calls the upper layer notification callback. |
| 947 | * |
| 948 | * \param[in] pUpperNotify pUpperNotify is the notification |
| 949 | * callback of the upper HAL Layer. |
| 950 | * \param[in] pUpperContext pUpperContext is the context of |
| 951 | * the upper HAL Layer. |
| 952 | * \param[in] pHwRef pHwRef is the Information of |
| 953 | * the Device Interface Link . |
| 954 | * \param[in] type type of the notification to |
| 955 | * the upper HAL layer. |
| 956 | * \param[in] pInfo completion information returned |
| 957 | * to the Upper HAL Layer. |
| 958 | * NFCSTATUS_SUCCESS Notification successfully completed . |
| 959 | * NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters |
| 960 | * could not be interpreted properly. |
| 961 | * Other errors Errors related to the HCI or lower layers |
| 962 | * |
| 963 | * \retval NONE. |
| 964 | * |
| 965 | */ |
| 966 | |
| 967 | extern |
| 968 | void |
| 969 | phHciNfc_Notify( |
| 970 | pphNfcIF_Notification_CB_t p_upper_notify, |
| 971 | void *p_upper_context, |
| 972 | void *pHwRef, |
| 973 | uint8_t type, |
| 974 | void *pInfo |
| 975 | ); |
| 976 | |
| 977 | /** |
| 978 | * \ingroup grp_hci_nfc |
| 979 | * |
| 980 | * The phHciNfc_Release_Notify function Releases HCI and notifies |
| 981 | * the upper layer. |
| 982 | * |
| 983 | * \param[in] psHciContext psHciContext is the context of |
| 984 | * the HCI Layer. |
| 985 | * \param[in] pHwRef pHwRef is the Information of |
| 986 | * the Device Interface Link . |
| 987 | * \param[in] type reason returned for the notification to |
| 988 | * the HCI. |
| 989 | * \param[in] pInfo Notification information like status |
| 990 | * data,length etc from the lower layer |
| 991 | * to the HCI Layer. |
| 992 | * \retval NONE. |
| 993 | * |
| 994 | */ |
| 995 | extern |
| 996 | void |
| 997 | phHciNfc_Release_Notify( |
| 998 | phHciNfc_sContext_t *psHciContext, |
| 999 | void *pHwRef, |
| 1000 | uint8_t type, |
| 1001 | void *pInfo |
| 1002 | ); |
| 1003 | |
| 1004 | |
| 1005 | |
| 1006 | /** |
| 1007 | * \ingroup grp_hci_nfc |
| 1008 | * |
| 1009 | * The phHciNfc_Send_Generic_Cmd function sends the HCI Generic Commands |
| 1010 | * to the device. |
| 1011 | * |
| 1012 | * \param[in] psHciContext psHciContext is the context of |
| 1013 | * the HCI Layer. |
| 1014 | * \param[in] pHwRef pHwRef is the Information of |
| 1015 | * the Device Interface Link . |
| 1016 | * \param[in] pipe_id The pipe to which the command |
| 1017 | * is being sent. |
| 1018 | * \param[in] cmd The HCI Generic command sent to a |
| 1019 | * particular pipe . |
| 1020 | * |
| 1021 | * \retval NFCSTATUS_PENDING HCI Generic Command send in progress . |
| 1022 | * \retval |
| 1023 | * NFCSTATUS_INSUFFICIENT_RESOURCES The memory could not be allocated |
| 1024 | * as required amount of memory |
| 1025 | * is not sufficient. |
| 1026 | * |
| 1027 | */ |
| 1028 | |
| 1029 | extern |
| 1030 | NFCSTATUS |
| 1031 | phHciNfc_Send_Generic_Cmd ( |
| 1032 | phHciNfc_sContext_t *psHciContext, |
| 1033 | void *pHwRef, |
| 1034 | uint8_t pipe_id, |
| 1035 | uint8_t cmd |
| 1036 | ); |
| 1037 | |
| 1038 | /** |
| 1039 | * \ingroup grp_hci_nfc |
| 1040 | * |
| 1041 | * The phHciNfc_Set_Param function configures the Gate specific register |
| 1042 | * with the provided value. |
| 1043 | * |
| 1044 | * \param[in] psHciContext psHciContext is the context of |
| 1045 | * the HCI Layer. |
| 1046 | * \param[in] pHwRef pHwRef is the Information of |
| 1047 | * the Device Interface Link . |
| 1048 | * \param[in] p_pipe_info Pointer to pipe specific information. |
| 1049 | * \param[in] reg_index Index of the register to be |
| 1050 | * configured . |
| 1051 | * \param[in] p_param Value to the configured in |
| 1052 | * particular register. |
| 1053 | * \param[in] param_length Length of the parameter provided |
| 1054 | * for the configuration. |
| 1055 | * |
| 1056 | * \retval NFCSTATUS_PENDING HCI Set parameter in progress . |
| 1057 | * \retval |
| 1058 | * NFCSTATUS_INVALID_HCI_INFORMATION The Information like p_pipe_info, |
| 1059 | * p_param or param_length is invalid |
| 1060 | * |
| 1061 | */ |
| 1062 | |
| 1063 | extern |
| 1064 | NFCSTATUS |
| 1065 | phHciNfc_Set_Param ( |
| 1066 | phHciNfc_sContext_t *psHciContext, |
| 1067 | void *pHwRef, |
| 1068 | phHciNfc_Pipe_Info_t *p_pipe_info, |
| 1069 | uint8_t reg_index, |
| 1070 | void *p_param, |
| 1071 | uint16_t param_length |
| 1072 | ); |
| 1073 | |
| 1074 | /** |
| 1075 | * \ingroup grp_hci_nfc |
| 1076 | * |
| 1077 | * The phHciNfc_Send_HCP function sends the HCI Host Control Packet |
| 1078 | * Frames to the device. |
| 1079 | * |
| 1080 | * \param[in] psHciContext psHciContext is the context of |
| 1081 | * the HCI Layer. |
| 1082 | * \param[in] pHwRef pHwRef is the Information of |
| 1083 | * the Device Interface Link . |
| 1084 | * |
| 1085 | * \retval NFCSTATUS_PENDING HCP Frame send pending. |
| 1086 | * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters |
| 1087 | * could not be interpreted properly. |
| 1088 | * \retval Other errors Other related errors |
| 1089 | * |
| 1090 | * |
| 1091 | */ |
| 1092 | |
| 1093 | extern |
| 1094 | NFCSTATUS |
| 1095 | phHciNfc_Send_HCP ( |
| 1096 | phHciNfc_sContext_t *psHciContext, |
| 1097 | void *pHwRef |
| 1098 | ); |
| 1099 | |
| 1100 | |
| 1101 | /** |
| 1102 | * \ingroup grp_hci_nfc |
| 1103 | * |
| 1104 | * The phHciNfc_Build_HCPFrame function initially builds the HCP Packet Frame |
| 1105 | * with the values passed in the arguments . |
| 1106 | * |
| 1107 | * \param[in] hcp_packet hcp_packet is the frame packet structure |
| 1108 | * in which the frame is populated with the |
| 1109 | * appropriate fields. |
| 1110 | * \param[in] chainbit chainbit specifies whether the following |
| 1111 | * HCP frames are chained or the frame is a |
| 1112 | * normal frame. |
| 1113 | * \param[in] pipe_id pipe_id of the pipe to which the frame has |
| 1114 | * to be sent. |
| 1115 | * \param[in] msg_type type of message sent to the pipe. |
| 1116 | * \param[in] instruction type of message instruction send to the pipe. |
| 1117 | * |
| 1118 | * \retval NONE. |
| 1119 | * |
| 1120 | */ |
| 1121 | |
| 1122 | |
| 1123 | extern |
| 1124 | void |
| 1125 | phHciNfc_Build_HCPFrame ( |
| 1126 | phHciNfc_HCP_Packet_t *hcp_packet, |
| 1127 | uint8_t chainbit, |
| 1128 | uint8_t pipe_id, |
| 1129 | uint8_t msg_type, |
| 1130 | uint8_t instruction |
| 1131 | ); |
| 1132 | |
| 1133 | /** |
| 1134 | * \ingroup grp_hci_nfc |
| 1135 | * |
| 1136 | * The phHciNfc_Append_HCPFrame function Appends the HCP Packet Frame |
| 1137 | * with the values passed in the arguments . |
| 1138 | * |
| 1139 | * \param[in] hcp_data hcp_data is the pointer to the HCP |
| 1140 | * payload to which the data is to be |
| 1141 | * appended. |
| 1142 | * \param[in] hcp_index hcp_index is the index from which |
| 1143 | * the data source needs to be appended. |
| 1144 | * \param[in] src_data src_data that is to be appended to the |
| 1145 | * HCP packet. |
| 1146 | * \param[in] src_len The length of the data source that is |
| 1147 | * to be appended. |
| 1148 | * \retval NONE. |
| 1149 | * |
| 1150 | */ |
| 1151 | |
| 1152 | extern |
| 1153 | void |
| 1154 | phHciNfc_Append_HCPFrame ( |
| 1155 | uint8_t *hcp_data, |
| 1156 | uint16_t hcp_index, |
| 1157 | uint8_t *src_data, |
| 1158 | uint16_t src_len |
| 1159 | ); |
| 1160 | |
| 1161 | /** |
| 1162 | * \ingroup grp_hci_nfc |
| 1163 | * |
| 1164 | * The phHciNfc_Allocate_Resource function allocates and initialises the |
| 1165 | * resource memory for the HCI layer. |
| 1166 | * |
| 1167 | * \param[in] ppBuffer ppBuffer is the pointer to which the |
| 1168 | * resource memory is allocated. |
| 1169 | * \param[in] size Variable that specifies the size of |
| 1170 | * the memory that needs to be created. |
| 1171 | * |
| 1172 | * \retval NFCSTATUS_SUCCESS The Resource Memory was allocated |
| 1173 | * successfully . |
| 1174 | * \retval |
| 1175 | * NFCSTATUS_INSUFFICIENT_RESOURCES The memory could not be allocated |
| 1176 | * as required amount of memory |
| 1177 | * is not suffient. |
| 1178 | * |
| 1179 | */ |
| 1180 | |
| 1181 | extern |
| 1182 | NFCSTATUS |
| 1183 | phHciNfc_Allocate_Resource ( |
| 1184 | void **ppBuffer, |
| 1185 | uint16_t size |
| 1186 | ); |
| 1187 | /** |
| 1188 | * \ingroup grp_hci_nfc |
| 1189 | * |
| 1190 | * The phHciNfc_Release_Resources function releases all the resources |
| 1191 | * allocated in the HCI Layer. |
| 1192 | * |
| 1193 | * \param[in] psHciContext psHciContext is the context of |
| 1194 | * the HCI Layer. |
| 1195 | * |
| 1196 | * \retval NONE. |
| 1197 | * |
| 1198 | */ |
| 1199 | |
| 1200 | extern |
| 1201 | void |
| 1202 | phHciNfc_Release_Resources ( |
| 1203 | phHciNfc_sContext_t **ppsHciContext |
| 1204 | ); |
| 1205 | |
| 1206 | /** |
| 1207 | * \ingroup grp_hci_nfc |
| 1208 | * |
| 1209 | * The phHciNfc_Release_Lower function initiates the release of the |
| 1210 | * lower layers. |
| 1211 | * |
| 1212 | * \param[in] psHciContext psHciContext is the context of |
| 1213 | * the HCI Layer. |
| 1214 | * \param[in] pHwRef pHwRef is the Information of |
| 1215 | * the Device Interface Link . |
| 1216 | * |
| 1217 | * \retval NONE. |
| 1218 | * |
| 1219 | */ |
| 1220 | |
| 1221 | extern |
| 1222 | void |
| 1223 | phHciNfc_Release_Lower( |
| 1224 | phHciNfc_sContext_t *psHciContext, |
| 1225 | void *pHwRef |
| 1226 | ); |
| 1227 | |
| 1228 | |
| 1229 | |
| 1230 | #endif |
| 1231 | |