/*
* 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 phHal4Nfc_Internal.h
* \brief HAL callback Function Prototypes
*
* The HAL4.0 Internal header file
*
* Project: NFC-FRI-1.1 / HAL4.0
*
* $Date: Mon May 31 11:43:42 2010 $
* $Author: ing07385 $
* $Revision: 1.40 $
* $Aliases: NFC_FRI1.1_WK1023_R35_1 $
*
*/
/*@{*/
#ifndef PHHAL4NFC_INTERNAL_H
#define PHHAL4NFC_INTERNAL_H
/*@}*/
#include <phHciNfc.h>
/**
* \name HAL4
*
* File: \ref phHal4Nfc_Internal.h
*
*/
/*@{*/
#define PH_HAL4NFC_INTERNAL_FILEREVISION "$Revision: 1.40 $" /**< \ingroup grp_file_attributes */
#define PH_HAL4NFC_INTERNAL_FILEALIASES "$Aliases: NFC_FRI1.1_WK1023_R35_1 $" /**< \ingroup grp_file_attributes */
/*@}*/
/* -----------------Include files ---------------------------------------*/
/* ---------------- Macros ----------------------------------------------*/
#define LLCP_DISCON_CHANGES
#define PH_HAL4NFC_TRANSCEIVE_TIMEOUT 30000 /**<Transceive operation
on any target should be
completed within this
interval.Else the
operation is timed out*/
#define PH_HAL4NFC_TGT_MERGE_ADDRESS 0x988BU
#define PH_HAL4NFC_TGT_MERGE_SAK 0x00U
/*---------------- Hal4 Internal Data Structures -------------------------*/
/**HAL4 states*/
typedef enum{
eHal4StateClosed = 0x00, /**<closed state*/
eHal4StateSelfTestMode, /**<Self test mode*/
eHal4StateOpenAndReady ,/**<Fully initialised*/
eHal4StateConfiguring , /**<configuration ongoing,transient state*/
eHal4StateTargetDiscovered,/**<target discovered*/
eHal4StateTargetActivate,/**<state during a select or reactivate*/
eHal4StateEmulation,/**<Emulation state*/
eHal4StateTargetConnected,/**<Connected state*/
eHal4StateTransaction,/**<configuration ongoing,transient state*/
eHal4StatePresenceCheck,/**<Presence Check state*/
eHal4StateInvalid
} phHal4Nfc_Hal4state_t;
/**Global Pointer to hardware reference used in timer callbacks to get the
context pointer*/
extern phHal_sHwReference_t *gpphHal4Nfc_Hwref;
/**Context info for HAL4 transceive*/
typedef struct phHal4Nfc_TrcvCtxtInfo{
/*Upper layer's Transceive callback*/
pphHal4Nfc_TransceiveCallback_t pUpperTranceiveCb;
/*Upper layer's Send callback*/
pphHal4Nfc_SendCallback_t pP2PSendCb;
/*Upper layer's receive callback*/
pphHal4Nfc_ReceiveCallback_t pP2PRecvCb;
/**Flag to check if a P2P Send is ongoing when target release is issued by
the upper layer.If this flag is set ,then a remote device disconnect call
will be deferred*/
uint8_t P2P_Send_In_Progress;
/*Data structure to provide transceive info to Hci*/
phHciNfc_XchgInfo_t XchangeInfo;
/*sData pointer to point to upper layer's send data*/
phNfc_sData_t *psUpperSendData;
/*Maintains the offset of number of bytes sent in one go ,so that the
remaining bytes can be sent during the next transceive*/
uint32_t NumberOfBytesSent;
/*Number of bytes received during a P2p receive*/
uint32_t P2PRecvLength;
/*sData pointer to point to upper layer's recv data*/
phNfc_sData_t *psUpperRecvData;
/*structure to hold data received from lower layer*/
phNfc_sData_t sLowerRecvData;
/*Offset for Lower Recv Data buffer*/
uint32_t LowerRecvBufferOffset;
/*Holds the status of the RecvDataBuffer:
NFCSTATUS_SUCCESS:Receive data buffer is complete with data & P2P receive has
not yet been called
NFCSTATUS_PENDING:RecvDataBuffer is yet to receive the data from lower layer
*/
NFCSTATUS RecvDataBufferStatus;
/*Transaction timer ,currently used only for P2P receive on target*/
uint32_t TransactionTimerId;
}phHal4Nfc_TrcvCtxtInfo_t,*pphHal4Nfc_TrcvCtxtInfo_t;
/**Context info for HAL4 Device discovery feature*/
typedef struct phHal4Nfc_ADDCtxtInfo{
/*total number of devices discovered*/
uint8_t nbr_of_devices;
/*smx_discovery*/
uint8_t smx_discovery;
/*Most recently used ADD configuration*/
phHal_sADD_Cfg_t sADDCfg;
/*Most recently used Poll configuration*/
phHal_sPollDevInfo_t sCurrentPollConfig;
/*Set when Poll Configured and reset when polling is disabled.*/
uint8_t IsPollConfigured;
}phHal4Nfc_ADDCtxtInfo_t,*pphHal4Nfc_ADDCtxtInfo_t;
/**Context info for HAL4 connect/disconnect*/
typedef struct phHal4Nfc_TargetConnectInfo{
/*connect callback*/
pphHal4Nfc_ConnectCallback_t pUpperConnectCb;
/*Disconnect callback*/
pphHal4Nfc_DiscntCallback_t pUpperDisconnectCb;
/*used when a release call is pending in HAL*/
phHal_eReleaseType_t ReleaseType;
/*Points to Remote device info of a connected device*/
phHal_sRemoteDevInformation_t *psConnectedDevice;
/*Emulation state Activated/Deactivated*/
phHal_Event_t EmulationState;
/*Presence check callback*/
pphHal4Nfc_GenCallback_t pPresenceChkCb;
}phHal4Nfc_TargetConnectInfo_t,*pphHal4Nfc_TargetConnectInfo_t;
/**Context info for HAL4 connect & disconnect*/
typedef struct phHal4Nfc_UpperLayerInfo{
/*Upper layer Context for discovery call*/
void *DiscoveryCtxt;
/*Upper layer Context for P2P discovery call*/
void *P2PDiscoveryCtxt;
/**Context and function pointer for default event handler registered
by upper layer during initialization*/
void *DefaultListenerCtxt;
/*Default event handler*/
pphHal4Nfc_Notification_t pDefaultEventHandler;
/**Upper layer has to register this listener for receiving info about
discovered tags*/
pphHal4Nfc_Notification_t pTagDiscoveryNotification;
/**Upper layer has to register this listener for receiving info about
discovered P2P devices*/
pphHal4Nfc_Notification_t pP2PNotification;
/*Event Notification Context*/
void *EventNotificationCtxt;
/**Notification handler for emulation and other events*/
pphHal4Nfc_Notification_t pEventNotification;
/**Upper layer's Config discovery/Emulation callback registry*/
pphHal4Nfc_GenCallback_t pConfigCallback;
void *psUpperLayerCtxt;
void *psUpperLayerDisconnectCtxt;
#ifdef LLCP_DISCON_CHANGES
void *psUpperLayerCfgDiscCtxt;
#endif /* #ifdef LLCP_DISCON_CHANGES */
/**Upper layer's Open Callback registry*/
pphHal4Nfc_GenCallback_t pUpperOpenCb;
/**Upper layer's Close Callback registry */
pphHal4Nfc_GenCallback_t pUpperCloseCb;
/*Ioctl out param pointer ,points to buffer provided by upper layer during
a ioctl call*/
phNfc_sData_t *pIoctlOutParam;
/*Ioctl callback*/
pphHal4Nfc_IoctlCallback_t pUpperIoctlCb;
}phHal4Nfc_UpperLayerInfo_t;
/**Context structure for HAL4.0*/
typedef struct phHal4Nfc_Hal4Ctxt{
/**Hci handle obtained in Hci_Init*/
void *psHciHandle;
/**Layer configuration*/
pphNfcLayer_sCfg_t pHal4Nfc_LayerCfg;
/**Device capabilities*/
phHal_sDeviceCapabilities_t Hal4Nfc_DevCaps;
/*Current state of HAL4.Updated generally in callbacks*/
phHal4Nfc_Hal4state_t Hal4CurrentState;
/*Next state of HAL.Updated during calls*/
phHal4Nfc_Hal4state_t Hal4NextState;
/**Info related to upper layer*/
phHal4Nfc_UpperLayerInfo_t sUpperLayerInfo;
/*ADD context info*/
pphHal4Nfc_ADDCtxtInfo_t psADDCtxtInfo;
/*union for different configurations ,used in a config_parameters()call*/
phHal_uConfig_t uConfig;
/*Event info*/
phHal_sEventInfo_t *psEventInfo;
/*Select sector flag*/
uint8_t SelectSectorFlag;
/**List of pointers to remote device information for all discovered
targets*/
phHal_sRemoteDevInformation_t *rem_dev_list[MAX_REMOTE_DEVICES];
/*Transceive context info*/
pphHal4Nfc_TrcvCtxtInfo_t psTrcvCtxtInfo;
/*Connect context info*/
phHal4Nfc_TargetConnectInfo_t sTgtConnectInfo;
/*Last called Ioctl_type*/
uint32_t Ioctl_Type;
#ifdef IGNORE_EVT_PROTECTED
/*used to ignore multiple Protected events*/
uint8_t Ignore_Event_Protected;
#endif/*#ifdef IGNORE_EVT_PROTECTED*/
uint8_t FelicaIDm[(PHHAL_FEL_ID_LEN + 2)];
}phHal4Nfc_Hal4Ctxt_t;
/*---------------- Function Prototypes ----------------------------------------------*/
/*Callback completion routine for Connect*/
extern void phHal4Nfc_ConnectComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/*Callback completion routine for Disconnect*/
extern void phHal4Nfc_DisconnectComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/*Callback completion routine for Transceive*/
extern void phHal4Nfc_TransceiveComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/*Callback completion routine for Presence check*/
extern void phHal4Nfc_PresenceChkComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/*Configuration completion routine*/
extern void phHal4Nfc_ConfigureComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo,
uint8_t type
);
/*Callback completion routine for ADD*/
extern void phHal4Nfc_TargetDiscoveryComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/*Event handler routine for Emulation*/
extern void phHal4Nfc_HandleEmulationEvent(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/*Callback completion routine for NFCIP1 Receive*/
extern void phHal4Nfc_RecvCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
/*Callback completion routine for Send*/
extern void phHal4Nfc_SendCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
/*Callback completion routine for P2P Activate Event received from HCI*/
extern void phHal4Nfc_P2PActivateComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/*Callback completion routine for P2P Deactivate Event received from HCI*/
extern void phHal4Nfc_HandleP2PDeActivate(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/*Callback completion routine for reactivate target*/
extern void phHal4Nfc_ReactivationComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
void *pInfo
);
/**Execute Hal4 Disconnect*/
extern NFCSTATUS phHal4Nfc_Disconnect_Execute(
phHal_sHwReference_t *psHwReference
);
/**Handle transceive timeout*/
#ifdef TRANSACTION_TIMER
extern void phHal4Nfc_TrcvTimeoutHandler(uint32_t TrcvTimerId);
#endif /*TRANSACTION_TIMER*/
#endif/*PHHAL4NFC_INTERNAL_H*/