blob: 50f4ea19467f85a13b9f980480899161c7e3c71e [file] [log] [blame]
Nick Pelly5d9927b2010-09-23 12:47:58 -07001/*
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_Tomas143acf02010-11-25 15:48:33 +010055#define LLCP_DISCON_CHANGES
Nick Pelly5d9927b2010-09-23 12:47:58 -070056#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*/
68typedef 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*/
85extern phHal_sHwReference_t *gpphHal4Nfc_Hwref;
86
87/**Context info for HAL4 transceive*/
88typedef 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*/
126typedef 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*/
140typedef 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*/
156typedef 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 Fonteneaub5419c72010-11-03 11:11:22 -0500179 void *psUpperLayerDisconnectCtxt;
daniel_Tomas143acf02010-11-25 15:48:33 +0100180#ifdef LLCP_DISCON_CHANGES
181 void *psUpperLayerCfgDiscCtxt;
182#endif /* #ifdef LLCP_DISCON_CHANGES */
Nick Pelly5d9927b2010-09-23 12:47:58 -0700183 /**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*/
195typedef 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 Jogidd7125f2011-07-12 05:03:50 -0700229 uint8_t FelicaIDm[(PHHAL_FEL_ID_LEN + 2)];
Nick Pelly5d9927b2010-09-23 12:47:58 -0700230}phHal4Nfc_Hal4Ctxt_t;
231
232
233/*---------------- Function Prototypes ----------------------------------------------*/
234
235/*Callback completion routine for Connect*/
236extern void phHal4Nfc_ConnectComplete(
237 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
238 void *pInfo
239 );
240
241/*Callback completion routine for Disconnect*/
242extern void phHal4Nfc_DisconnectComplete(
243 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
244 void *pInfo
245 );
246
247/*Callback completion routine for Transceive*/
248extern void phHal4Nfc_TransceiveComplete(
249 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
250 void *pInfo
251 );
252
253/*Callback completion routine for Presence check*/
254extern void phHal4Nfc_PresenceChkComplete(
255 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
256 void *pInfo
257 );
258
259/*Configuration completion routine*/
260extern void phHal4Nfc_ConfigureComplete(
261 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
262 void *pInfo,
263 uint8_t type
264 );
265
266
267/*Callback completion routine for ADD*/
268extern void phHal4Nfc_TargetDiscoveryComplete(
269 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
270 void *pInfo
271 );
272
273/*Event handler routine for Emulation*/
274extern void phHal4Nfc_HandleEmulationEvent(
275 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
276 void *pInfo
277 );
278
279/*Callback completion routine for NFCIP1 Receive*/
280extern void phHal4Nfc_RecvCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
281
282/*Callback completion routine for Send*/
283extern void phHal4Nfc_SendCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
284
285/*Callback completion routine for P2P Activate Event received from HCI*/
286extern void phHal4Nfc_P2PActivateComplete(
287 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
288 void *pInfo
289 );
290/*Callback completion routine for P2P Deactivate Event received from HCI*/
291extern void phHal4Nfc_HandleP2PDeActivate(
292 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
293 void *pInfo
294 );
295
296/*Callback completion routine for reactivate target*/
297extern void phHal4Nfc_ReactivationComplete(
298 phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
299 void *pInfo
300 );
301
302/**Execute Hal4 Disconnect*/
303extern NFCSTATUS phHal4Nfc_Disconnect_Execute(
304 phHal_sHwReference_t *psHwReference
305 );
306
307/**Handle transceive timeout*/
308#ifdef TRANSACTION_TIMER
309extern void phHal4Nfc_TrcvTimeoutHandler(uint32_t TrcvTimerId);
310#endif /*TRANSACTION_TIMER*/
311
312#endif/*PHHAL4NFC_INTERNAL_H*/
313
314