Home | History | Annotate | Download | only in inc
      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 
    423