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 | * \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 | |
| 144 | enum 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 | |
| 151 | typedef 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 | |
| 164 | typedef 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 | |
| 183 | typedef 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 | |
| 204 | typedef 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 | */ |
| 224 | typedef 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 | |
| 255 | typedef 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 | |
| 275 | typedef 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 | |
| 294 | typedef 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 | |
| 316 | typedef 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 | |
| 331 | typedef 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 | |
| 352 | typedef 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 | |
| 372 | typedef 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 | |
| 397 | typedef 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 | |
| 412 | typedef 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 | |