314 lines
12 KiB
C
314 lines
12 KiB
C
/*
|
|
* 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*/
|
|
|
|
|