| /* |
| * Copyright (C) 2010 NXP Semiconductors |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| /*! |
| * ============================================================================= |
| * \file phNfcInterface.h |
| * \brief Generic Interface Layer Function Definitions. |
| * |
| * Project: NFC-FRI-1.1 |
| * |
| * $Date: Thu Feb 11 19:01:36 2010 $ |
| * $Author: ing04880 $ |
| * $Revision: 1.42 $ |
| * $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 $ |
| * |
| * ============================================================================= |
| */ |
| |
| #ifndef PHNFCINTERFACE_H /* */ |
| #define PHNFCINTERFACE_H /* */ |
| |
| /** |
| * \name NFC Inteface |
| * |
| * File: \ref phNfcInterface.h |
| * |
| */ |
| |
| /*@{*/ |
| #define PHNFCINTERFACE_FILEREVISION "$Revision: 1.42 $" /**< \ingroup grp_file_attributes */ |
| #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 */ |
| /*@}*/ |
| |
| /* |
| ################################################################################ |
| ***************************** Header File Inclusion **************************** |
| ################################################################################ |
| */ |
| |
| #include <phNfcTypes.h> |
| #include <phNfcHalTypes.h> |
| |
| |
| /* |
| ################################################################################ |
| ****************************** Macro Definitions ******************************* |
| ################################################################################ |
| */ |
| |
| #define NFC_FSM_IN_PROGRESS 0x01U |
| #define NFC_FSM_COMPLETE 0x00U |
| |
| #define NFC_FSM_CURRENT 0x00U |
| #define NFC_FSM_NEXT 0x01U |
| |
| /* NFC Notification Types */ |
| |
| #define NFC_NOTIFY_INIT_COMPLETED 0x01 |
| #define NFC_NOTIFY_INIT_FAILED 0xF1 |
| |
| #define NFC_NOTIFY_DEINIT_COMPLETED 0x02 |
| #define NFC_NOTIFY_DEINIT_FAILED 0xF2 |
| |
| #define NFC_NOTIFY_EVENT 0x70 |
| |
| #define NFC_NOTIFY_DEVICE_ACTIVATED 0x82 |
| #define NFC_NOTIFY_DEVICE_DEACTIVATED 0x83 |
| |
| #define NFC_NOTIFY_SEND_COMPLETED 0x03 |
| #define NFC_NOTIFY_SEND_ERROR 0xF3 |
| |
| #define NFC_NOTIFY_RECV_COMPLETED 0x04 |
| #define NFC_NOTIFY_RECV_ERROR 0xF4 |
| #define NFC_NOTIFY_RECV_EVENT 0x74 |
| #define NFC_NOTIFY_RECV_CANCELLED 0x34 |
| |
| #define NFC_NOTIFY_TRANSCEIVE_COMPLETED 0x05 |
| #define NFC_NOTIFY_TRANSCEIVE_ERROR 0xF5 |
| |
| #define NFC_NOTIFY_POLL_ENABLED 0x06 |
| #define NFC_NOTIFY_POLL_RESTARTED 0x16 |
| #define NFC_NOTIFY_POLL_DISABLED 0x26 |
| #define NFC_NOTIFY_CONFIG_SUCCESS 0x36 |
| #define NFC_NOTIFY_CONFIG_ERROR 0xF6 |
| |
| #define NFC_NOTIFY_TARGET_DISCOVERED 0x10 |
| #define NFC_NOTIFY_DISCOVERY_ERROR 0xFA |
| #define NFC_NOTIFY_TARGET_RELEASED 0x11 |
| #define NFC_NOTIFY_TARGET_CONNECTED 0x12 |
| #define NFC_NOTIFY_TARGET_PRESENT 0x13 |
| #define NFC_NOTIFY_TARGET_REACTIVATED 0x14 |
| #define NFC_NOTIFY_CONNECT_FAILED 0xFC |
| #define NFC_NOTIFY_TARGET_DISCONNECTED 0x15 |
| #define NFC_NOTIFY_DISCONNECT_FAILED 0xFD |
| |
| #define NFC_NOTIFY_TRANSACTION 0x07 |
| |
| #define NFC_NOTIFY_RESULT 0x08 |
| |
| #define NFC_NOTIFY_DEVICE_ERROR 0xFEU |
| #define NFC_NOTIFY_ERROR 0xFFU |
| |
| |
| #define BYTE_SIZE 0x08U |
| #define BYTE_MASK 0xFFU |
| /* HCI GET and SET BITS Macros */ |
| #define MASK_BITS8(p,l) \ |
| ( ( (((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE )? \ |
| (~(0xFFU<<((p)+(l))) & (0xFFU<<(p))):(0U) ) |
| #ifdef MASK_BITS |
| #define GET_BITS8(num,p,l) \ |
| ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \ |
| (((num)& (MASK_BITS8(p,l)))>>(p)):(0U) ) |
| #else |
| #define GET_BITS8(num,p,l) \ |
| ( ((((p)+(l))<=BYTE_SIZE))? \ |
| (((num)>>(p))& (~(0xFFU<<(l)))):(0U) ) |
| #endif |
| #define SET_BITS8(num,p,l,val) \ |
| ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \ |
| (((num)& (~MASK_BITS8(p,l)))|((val)<<(p))):(0U)) |
| |
| /* |
| ################################################################################ |
| ******************** Enumeration and Structure Definition ********************** |
| ################################################################################ |
| */ |
| |
| |
| enum phNfcIF_eExecution{ |
| NFC_EXEC_NORMAL = 0x00, /**< Normal Execution Sequence */ |
| NFC_EXEC_CALLBACK = 0x01, /**< Callback Execution Sequence */ |
| NFC_EXEC_UNKNOWN = 0xFF /**< Callback Execution Sequence */ |
| }; |
| |
| |
| typedef enum phNfc_eModeType{ |
| MODE_ON = 0x00U, /**< Switches the particular feature ON*/ |
| MODE_OFF /**< Switches the particular feature OFF*/ |
| }phNfc_eModeType_t; |
| |
| /** |
| * State Structure to hold the State Information |
| * |
| * This structure holds the state Information of a specified |
| * Layer . |
| * |
| */ |
| |
| typedef struct phNfc_sState |
| { |
| uint8_t cur_state; |
| uint8_t transition; |
| uint8_t next_state; |
| /* uint8_t event; */ |
| |
| }phNfc_sState_t; |
| |
| |
| |
| /** |
| * Transaction Completion Information Structure |
| * |
| * This structure holds the completion callback information of the |
| * transaction passed from the lower layer to the upper layer |
| * along with the completion callback. |
| */ |
| |
| typedef struct phNfc_sTransactionInfo |
| { |
| /* Returns the status of the Transaction Completion routine */ |
| NFCSTATUS status; |
| /* Indicates the Type of the Transaction */ |
| uint8_t type; |
| /* To contain more Transaction Notification specific info */ |
| void *info; |
| /* The data response from the Transaction */ |
| uint8_t *buffer; |
| /* The size of the data response from the Transaction */ |
| uint16_t length; |
| }phNfc_sTransactionInfo_t; |
| |
| /** |
| * Notification Information Structure |
| * |
| * This structure holds the notification callback information passed from |
| * the lower layer to the upper layer along with the notification callback. |
| */ |
| |
| typedef struct phNfc_sCompletionInfo |
| { |
| /* Returns the status of the completion routine */ |
| NFCSTATUS status; |
| |
| /* Indicates the Type of the Information |
| * associated with the completion |
| */ |
| uint8_t type; |
| |
| /* To contain more completion specific info */ |
| void *info; |
| |
| }phNfc_sCompletionInfo_t; |
| |
| |
| /** |
| * Notification Information |
| * |
| */ |
| typedef struct phNfc_sNotificationInfo |
| { |
| /* Returns the status of the Notification routine */ |
| NFCSTATUS status; |
| /* Indicates the Type of the Notification */ |
| phHal_eNotificationType_t type; |
| /* To contain more Notification specific info */ |
| void *info; |
| |
| }phNfc_sNotificationInfo_t; |
| |
| |
| /* |
| ################################################################################ |
| ********************* Callback Function Type Definition ************************ |
| ################################################################################ |
| */ |
| |
| /** |
| * Interface Notification Callback |
| * |
| * This callback notifies the occurrance of an event in the Lower Interface. |
| * |
| * \param [in] pContext Context for the Callback Function |
| * \param [in] pHwRef Pointer to the Hardware Reference |
| * \param [in] type Type of the Notification sent |
| * \param [out] pInfo Pointer to the Transaction Information Structure |
| * which contains the Status of the operation, data |
| * obtained or sent and size of the data sent or received |
| */ |
| |
| typedef void (*pphNfcIF_Notification_CB_t) ( |
| void *pContext, |
| void *pHwRef, |
| uint8_t type, |
| void *pInfo |
| ); |
| |
| /** |
| * asynchronous Interface Transaction Completion callback |
| * |
| * This callback signals the completion of the asynchronous send or receive |
| * operation. The number of bytes sent or recieved is returned back. |
| * |
| * \param [in] pContext Context for the Callback Function |
| * \param [in] pHwRef Pointer to the Hardware Reference |
| * \param [out] pInfo Pointer to the Transaction Information Structure |
| * which contains the Status of the operation, data |
| * obtained or sent and size of the data sent or received |
| */ |
| |
| typedef void (*pphNfcIF_Transact_Completion_CB_t) ( |
| void *pContext, |
| void *pHwRef, |
| phNfc_sTransactionInfo_t *pInfo |
| ); |
| |
| /* |
| ################################################################################ |
| ********************** Generic Interface Function Prototype ******************** |
| ################################################################################ |
| */ |
| |
| /** |
| * Generic NFC Interface Function Type . |
| * |
| * \param [in] pContext Context pointer for the Generic Interface. |
| * \param [in] pHwRef pointer for the device interface link information. |
| */ |
| |
| typedef NFCSTATUS (*pphNfcIF_Interface_t) ( |
| void *pContext, |
| void *pHwRef |
| ); |
| /** |
| * Data Transaction between the lower layer interface |
| * |
| * Sends or Receives the given amount of data to the lower layer. |
| * The call returns immediately and the registered callback is |
| * called when all data has been written. |
| * <p> |
| * |
| * @note If the interface is not initialized the function does nothing. |
| * |
| * \param [in] pContext Context pointer for sending the data. |
| * \param [in] pHwRef pointer for the device interface link information. |
| * \param[in] data pointer to data buffer containing the data to be sent or |
| * to be received. The data pointer is valid at least until |
| * the registered callback is called. |
| * \param[in] length length of the data to be sent or to be received. |
| */ |
| |
| typedef NFCSTATUS (*pphNfcIF_Transact_t) ( |
| void *pContext, |
| void *pHwRef, |
| uint8_t *data, |
| uint16_t length |
| ); |
| |
| |
| /** |
| * Generic Interface structure with the Lower Layer |
| * |
| * This structure holds the context and function pointers of all functions |
| * required to interface with the Lower Layers. |
| */ |
| |
| typedef struct phNfc_sLowerIF |
| { |
| void *pcontext; |
| pphNfcIF_Interface_t init; |
| pphNfcIF_Interface_t release; |
| pphNfcIF_Transact_t send; |
| pphNfcIF_Transact_t receive; |
| pphNfcIF_Transact_t receive_wait; |
| pphNfcIF_Interface_t transact_abort; |
| pphNfcIF_Interface_t unregister; |
| } phNfc_sLowerIF_t,*pphNfc_sLowerIF_t; |
| |
| |
| /** |
| * Generic Callback interface structure for the Lower layer. |
| * |
| * This structure holds the callback function pointers of the functions that |
| * performs the completion of a particular operation. These functions are used |
| * by the Lower Layer interface to convey the completion of an operation. |
| */ |
| |
| typedef struct phNfcIF_sCallBack |
| { |
| /**<Holds context info to be sent to lower layer*/ |
| void *pif_ctxt; |
| /**<Callback notifies occurrance of event in Lower Interface*/ |
| pphNfcIF_Notification_CB_t notify; |
| /**<asynchronous Interface Transaction Completion callback*/ |
| pphNfcIF_Transact_Completion_CB_t send_complete; |
| pphNfcIF_Transact_Completion_CB_t receive_complete; |
| |
| } phNfcIF_sCallBack_t ,*pphNfcIF_sCallBack_t ; |
| |
| |
| /** |
| * Interface Reference structure. |
| * |
| * This structure holds the reference parameters, callback function pointers and |
| * lower interface functions . |
| */ |
| |
| typedef struct phNfcIF_sReference |
| { |
| /**<Generic Interface structure with the Lower Layer*/ |
| phNfc_sLowerIF_t *plower_if; |
| /**<pointer to the data to be sent*/ |
| uint8_t *tx_data; |
| /**<pointer to the data to be received*/ |
| uint8_t *rx_data; |
| }phNfcIF_sReference_t, *pphNfcIF_sReference_t; |
| |
| |
| /* |
| ################################################################################ |
| ********************** Register Function Type Definition *********************** |
| ################################################################################ |
| */ |
| |
| /** |
| * Registers the interface functions and passes the callback functions to the |
| * lower layer. |
| * |
| * This function passes the callback functions of the interface to the |
| * lower interface and the lower interface registers its functions. |
| */ |
| |
| typedef NFCSTATUS ( *pphNfcIF_Register_t) ( |
| phNfcIF_sReference_t *psReference, |
| phNfcIF_sCallBack_t if_callback, |
| void *psIFConfig |
| ); |
| |
| |
| /** |
| * Layer Specific Configuration structure. |
| * |
| * This structure holds the Lower Layer Name and the registry function for registering |
| * the lower layer interface functions . |
| */ |
| |
| |
| typedef struct phNfcLayer_sCfg |
| { |
| uint8_t layer_index; |
| uint8_t *layer_name; |
| pphNfcIF_Register_t layer_registry; |
| struct phNfcLayer_sCfg *layer_next; |
| }phNfcLayer_sCfg_t, *pphNfcLayer_sCfg_t; |
| |
| |
| #endif /* PHNFCINTERFACE_H */ |
| |