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* \file phNfcInterface.h 21* \brief Generic Interface Layer Function Definitions. 22* 23* Project: NFC-FRI-1.1 24* 25* $Date: Thu Feb 11 19:01:36 2010 $ 26* $Author: ing04880 $ 27* $Revision: 1.42 $ 28* $Aliases: NFC_FRI1.1_WK1007_R33_1,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 $ 29* 30* ============================================================================= 31*/ 32 33#ifndef PHNFCINTERFACE_H /* */ 34#define PHNFCINTERFACE_H /* */ 35 36/** 37* \name NFC Inteface 38* 39* File: \ref phNfcInterface.h 40* 41*/ 42 43/*@{*/ 44#define PHNFCINTERFACE_FILEREVISION "$Revision: 1.42 $" /**< \ingroup grp_file_attributes */ 45#define PHNFCINTERFACE_FILEALIASES "$Aliases: NFC_FRI1.1_WK1007_R33_1,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 */ 46/*@}*/ 47 48/* 49################################################################################ 50***************************** Header File Inclusion **************************** 51################################################################################ 52*/ 53 54#include <phNfcTypes.h> 55#include <phNfcHalTypes.h> 56 57 58/* 59################################################################################ 60****************************** Macro Definitions ******************************* 61################################################################################ 62*/ 63 64#define NFC_FSM_IN_PROGRESS 0x01U 65#define NFC_FSM_COMPLETE 0x00U 66 67#define NFC_FSM_CURRENT 0x00U 68#define NFC_FSM_NEXT 0x01U 69 70/* NFC Notification Types */ 71 72#define NFC_NOTIFY_INIT_COMPLETED 0x01 73#define NFC_NOTIFY_INIT_FAILED 0xF1 74 75#define NFC_NOTIFY_DEINIT_COMPLETED 0x02 76#define NFC_NOTIFY_DEINIT_FAILED 0xF2 77 78#define NFC_NOTIFY_EVENT 0x70 79 80#define NFC_NOTIFY_DEVICE_ACTIVATED 0x82 81#define NFC_NOTIFY_DEVICE_DEACTIVATED 0x83 82 83#define NFC_NOTIFY_SEND_COMPLETED 0x03 84#define NFC_NOTIFY_SEND_ERROR 0xF3 85 86#define NFC_NOTIFY_RECV_COMPLETED 0x04 87#define NFC_NOTIFY_RECV_ERROR 0xF4 88#define NFC_NOTIFY_RECV_EVENT 0x74 89#define NFC_NOTIFY_RECV_CANCELLED 0x34 90 91#define NFC_NOTIFY_TRANSCEIVE_COMPLETED 0x05 92#define NFC_NOTIFY_TRANSCEIVE_ERROR 0xF5 93 94#define NFC_NOTIFY_POLL_ENABLED 0x06 95#define NFC_NOTIFY_POLL_RESTARTED 0x16 96#define NFC_NOTIFY_POLL_DISABLED 0x26 97#define NFC_NOTIFY_CONFIG_SUCCESS 0x36 98#define NFC_NOTIFY_CONFIG_ERROR 0xF6 99 100#define NFC_NOTIFY_TARGET_DISCOVERED 0x10 101#define NFC_NOTIFY_DISCOVERY_ERROR 0xFA 102#define NFC_NOTIFY_TARGET_RELEASED 0x11 103#define NFC_NOTIFY_TARGET_CONNECTED 0x12 104#define NFC_NOTIFY_TARGET_PRESENT 0x13 105#define NFC_NOTIFY_TARGET_REACTIVATED 0x14 106#define NFC_NOTIFY_CONNECT_FAILED 0xFC 107#define NFC_NOTIFY_TARGET_DISCONNECTED 0x15 108#define NFC_NOTIFY_DISCONNECT_FAILED 0xFD 109 110#define NFC_NOTIFY_TRANSACTION 0x07 111 112#define NFC_NOTIFY_RESULT 0x08 113 114#define NFC_NOTIFY_DEVICE_ERROR 0xFEU 115#define NFC_NOTIFY_ERROR 0xFFU 116 117 118#define BYTE_SIZE 0x08U 119#define BYTE_MASK 0xFFU 120/* HCI GET and SET BITS Macros */ 121#define MASK_BITS8(p,l) \ 122 ( ( (((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE )? \ 123 (~(0xFFU<<((p)+(l))) & (0xFFU<<(p))):(0U) ) 124#ifdef MASK_BITS 125#define GET_BITS8(num,p,l) \ 126 ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \ 127 (((num)& (MASK_BITS8(p,l)))>>(p)):(0U) ) 128#else 129#define GET_BITS8(num,p,l) \ 130 ( ((((p)+(l))<=BYTE_SIZE))? \ 131 (((num)>>(p))& (~(0xFFU<<(l)))):(0U) ) 132#endif 133#define SET_BITS8(num,p,l,val) \ 134 ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \ 135 (((num)& (~MASK_BITS8(p,l)))|((val)<<(p))):(0U)) 136 137/* 138################################################################################ 139******************** Enumeration and Structure Definition ********************** 140################################################################################ 141*/ 142 143 144enum phNfcIF_eExecution{ 145 NFC_EXEC_NORMAL = 0x00, /**< Normal Execution Sequence */ 146 NFC_EXEC_CALLBACK = 0x01, /**< Callback Execution Sequence */ 147 NFC_EXEC_UNKNOWN = 0xFF /**< Callback Execution Sequence */ 148}; 149 150 151typedef enum phNfc_eModeType{ 152 MODE_ON = 0x00U, /**< Switches the particular feature ON*/ 153 MODE_OFF /**< Switches the particular feature OFF*/ 154}phNfc_eModeType_t; 155 156/** 157 * State Structure to hold the State Information 158 * 159 * This structure holds the state Information of a specified 160 * Layer . 161 * 162 */ 163 164typedef struct phNfc_sState 165{ 166 uint8_t cur_state; 167 uint8_t transition; 168 uint8_t next_state; 169 /* uint8_t event; */ 170 171}phNfc_sState_t; 172 173 174 175/** 176 * Transaction Completion Information Structure 177 * 178 * This structure holds the completion callback information of the 179 * transaction passed from the lower layer to the upper layer 180 * along with the completion callback. 181 */ 182 183typedef struct phNfc_sTransactionInfo 184{ 185 /* Returns the status of the Transaction Completion routine */ 186 NFCSTATUS status; 187 /* Indicates the Type of the Transaction */ 188 uint8_t type; 189 /* To contain more Transaction Notification specific info */ 190 void *info; 191 /* The data response from the Transaction */ 192 uint8_t *buffer; 193 /* The size of the data response from the Transaction */ 194 uint16_t length; 195}phNfc_sTransactionInfo_t; 196 197/** 198 * Notification Information Structure 199 * 200 * This structure holds the notification callback information passed from 201 * the lower layer to the upper layer along with the notification callback. 202 */ 203 204typedef struct phNfc_sCompletionInfo 205{ 206 /* Returns the status of the completion routine */ 207 NFCSTATUS status; 208 209 /* Indicates the Type of the Information 210 * associated with the completion 211 */ 212 uint8_t type; 213 214 /* To contain more completion specific info */ 215 void *info; 216 217}phNfc_sCompletionInfo_t; 218 219 220/** 221 * Notification Information 222 * 223 */ 224typedef struct phNfc_sNotificationInfo 225{ 226 /* Returns the status of the Notification routine */ 227 NFCSTATUS status; 228 /* Indicates the Type of the Notification */ 229 phHal_eNotificationType_t type; 230 /* To contain more Notification specific info */ 231 void *info; 232 233}phNfc_sNotificationInfo_t; 234 235 236/* 237################################################################################ 238********************* Callback Function Type Definition ************************ 239################################################################################ 240*/ 241 242/** 243* Interface Notification Callback 244* 245* This callback notifies the occurrance of an event in the Lower Interface. 246* 247* \param [in] pContext Context for the Callback Function 248* \param [in] pHwRef Pointer to the Hardware Reference 249* \param [in] type Type of the Notification sent 250* \param [out] pInfo Pointer to the Transaction Information Structure 251* which contains the Status of the operation, data 252* obtained or sent and size of the data sent or received 253*/ 254 255typedef void (*pphNfcIF_Notification_CB_t) ( 256 void *pContext, 257 void *pHwRef, 258 uint8_t type, 259 void *pInfo 260 ); 261 262/** 263* asynchronous Interface Transaction Completion callback 264* 265* This callback signals the completion of the asynchronous send or receive 266* operation. The number of bytes sent or recieved is returned back. 267* 268* \param [in] pContext Context for the Callback Function 269* \param [in] pHwRef Pointer to the Hardware Reference 270* \param [out] pInfo Pointer to the Transaction Information Structure 271* which contains the Status of the operation, data 272* obtained or sent and size of the data sent or received 273*/ 274 275typedef void (*pphNfcIF_Transact_Completion_CB_t) ( 276 void *pContext, 277 void *pHwRef, 278 phNfc_sTransactionInfo_t *pInfo 279 ); 280 281/* 282################################################################################ 283********************** Generic Interface Function Prototype ******************** 284################################################################################ 285*/ 286 287/** 288 * Generic NFC Interface Function Type . 289 * 290 * \param [in] pContext Context pointer for the Generic Interface. 291 * \param [in] pHwRef pointer for the device interface link information. 292 */ 293 294typedef NFCSTATUS (*pphNfcIF_Interface_t) ( 295 void *pContext, 296 void *pHwRef 297 ); 298/** 299 * Data Transaction between the lower layer interface 300 * 301 * Sends or Receives the given amount of data to the lower layer. 302 * The call returns immediately and the registered callback is 303 * called when all data has been written. 304 * <p> 305 * 306 * @note If the interface is not initialized the function does nothing. 307 * 308 * \param [in] pContext Context pointer for sending the data. 309 * \param [in] pHwRef pointer for the device interface link information. 310 * \param[in] data pointer to data buffer containing the data to be sent or 311 * to be received. The data pointer is valid at least until 312 * the registered callback is called. 313 * \param[in] length length of the data to be sent or to be received. 314 */ 315 316typedef NFCSTATUS (*pphNfcIF_Transact_t) ( 317 void *pContext, 318 void *pHwRef, 319 uint8_t *data, 320 uint16_t length 321 ); 322 323 324/** 325 * Generic Interface structure with the Lower Layer 326 * 327 * This structure holds the context and function pointers of all functions 328 * required to interface with the Lower Layers. 329 */ 330 331typedef struct phNfc_sLowerIF 332{ 333 void *pcontext; 334 pphNfcIF_Interface_t init; 335 pphNfcIF_Interface_t release; 336 pphNfcIF_Transact_t send; 337 pphNfcIF_Transact_t receive; 338 pphNfcIF_Transact_t receive_wait; 339 pphNfcIF_Interface_t transact_abort; 340 pphNfcIF_Interface_t unregister; 341} phNfc_sLowerIF_t,*pphNfc_sLowerIF_t; 342 343 344/** 345 * Generic Callback interface structure for the Lower layer. 346 * 347 * This structure holds the callback function pointers of the functions that 348 * performs the completion of a particular operation. These functions are used 349 * by the Lower Layer interface to convey the completion of an operation. 350 */ 351 352typedef struct phNfcIF_sCallBack 353{ 354 /**<Holds context info to be sent to lower layer*/ 355 void *pif_ctxt; 356 /**<Callback notifies occurrance of event in Lower Interface*/ 357 pphNfcIF_Notification_CB_t notify; 358 /**<asynchronous Interface Transaction Completion callback*/ 359 pphNfcIF_Transact_Completion_CB_t send_complete; 360 pphNfcIF_Transact_Completion_CB_t receive_complete; 361 362} phNfcIF_sCallBack_t ,*pphNfcIF_sCallBack_t ; 363 364 365/** 366 * Interface Reference structure. 367 * 368 * This structure holds the reference parameters, callback function pointers and 369 * lower interface functions . 370 */ 371 372typedef struct phNfcIF_sReference 373{ 374 /**<Generic Interface structure with the Lower Layer*/ 375 phNfc_sLowerIF_t *plower_if; 376 /**<pointer to the data to be sent*/ 377 uint8_t *tx_data; 378 /**<pointer to the data to be received*/ 379 uint8_t *rx_data; 380}phNfcIF_sReference_t, *pphNfcIF_sReference_t; 381 382 383/* 384################################################################################ 385********************** Register Function Type Definition *********************** 386################################################################################ 387*/ 388 389/** 390* Registers the interface functions and passes the callback functions to the 391* lower layer. 392* 393* This function passes the callback functions of the interface to the 394* lower interface and the lower interface registers its functions. 395*/ 396 397typedef NFCSTATUS ( *pphNfcIF_Register_t) ( 398 phNfcIF_sReference_t *psReference, 399 phNfcIF_sCallBack_t if_callback, 400 void *psIFConfig 401 ); 402 403 404/** 405 * Layer Specific Configuration structure. 406 * 407 * This structure holds the Lower Layer Name and the registry function for registering 408 * the lower layer interface functions . 409 */ 410 411 412typedef struct phNfcLayer_sCfg 413{ 414 uint8_t layer_index; 415 uint8_t *layer_name; 416 pphNfcIF_Register_t layer_registry; 417 struct phNfcLayer_sCfg *layer_next; 418}phNfcLayer_sCfg_t, *pphNfcLayer_sCfg_t; 419 420 421#endif /* PHNFCINTERFACE_H */ 422 423