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 ----------------------------------------------*/
55 #define LLCP_DISCON_CHANGES
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;
179     void                            *psUpperLayerDisconnectCtxt;
180 #ifdef LLCP_DISCON_CHANGES
181     void                            *psUpperLayerCfgDiscCtxt;
182 #endif /* #ifdef LLCP_DISCON_CHANGES */
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*/
229     uint8_t                          FelicaIDm[(PHHAL_FEL_ID_LEN + 2)];
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 
315