Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 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 | * \file phHal4Nfc_Internal.h |
| 20 | * \brief HAL callback Function Prototypes |
| 21 | * |
| 22 | * The HAL4.0 Internal header file |
| 23 | * |
| 24 | * Project: NFC-FRI-1.1 / HAL4.0 |
| 25 | * |
| 26 | * $Date: Mon May 31 11:43:42 2010 $ |
| 27 | * $Author: ing07385 $ |
| 28 | * $Revision: 1.40 $ |
| 29 | * $Aliases: NFC_FRI1.1_WK1023_R35_1 $ |
| 30 | * |
| 31 | */ |
| 32 | |
| 33 | /*@{*/ |
| 34 | #ifndef PHHAL4NFC_INTERNAL_H |
| 35 | #define PHHAL4NFC_INTERNAL_H |
| 36 | /*@}*/ |
| 37 | |
| 38 | #include <phHciNfc.h> |
| 39 | |
| 40 | /** |
| 41 | * \name HAL4 |
| 42 | * |
| 43 | * File: \ref phHal4Nfc_Internal.h |
| 44 | * |
| 45 | */ |
| 46 | |
| 47 | /*@{*/ |
| 48 | #define PH_HAL4NFC_INTERNAL_FILEREVISION "$Revision: 1.40 $" /**< \ingroup grp_file_attributes */ |
| 49 | #define PH_HAL4NFC_INTERNAL_FILEALIASES "$Aliases: NFC_FRI1.1_WK1023_R35_1 $" /**< \ingroup grp_file_attributes */ |
| 50 | /*@}*/ |
| 51 | |
| 52 | /* -----------------Include files ---------------------------------------*/ |
| 53 | |
| 54 | /* ---------------- Macros ----------------------------------------------*/ |
daniel_Tomas | 143acf0 | 2010-11-25 15:48:33 +0100 | [diff] [blame] | 55 | #define LLCP_DISCON_CHANGES |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 56 | #define PH_HAL4NFC_TRANSCEIVE_TIMEOUT 30000 /**<Transceive operation |
| 57 | on any target should be |
| 58 | completed within this |
| 59 | interval.Else the |
| 60 | operation is timed out*/ |
| 61 | |
| 62 | #define PH_HAL4NFC_TGT_MERGE_ADDRESS 0x988BU |
| 63 | #define PH_HAL4NFC_TGT_MERGE_SAK 0x00U |
| 64 | |
| 65 | |
| 66 | /*---------------- Hal4 Internal Data Structures -------------------------*/ |
| 67 | /**HAL4 states*/ |
| 68 | typedef enum{ |
| 69 | eHal4StateClosed = 0x00, /**<closed state*/ |
| 70 | eHal4StateSelfTestMode, /**<Self test mode*/ |
| 71 | eHal4StateOpenAndReady ,/**<Fully initialised*/ |
| 72 | eHal4StateConfiguring , /**<configuration ongoing,transient state*/ |
| 73 | eHal4StateTargetDiscovered,/**<target discovered*/ |
| 74 | eHal4StateTargetActivate,/**<state during a select or reactivate*/ |
| 75 | eHal4StateEmulation,/**<Emulation state*/ |
| 76 | eHal4StateTargetConnected,/**<Connected state*/ |
| 77 | eHal4StateTransaction,/**<configuration ongoing,transient state*/ |
| 78 | eHal4StatePresenceCheck,/**<Presence Check state*/ |
| 79 | eHal4StateInvalid |
| 80 | } phHal4Nfc_Hal4state_t; |
| 81 | |
| 82 | |
| 83 | /**Global Pointer to hardware reference used in timer callbacks to get the |
| 84 | context pointer*/ |
| 85 | extern phHal_sHwReference_t *gpphHal4Nfc_Hwref; |
| 86 | |
| 87 | /**Context info for HAL4 transceive*/ |
| 88 | typedef struct phHal4Nfc_TrcvCtxtInfo{ |
| 89 | /*Upper layer's Transceive callback*/ |
| 90 | pphHal4Nfc_TransceiveCallback_t pUpperTranceiveCb; |
| 91 | /*Upper layer's Send callback*/ |
| 92 | pphHal4Nfc_SendCallback_t pP2PSendCb; |
| 93 | /*Upper layer's receive callback*/ |
| 94 | pphHal4Nfc_ReceiveCallback_t pP2PRecvCb; |
| 95 | /**Flag to check if a P2P Send is ongoing when target release is issued by |
| 96 | the upper layer.If this flag is set ,then a remote device disconnect call |
| 97 | will be deferred*/ |
| 98 | uint8_t P2P_Send_In_Progress; |
| 99 | /*Data structure to provide transceive info to Hci*/ |
| 100 | phHciNfc_XchgInfo_t XchangeInfo; |
| 101 | /*sData pointer to point to upper layer's send data*/ |
| 102 | phNfc_sData_t *psUpperSendData; |
| 103 | /*Maintains the offset of number of bytes sent in one go ,so that the |
| 104 | remaining bytes can be sent during the next transceive*/ |
| 105 | uint32_t NumberOfBytesSent; |
| 106 | /*Number of bytes received during a P2p receive*/ |
| 107 | uint32_t P2PRecvLength; |
| 108 | /*sData pointer to point to upper layer's recv data*/ |
| 109 | phNfc_sData_t *psUpperRecvData; |
| 110 | /*structure to hold data received from lower layer*/ |
| 111 | phNfc_sData_t sLowerRecvData; |
| 112 | /*Offset for Lower Recv Data buffer*/ |
| 113 | uint32_t LowerRecvBufferOffset; |
| 114 | /*Holds the status of the RecvDataBuffer: |
| 115 | NFCSTATUS_SUCCESS:Receive data buffer is complete with data & P2P receive has |
| 116 | not yet been called |
| 117 | NFCSTATUS_PENDING:RecvDataBuffer is yet to receive the data from lower layer |
| 118 | */ |
| 119 | NFCSTATUS RecvDataBufferStatus; |
| 120 | /*Transaction timer ,currently used only for P2P receive on target*/ |
| 121 | uint32_t TransactionTimerId; |
| 122 | }phHal4Nfc_TrcvCtxtInfo_t,*pphHal4Nfc_TrcvCtxtInfo_t; |
| 123 | |
| 124 | |
| 125 | /**Context info for HAL4 Device discovery feature*/ |
| 126 | typedef struct phHal4Nfc_ADDCtxtInfo{ |
| 127 | /*total number of devices discovered*/ |
| 128 | uint8_t nbr_of_devices; |
| 129 | /*smx_discovery*/ |
| 130 | uint8_t smx_discovery; |
| 131 | /*Most recently used ADD configuration*/ |
| 132 | phHal_sADD_Cfg_t sADDCfg; |
| 133 | /*Most recently used Poll configuration*/ |
| 134 | phHal_sPollDevInfo_t sCurrentPollConfig; |
| 135 | /*Set when Poll Configured and reset when polling is disabled.*/ |
| 136 | uint8_t IsPollConfigured; |
| 137 | }phHal4Nfc_ADDCtxtInfo_t,*pphHal4Nfc_ADDCtxtInfo_t; |
| 138 | |
| 139 | /**Context info for HAL4 connect/disconnect*/ |
| 140 | typedef struct phHal4Nfc_TargetConnectInfo{ |
| 141 | /*connect callback*/ |
| 142 | pphHal4Nfc_ConnectCallback_t pUpperConnectCb; |
| 143 | /*Disconnect callback*/ |
| 144 | pphHal4Nfc_DiscntCallback_t pUpperDisconnectCb; |
| 145 | /*used when a release call is pending in HAL*/ |
| 146 | phHal_eReleaseType_t ReleaseType; |
| 147 | /*Points to Remote device info of a connected device*/ |
| 148 | phHal_sRemoteDevInformation_t *psConnectedDevice; |
| 149 | /*Emulation state Activated/Deactivated*/ |
| 150 | phHal_Event_t EmulationState; |
| 151 | /*Presence check callback*/ |
| 152 | pphHal4Nfc_GenCallback_t pPresenceChkCb; |
| 153 | }phHal4Nfc_TargetConnectInfo_t,*pphHal4Nfc_TargetConnectInfo_t; |
| 154 | |
| 155 | /**Context info for HAL4 connect & disconnect*/ |
| 156 | typedef struct phHal4Nfc_UpperLayerInfo{ |
| 157 | /*Upper layer Context for discovery call*/ |
| 158 | void *DiscoveryCtxt; |
| 159 | /*Upper layer Context for P2P discovery call*/ |
| 160 | void *P2PDiscoveryCtxt; |
| 161 | /**Context and function pointer for default event handler registered |
| 162 | by upper layer during initialization*/ |
| 163 | void *DefaultListenerCtxt; |
| 164 | /*Default event handler*/ |
| 165 | pphHal4Nfc_Notification_t pDefaultEventHandler; |
| 166 | /**Upper layer has to register this listener for receiving info about |
| 167 | discovered tags*/ |
| 168 | pphHal4Nfc_Notification_t pTagDiscoveryNotification; |
| 169 | /**Upper layer has to register this listener for receiving info about |
| 170 | discovered P2P devices*/ |
| 171 | pphHal4Nfc_Notification_t pP2PNotification; |
| 172 | /*Event Notification Context*/ |
| 173 | void *EventNotificationCtxt; |
| 174 | /**Notification handler for emulation and other events*/ |
| 175 | pphHal4Nfc_Notification_t pEventNotification; |
| 176 | /**Upper layer's Config discovery/Emulation callback registry*/ |
| 177 | pphHal4Nfc_GenCallback_t pConfigCallback; |
| 178 | void *psUpperLayerCtxt; |
Sylvain Fonteneau | b5419c7 | 2010-11-03 11:11:22 -0500 | [diff] [blame] | 179 | void *psUpperLayerDisconnectCtxt; |
daniel_Tomas | 143acf0 | 2010-11-25 15:48:33 +0100 | [diff] [blame] | 180 | #ifdef LLCP_DISCON_CHANGES |
| 181 | void *psUpperLayerCfgDiscCtxt; |
| 182 | #endif /* #ifdef LLCP_DISCON_CHANGES */ |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 183 | /**Upper layer's Open Callback registry*/ |
| 184 | pphHal4Nfc_GenCallback_t pUpperOpenCb; |
| 185 | /**Upper layer's Close Callback registry */ |
| 186 | pphHal4Nfc_GenCallback_t pUpperCloseCb; |
| 187 | /*Ioctl out param pointer ,points to buffer provided by upper layer during |
| 188 | a ioctl call*/ |
| 189 | phNfc_sData_t *pIoctlOutParam; |
| 190 | /*Ioctl callback*/ |
| 191 | pphHal4Nfc_IoctlCallback_t pUpperIoctlCb; |
| 192 | }phHal4Nfc_UpperLayerInfo_t; |
| 193 | |
| 194 | /**Context structure for HAL4.0*/ |
| 195 | typedef struct phHal4Nfc_Hal4Ctxt{ |
| 196 | /**Hci handle obtained in Hci_Init*/ |
| 197 | void *psHciHandle; |
| 198 | /**Layer configuration*/ |
| 199 | pphNfcLayer_sCfg_t pHal4Nfc_LayerCfg; |
| 200 | /**Device capabilities*/ |
| 201 | phHal_sDeviceCapabilities_t Hal4Nfc_DevCaps; |
| 202 | /*Current state of HAL4.Updated generally in callbacks*/ |
| 203 | phHal4Nfc_Hal4state_t Hal4CurrentState; |
| 204 | /*Next state of HAL.Updated during calls*/ |
| 205 | phHal4Nfc_Hal4state_t Hal4NextState; |
| 206 | /**Info related to upper layer*/ |
| 207 | phHal4Nfc_UpperLayerInfo_t sUpperLayerInfo; |
| 208 | /*ADD context info*/ |
| 209 | pphHal4Nfc_ADDCtxtInfo_t psADDCtxtInfo; |
| 210 | /*union for different configurations ,used in a config_parameters()call*/ |
| 211 | phHal_uConfig_t uConfig; |
| 212 | /*Event info*/ |
| 213 | phHal_sEventInfo_t *psEventInfo; |
| 214 | /*Select sector flag*/ |
| 215 | uint8_t SelectSectorFlag; |
| 216 | /**List of pointers to remote device information for all discovered |
| 217 | targets*/ |
| 218 | phHal_sRemoteDevInformation_t *rem_dev_list[MAX_REMOTE_DEVICES]; |
| 219 | /*Transceive context info*/ |
| 220 | pphHal4Nfc_TrcvCtxtInfo_t psTrcvCtxtInfo; |
| 221 | /*Connect context info*/ |
| 222 | phHal4Nfc_TargetConnectInfo_t sTgtConnectInfo; |
| 223 | /*Last called Ioctl_type*/ |
| 224 | uint32_t Ioctl_Type; |
| 225 | #ifdef IGNORE_EVT_PROTECTED |
| 226 | /*used to ignore multiple Protected events*/ |
| 227 | uint8_t Ignore_Event_Protected; |
| 228 | #endif/*#ifdef IGNORE_EVT_PROTECTED*/ |
Sunil Jogi | dd7125f | 2011-07-12 05:03:50 -0700 | [diff] [blame] | 229 | uint8_t FelicaIDm[(PHHAL_FEL_ID_LEN + 2)]; |
Nick Pelly | 5d9927b | 2010-09-23 12:47:58 -0700 | [diff] [blame] | 230 | }phHal4Nfc_Hal4Ctxt_t; |
| 231 | |
| 232 | |
| 233 | /*---------------- Function Prototypes ----------------------------------------------*/ |
| 234 | |
| 235 | /*Callback completion routine for Connect*/ |
| 236 | extern void phHal4Nfc_ConnectComplete( |
| 237 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 238 | void *pInfo |
| 239 | ); |
| 240 | |
| 241 | /*Callback completion routine for Disconnect*/ |
| 242 | extern void phHal4Nfc_DisconnectComplete( |
| 243 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 244 | void *pInfo |
| 245 | ); |
| 246 | |
| 247 | /*Callback completion routine for Transceive*/ |
| 248 | extern void phHal4Nfc_TransceiveComplete( |
| 249 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 250 | void *pInfo |
| 251 | ); |
| 252 | |
| 253 | /*Callback completion routine for Presence check*/ |
| 254 | extern void phHal4Nfc_PresenceChkComplete( |
| 255 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 256 | void *pInfo |
| 257 | ); |
| 258 | |
| 259 | /*Configuration completion routine*/ |
| 260 | extern void phHal4Nfc_ConfigureComplete( |
| 261 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 262 | void *pInfo, |
| 263 | uint8_t type |
| 264 | ); |
| 265 | |
| 266 | |
| 267 | /*Callback completion routine for ADD*/ |
| 268 | extern void phHal4Nfc_TargetDiscoveryComplete( |
| 269 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 270 | void *pInfo |
| 271 | ); |
| 272 | |
| 273 | /*Event handler routine for Emulation*/ |
| 274 | extern void phHal4Nfc_HandleEmulationEvent( |
| 275 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 276 | void *pInfo |
| 277 | ); |
| 278 | |
| 279 | /*Callback completion routine for NFCIP1 Receive*/ |
| 280 | extern void phHal4Nfc_RecvCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo); |
| 281 | |
| 282 | /*Callback completion routine for Send*/ |
| 283 | extern void phHal4Nfc_SendCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo); |
| 284 | |
| 285 | /*Callback completion routine for P2P Activate Event received from HCI*/ |
| 286 | extern void phHal4Nfc_P2PActivateComplete( |
| 287 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 288 | void *pInfo |
| 289 | ); |
| 290 | /*Callback completion routine for P2P Deactivate Event received from HCI*/ |
| 291 | extern void phHal4Nfc_HandleP2PDeActivate( |
| 292 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 293 | void *pInfo |
| 294 | ); |
| 295 | |
| 296 | /*Callback completion routine for reactivate target*/ |
| 297 | extern void phHal4Nfc_ReactivationComplete( |
| 298 | phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt, |
| 299 | void *pInfo |
| 300 | ); |
| 301 | |
| 302 | /**Execute Hal4 Disconnect*/ |
| 303 | extern NFCSTATUS phHal4Nfc_Disconnect_Execute( |
| 304 | phHal_sHwReference_t *psHwReference |
| 305 | ); |
| 306 | |
| 307 | /**Handle transceive timeout*/ |
| 308 | #ifdef TRANSACTION_TIMER |
| 309 | extern void phHal4Nfc_TrcvTimeoutHandler(uint32_t TrcvTimerId); |
| 310 | #endif /*TRANSACTION_TIMER*/ |
| 311 | |
| 312 | #endif/*PHHAL4NFC_INTERNAL_H*/ |
| 313 | |
| 314 | |