blob: fdae2ed214dbc128334d19da3cab001e91436189 [file] [log] [blame]
/*
* 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 */