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 
20 * \file  phDal4Nfc.h
21 * \brief Common DAL for the upper layer.
22 *
23 * Project: NFC-FRI-1.1
24 *
25 * $Date: Tue Nov 10 13:56:45 2009 $
26 * $Author: ing07299 $
27 * $Revision: 1.38 $
28 * $Aliases: NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
29 *
30 */
31 
32 #ifndef PHDAL4NFC_H
33 #define PHDAL4NFC_H
34 
35 /**
36 *  \name DAl4 NFC
37 *
38 * File: \ref phDal4Nfc.h
39 *
40 */
41 /*@{*/
42 #define PH_DAL4NFC_FILEREVISION "$Revision: 1.38 $" /**< \ingroup grp_file_attributes */
43 #define PH_DAL4NFC_FILEALIASES    "$Aliases: NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"
44  /**< \ingroup grp_file_attributes */
45 /*@}*/
46 /*************************** Includes *******************************/
47 /** \defgroup grp_nfc_dal DAL Component
48  *
49  *
50  *
51  */
52 #include <hardware/nfc.h>
53 /**< Basic type definitions */
54 #include <phNfcTypes.h>
55 /**< Generic Interface Layer Function Definitions */
56 #include <phNfcInterface.h>
57 /*********************** End of includes ****************************/
58 
59 /***************************** Macros *******************************/
60  /**< Used for messaging by DAL as well as Upper Layers */
61 #define PH_DAL4NFC_MESSAGE_BASE  PH_LIBNFC_DEFERREDCALL_MSG
62 
63 /************************ End of macros *****************************/
64 
65 
66 /********************* Structures and enums *************************/
67 
68 /**
69  * \ingroup grp_nfc_dal
70  *
71  * DAL context : This contains the information of the upper layer callback
72  * and hardware reference.
73  */
74 typedef struct phDal4Nfc_SContext
75 {
76 	phNfcIF_sCallBack_t		cb_if;		/**<Callback info registered by upper layer*/
77 	volatile uint8_t		hw_valid;	/**<Flag - shows Hardware present or not */
78 	void					*pHwRef;	/**<Hardware Reference*/
79 	nfc_pn544_device_t		*pDev;		/**<Android HAL reference*/
80 }phDal4Nfc_SContext_t,*pphDal4Nfc_SContext_t;
81 
82 /**
83  * \ingroup grp_nfc_dal
84  *
85  * DAL enum for Messages : This contains the enums used for
86  * posting messages to the application.
87  */
88 typedef enum phDal4Nfc_Messages_en
89 {
90     /**<Read message type used to post Read DAL Message to dispatch routine.Dispatch routine
91 	calls read callback registered by upper layer */
92     PHDAL4NFC_READ_MESSAGE = 0,
93     /**<Readwait message type used to post Read wait DAL Message to dispatch routine.Dispatch routine
94 	calls read wait callback registered by upper layer */
95 	PHDAL4NFC_READWAIT_MESSAGE,
96 	/**<Write message type used to post write DAL Message to dispatch routine.Dispatch routine
97 	calls write wait callback registered by upper layer */
98     PHDAL4NFC_WRITE_MESSAGE,
99 	/**<Notify message type used to post Notify DAL Message to dispatch routine.Dispatch routine
100 	calls notify callback registered by upper layer */
101     PHDAL4NFC_NOTIFY_MESSAGE
102 }phDal4Nfc_Messages_en_t;
103 
104 /**
105  * \ingroup grp_nfc_dal
106  *
107  * \brief DAL Message structure definition.This structure contains
108  *
109  * This structure contains details like  message type,read ,read wait and write callbacks
110  * reference details as registered by upper layer.
111  */
112 typedef struct phDal4Nfc_Message
113 {
114     /**<Refenrece to context.Context can be DAL context  */
115 	void                                *pContext;
116     /**<Reference to hardware reference strucutre */
117 	void                                *pHwRef;
118 	/**<DAL message of type \ref phDal4Nfc_Messages_en_t*/
119     phDal4Nfc_Messages_en_t             eMsgType;
120 	/**<Transaction specific information of type \ref phNfc_sTransactionInfo_t*/
121     phNfc_sTransactionInfo_t            transactInfo;
122 	/**<Reference to read callback,registered by upper layer.This is of type \ref pphNfcIF_Transact_Completion_CB_t*/
123     pphNfcIF_Transact_Completion_CB_t   readCbPtr;
124 	/**<Reference to write callback ,registered by upper layer.This is of type \ref pphNfcIF_Transact_Completion_CB_t*/
125     pphNfcIF_Transact_Completion_CB_t   writeCbPtr;
126 } phDal4Nfc_Message_t,*pphDal4Nfc_Message_t;
127 
128 typedef phLibNfc_sConfig_t phDal4Nfc_sConfig_t;
129 typedef phLibNfc_sConfig_t *pphDal4Nfc_sConfig_t;
130 
131 /****************** End of structures and enums *********************/
132 
133 /******************** Function declarations *************************/
134 
135 /**
136  * \ingroup grp_nfc_dal
137  *
138  *\brief Allows to register upper layer with DAL layer.
139  * This API allows upper layer to register with DAL layer.As part of registration
140  *<br>1.Exports DAL interfaces and DAL layer context to upper layer.
141  *Exported DAL interfaces are :
142  *<br><br>.phDal4Nfc_Shutdown
143  *<br><br>.phDal4Nfc_Write
144  *<br><br>.phDal4Nfc_Read
145  *<br><br>.phDal4Nfc_ReadWait
146  *<br><br>.phDal4Nfc_ReadWaitCancel
147  *<br><br>phDal4Nfc_Unregister
148  *<br><br>.Registeres upper layer callbacks and upper layer context with DAL layer.
149  *For details refer to \ref phNfcIF_sReference_t.
150  *Registration details are valid unless upper layer calls \ref phDal4Nfc_Unregister()
151  or \ref phDal4Nfc_Shutdown called.
152 
153  * \param[in,out] psRefer   holds  DAL exported interface references once registration
154  *							sucessful.This also contains transmit and receive buffer
155  *							references.
156  *
157  * \param[in]     if_cb		Contains upper layer callback reference details, which are used
158  *							by DAL layer during callback notification.
159  *							These callbacks gets registered with DAL layer.
160  *
161 
162  * \param[out]	 psIFConf  Currently this parameter not used.This  parameter to be other than NULL.
163  *
164  *
165  * \retval NFCSTATUS_SUCCESS             Operation is successful.
166  * \retval NFCSTATUS_INVALID_PARAMETER   At least one parameter of the function is invalid.
167  *
168  *\msc
169  *ClientApp,UpperLayer,phDal4Nfc;
170  *ClientApp=>phDal4Nfc [label="phDal4Nfc_Config()",URL="\ref phDal4Nfc_Config"];
171  *ClientApp<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
172  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Register()",URL="\ref phDal4Nfc_Register"];
173  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
174  *\endmsc
175  */
176 
177  extern
178  NFCSTATUS
179  phDal4Nfc_Register(
180                  phNfcIF_sReference_t   *psRefer,
181                  phNfcIF_sCallBack_t    if_cb,
182                  void *psIFConf
183                  );
184 
185 
186 /**
187  * \ingroup grp_nfc_dal
188  *
189  * \brief  Allows upper layer to unregister with DAL layer.
190  * This interface allows to unregister upper layer callback interfaces with DAL layer.
191  * \note: Once this this API is called DAL layer stops notifying upper layer callbacks in case
192  * any events reported within DAL.
193  *
194  * \param[in]  pContext        DAL context is provided by the upper layer.
195  *                             The DAL context earlier was given to the
196  *                             upper layer through the \ref
197  *                             \e phDal4Nfc_Register() function.
198  * \param[in]  pHwRef		   for future use .Currently this parameter is not used.
199  *                             This needs to be other than NULL.
200  *
201  * \retval NFCSTATUS_SUCCESS             Unregistration successful.
202  * \retval NFCSTATUS_INVALID_PARAMETER   At least one parameter of the function is invalid.
203  *
204  *\msc
205  *ClientApp,UpperLayer,phDal4Nfc;
206  *ClientApp=>phDal4Nfc [label="phDal4Nfc_Config()",URL="\ref phDal4Nfc_Config"];
207  *ClientApp<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
208  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Register()",URL="\ref phDal4Nfc_Register"];
209  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
210  *--- [label="Upper layer can issue Unregistration later"];
211  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Unregister()",URL="\ref phDal4Nfc_Unregister"];
212  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
213  *\endmsc
214  */
215 
216 
217  extern
218  NFCSTATUS
219  phDal4Nfc_Unregister(
220                    void   *pContext,
221                    void   *pHwRef
222                    );
223 
224 
225 /**
226 
227  * \ingroup grp_nfc_dal
228  *
229  *\brief This interface allows to initialize DAL layer.
230  * This API implements initialization of DAL layer. This includes :
231  *
232  * <br><br>. Initialize parameters for HW Interface.
233  *<br><br>. Initializing read and writer threads.
234  *<br><br>. Initializing read and write task specific events and event specific configurations.
235  *<br><br>. Initializing DAL layer specific details.
236  *
237  * \param[in]  pContext        DAL context provided by the upper layer.
238  *                             The DAL context will be exported to the
239  *							   upper layer via upper layer registration interface.
240  * \param[in]  pHwRef          information of the hardware
241  *
242  * \retval NFCSTATUS_SUCCESS            DAL initialization successful.
243  * \retval NFCSTATUS_INVALID_DEVICE     The device is not enumerated or the
244  *                                      Hardware Reference points to a device
245  *										which does not exist. Alternatively,
246  *                                      also already open devices produce this
247  *                                      error.
248  * \retval NFCSTATUS_INVALID_PARAMETER  At least one parameter of the function
249  *                                      is invalid.
250  *
251  *\msc
252  *ClientApp,UpperLayer,phDal4Nfc;
253  *ClientApp=>phDal4Nfc [label="phDal4Nfc_Config()",URL="\ref phDal4Nfc_Config"];
254  *ClientApp<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
255  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Register()",URL="\ref phDal4Nfc_Register"];
256  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
257  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Init()",URL="\ref	phDal4Nfc_Init"];
258  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
259  *--- [label="DAL intialised ,read for read /write operations"];
260  *\endmsc
261  */
262 
263  extern
264  NFCSTATUS
265  phDal4Nfc_Init(
266              void  *pContext,
267              void  *pHwRef
268              );
269 
270 
271 /**
272  * \ingroup grp_nfc_dal
273  *
274  * \brief This API implements Deintialisation of DAL layer.
275  *
276  *This API implements Deintialisation of DAL layer. It includes :
277  *<br><br>.Releases all the resources.( context,memory resources,read/write buffers).
278  *<br><br>.closes COMxx port which is used during DAL session.
279  *<br><br>.Terminates Reader and writer tasks.
280  *
281  * \param[in]  pContext        DAL context is provided by the upper layer.
282  *                             The DAL context earlier was given to the
283  *                             upper layer through the
284  *                             \ref \e phDal4Nfc_Register() function
285  * \param[in]  pHwRef           hardware reference context.
286  *
287  * \retval NFCSTATUS_SUCCESS            DAL shutdown successful
288  * \retval NFCSTATUS_FAILED             DAL shutdown failed(example.unable to
289  *                                      suspend thread, close HW Interface etc.)
290  * \retval NFCSTATUS_INVALID_PARAMETER  At least one parameter of the function
291  *                                      is invalid.
292  *
293  *\msc
294  *ClientApp,UpperLayer,phDal4Nfc;
295  *ClientApp=>phDal4Nfc [label="phDal4Nfc_Config()",URL="\ref phDal4Nfc_Config"];
296  *ClientApp<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
297  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Register()",URL="\ref phDal4Nfc_Register"];
298  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
299  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Init()",URL="\ref	phDal4Nfc_Init"];
300  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
301  *--- [label="Perform read write operation"];
302  *--- [label="DAL can be shutdown during upper layer deinit sequence"];
303  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Shutdown()",URL="\ref phDal4Nfc_Shutdown"];
304  *ClientApp<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
305  *\endmsc
306  */
307 
308  extern
309  NFCSTATUS
310  phDal4Nfc_Shutdown(
311                  void *pContext,
312                  void *pHwRef
313                  );
314 
315 /**
316  * \ingroup grp_nfc_dal
317  *
318  * \brief Allows to write data block to HW Interface.
319  *
320  * This asynchronous function writes the given block of data to the driver.
321  * This interface enables writer thread in case their is no write requests pending and returns
322  * sucessfully.Once writer thread completes write operation, it notifies upper layer using callback
323  * mechanism .
324  * \note writer thread notifies upper layer callback notified using  windows messaging  mechanism
325  * under deferred call context.
326  *
327  *
328  * \param[in]  pContext        DAL context is provided by the upper layer.
329  *                             The DAL
330  *                             context earlier was given to the upper layer
331  *                             through the \ref \e phDal4Nfc_Register() function
332  * \param[in]  pHwRef          information of the hardware.
333  * \param[in]  pBuffer         The information given by the upper layer to
334  *                             send it to the lower layer
335  * \param[in]  length          The length of pLlc_Buf, that needs to be sent
336  *                             to the lower layer is given by the upper layer
337  *
338  * \retval NFCSTATUS_PENDING                If the command is yet to be process.
339  * \retval NFCSTATUS_BUSY                   BUSY with previous write operation
340  * \retval NFCSTATUS_INVALID_DEVICE         The device has not been opened or has
341  *                                          been disconnected meanwhile
342  * \retval NFCSTATUS_INVALID_PARAMETER      At least one parameter of the function
343  *                                          is invalid.
344  *
345  *\msc
346  *ClientApp,UpperLayer,phDal4Nfc;
347 *--- [label="Configure,intialise DAL layer and Register with DAL "];
348  *UpperLayer=>phDal4Nfc	[label="phDal4Nfc_Write()",URL="\ref  phDal4Nfc_Write()"];
349  *UpperLayer<<phDal4Nfc	[label="NFCSTATUS_PENDING"];
350  *--- [label="DAL posts write message to main thread under deferred call context"];
351  *phDal4Nfc=>phDal4Nfc [label="phDal4Nfc_DeferredCall()",URL="\ref	phDal4Nfc_DeferredCall()"];
352  *ClientApp=>phDal4Nfc	[label="phDal4Nfc_DeferredCb()",URL="\ref  phDal4Nfc_DeferredCb()"];
353  *phDal4Nfc=>UpperLayer	[label="send_complete",URL="\ref phDal4Nfc_DeferredCb()"];
354  *ClientApp<<phDal4Nfc	[label="NFCSTATUS_SUCCESS"];
355  *\endmsc
356  */
357  extern
358  NFCSTATUS
359  phDal4Nfc_Write(
360              void *pContext,
361              void *pHwRef,
362              uint8_t *pBuffer,
363              uint16_t length
364              );
365 
366 
367 /**
368  * \ingroup grp_nfc_dal
369  *
370  * \brief Allows to Read data block from HW Interface.
371  *
372  * This asynchronous function reads the data from the driver in which length
373  * and the required buffer are sent by upper layer. This interface enables
374  * reader thread in case there is no read requests pending and returns sucessfully.
375  * Once read operation is complete, it notifies  to upper layer through callback
376  * registered in the \b \e phDal4Nfc_Register() function.
377  *
378  *
379  * \param[in]  pContext        DAL context is provided by the upper layer.
380  *                             The DAL context earlier was given to the
381  *                             upper layer through the
382  *                             \b \e phDal4Nfc_Register() function
383  * \param[in]  pHwRef          Information of the hardware
384  * \param[in]  pBuffer         The information given by the upper layer to
385  *                             receive data from the lower layer
386  * \param[in]  length          The length of pBuffer given by the upper layer
387  *
388  * \retval NFCSTATUS_PENDING                If the command is yet to be processed.
389  * \retval NFCSTATUS_INVALID_PARAMETER      At least one parameter of the function
390  *                                          is invalid.
391  * \retval NFCSTATUS_INVALID_DEVICE         The device has not been opened or has
392  *                                          been disconnected meanwhile
393  *
394  *\msc
395  *ClientApp,UpperLayer,phDal4Nfc;
396  *--- [label="Configure,intialise DAL layer and Register with DAL "];
397  *UpperLayer=>phDal4Nfc	[label="phDal4Nfc_Write()",URL="\ref phDal4Nfc_Write()"];
398  *UpperLayer<<phDal4Nfc	[label="NFCSTATUS_PENDING"];
399  *--- [label="DAL posts write message to main thread under deferred call context"];
400  *phDal4Nfc=>phDal4Nfc [label="phDal4Nfc_DeferredCall()",URL="\ref	phDal4Nfc_DeferredCall()"];
401  *ClientApp=>phDal4Nfc	[label="phDal4Nfc_DeferredCb()",URL="\ref  phDal4Nfc_DeferredCb()"];
402  *phDal4Nfc=>UpperLayer	[label="send_complete",URL="\ref phDal4Nfc_DeferredCb()"];
403  *ClientApp<<phDal4Nfc	[label="NFCSTATUS_SUCCESS"];
404  *--- [label="upper layer can issue read request"];
405  *UpperLayer=>phDal4Nfc	[label="phDal4Nfc_Read()",URL="\ref phDal4Nfc_Read()"];
406  *UpperLayer<<phDal4Nfc	[label="NFCSTATUS_PENDING"];
407  *--- [label="DAL posts read message to main thread under deferred call context"];
408  *phDal4Nfc=>phDal4Nfc [label="phDal4Nfc_DeferredCall()",URL="\ref	phDal4Nfc_DeferredCall()"];
409  *ClientApp=>phDal4Nfc	[label="phDal4Nfc_DeferredCb()",URL="\ref  phDal4Nfc_DeferredCb()"];
410  *phDal4Nfc=>UpperLayer	[label="receive_complete",URL="\ref  phDal4Nfc_DeferredCb()"];
411  *ClientApp<<phDal4Nfc	[label="NFCSTATUS_SUCCESS"];
412 
413  *\endmsc
414  */
415 
416  extern
417  NFCSTATUS
418  phDal4Nfc_Read(
419             void *pContext,
420             void *pHwRef,
421             uint8_t *pBuffer,
422             uint16_t length
423             );
424 
425 /**
426  * \ingroup grp_nfc_dal
427  *
428  * \brief Allows to wait before reading data block from HW Interface.
429  *
430  * This asynchronous function waits before reading the data from the
431  * driver in which length  and the required buffer are sent by upper layer.
432  * This interface  enables reader thread  to wait for predefined time period
433  * (predefined time period is configurable by the DAL implementer) to complete
434  * read request.Once read operation is complete, it notifies to upper layer
435  * through callback registered in the \b \e phDal4Nfc_Register()
436  * function. Read request is expected to get complete within this time.
437  *
438  * \param[in]  pContext        DAL context is provided by the upper layer.
439  *                             The DAL context earlier was given to the
440  *							   upper layer through the
441  *                             \b \e phDal4Nfc_Register() function
442  * \param[in]  pHwRef          Information of the hardware
443  * \param[in]  pBuffer         The information given by the upper layer to
444  *                             receive data from the lower layer
445  * \param[in]  length          The length of pBuffer given by the upper layer
446  *
447  * \retval NFCSTATUS_SUCCESS                DAL receive successful
448  * \retval NFCSTATUS_BUSY                   BUSY with previous receive operation
449  * \retval NFCSTATUS_INVALID_PARAMETER      At least one parameter of the
450  *                                          function is invalid.
451  * \retval NFCSTATUS_INVALID_DEVICE         The device has not been opened or has
452  *                                          been disconnected meanwhile
453  *
454  *
455  *\msc
456  *ClientApp,UpperLayer,phDal4Nfc;
457  *--- [label="Configure,intialise DAL layer and Register with DAL "];
458  *UpperLayer=>phDal4Nfc	[label="phDal4Nfc_Write()",URL="\ref  phDal4Nfc_Write()"];
459  *UpperLayer<<phDal4Nfc	[label="NFCSTATUS_PENDING"];
460  *--- [label="DAL posts write message to main thread under deferred call context"];
461  *phDal4Nfc=>phDal4Nfc [label="phDal4Nfc_DeferredCall()",URL="\ref	phDal4Nfc_DeferredCall()"];
462  *ClientApp=>phDal4Nfc	[label="phDal4Nfc_DeferredCb()",URL="\ref  phDal4Nfc_DeferredCb()"];
463  *phDal4Nfc=>UpperLayer	[label="send_complete",URL="\ref phDal4Nfc_DeferredCb()"];
464  *ClientApp<<phDal4Nfc	[label="NFCSTATUS_SUCCESS"];
465  *--- [label="upper layer can issue read wait request "];
466  *UpperLayer=>phDal4Nfc	[label="phDal4Nfc_ReadWait()",URL="\ref phDal4Nfc_ReadWait()"];
467  *UpperLayer<<phDal4Nfc	[label="NFCSTATUS_PENDING"];
468  *--- [label="DAL posts read wait message to main thread under deferred call context"];
469  *phDal4Nfc=>phDal4Nfc [label="phDal4Nfc_DeferredCall()",URL="\ref	phDal4Nfc_DeferredCall()"];
470  *ClientApp=>phDal4Nfc	[label="phDal4Nfc_DeferredCb()",URL="\ref  phDal4Nfc_DeferredCb()"];
471  *phDal4Nfc=>UpperLayer	[label="receive_complete",URL="\ref  phDal4Nfc_DeferredCb()"];
472  *ClientApp<<phDal4Nfc	[label="NFCSTATUS_SUCCESS"];
473  *
474  *\endmsc
475  */
476 
477 
478  extern
479  NFCSTATUS
480  phDal4Nfc_ReadWait(
481                 void *pContext,
482                 void *pHwRef,
483                 uint8_t *pBuffer,
484                 uint16_t length
485                 );
486 
487 
488 /**
489  * \ingroup grp_nfc_dal
490  *
491  *\brief  Aborts read wait opertaion.
492  *
493  * This asynchronous function issues cancellation of the outstanding
494  * \b \e phDal4Nfc_ReadWait request.If upper layer wants to cancel the
495  * ongoing read wait operation this function is used. e.g. to abort the
496  * transactions.
497  *
498  * \param[in]  pContext        DAL context is provided by the upper layer.
499  *                             The DAL context earlier was given to the
500  *                             upper layer through the
501  *                             \b \e phDal4Nfc_Register() function
502  * \param[in]  pHwRef          Information of the hardware
503  *
504  * \retval NFCSTATUS_SUCCESS                    DAL receive successful
505  * \retval NFCSTATUS_INVALID_PARAMETER          At least one parameter of the
506  *                                              function is invalid.
507  * \retval NFCSTATUS_INVALID_DEVICE             The device has not been opened
508  *                                              or has been disconnected meanwhile
509  * \retval NFCSTATUS_BOARD_COMMUNICATION_ERROR  A board communication error occurred
510                                                 (e.g. configuration went wrong).
511  *
512  *
513  *\msc
514  *ClientApp,UpperLayer,phDal4Nfc;
515  *--- [label="Configure,intialise DAL layer and Register with DAL "];
516  *UpperLayer=>phDal4Nfc	[label="phDal4Nfc_Write()",URL="\ref  phDal4Nfc_Write()"];
517  *UpperLayer<<phDal4Nfc	[label="NFCSTATUS_PENDING"];
518  *--- [label="DAL posts write message to main thread under deferred call context"];
519  *phDal4Nfc=>phDal4Nfc [label="phDal4Nfc_DeferredCall()",URL="\ref	phDal4Nfc_DeferredCall()"];
520  *ClientApp=>phDal4Nfc	[label="phDal4Nfc_DeferredCb()",URL="\ref Call phDal4Nfc_DeferredCb()"];
521  *phDal4Nfc=>UpperLayer	[label="send_complete",URL="\ref phDal4Nfc_DeferredCb()"];
522  *ClientApp<<phDal4Nfc	[label="NFCSTATUS_SUCCESS"];
523  *--- [label="upper layer can issue read wait request "];
524  *UpperLayer=>phDal4Nfc	[label="phDal4Nfc_ReadWait()",URL="\ref phDal4Nfc_ReadWait()"];
525  *UpperLayer<<phDal4Nfc	[label="NFCSTATUS_PENDING"];
526  *--- [label="Issue Read wait cancel request here"];
527  *UpperLayer=>phDal4Nfc	[label="phDal4Nfc_ReadWaitCancel()",URL="\ref phDal4Nfc_ReadWaitCancel()"];
528  **UpperLayer<<phDal4Nfc	[label="NFCSTATUS_SUCCESS"];
529  *\endmsc
530  */
531  extern
532  NFCSTATUS
533  phDal4Nfc_ReadWaitCancel(
534                         void *pContext,
535                         void *pHwRef
536                         );
537 
538 /**
539  * \ingroup grp_nfc_dal
540  *
541  * \brief DAL config function
542  * This synchronous function configures the given HW Interface and
543  * sends the HANDLE to the caller.
544  *
545  * \param[in]       config     DAL configuration details as provided
546  *                             by the upper layer.
547  * \param[in,out]   phwref     pointer to which valid Handle to DAL
548  *                             interface is assigned.
549  *
550  * \retval NFCSTATUS_SUCCESS                    Configuration happened successfully.
551  * \retval NFCSTATUS_INVALID_PARAMETER          At least one parameter of the function
552  *                                              is invalid.
553  * \retval NFCSTATUS_FAILED                     Configuration failed(example.unable to
554  *                                              open HW Interface).
555  * \retval NFCSTATUS_INVALID_DEVICE             The device has not been opened or
556  *                                              has been disconnected meanwhile
557  * \retval NFCSTATUS_BOARD_COMMUNICATION_ERROR  A board communication error occurred
558                                                 (e.g. configuration went wrong).
559  *\msc
560  *ClientApp,UpperLayer,phDal4Nfc;
561  *ClientApp=>phDal4Nfc [label="phDal4Nfc_Config()",URL="\ref phDal4Nfc_Config"];
562  *ClientApp<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
563  *\endmsc
564  */
565  extern
566  NFCSTATUS
567  phDal4Nfc_Config (
568                 pphDal4Nfc_sConfig_t config,
569                 void **phwref
570                 );
571 
572  /**
573  * \ingroup grp_nfc_dal
574  *
575  * \brief Release configuration for the given HW Interface.
576  *
577  * \copydoc page_reg Release all the variables of the DAL component, that has been
578  *      initialised in \b phDal4Nfc_Config function (Synchronous function).
579  *
580  * \param[in] pHwRef            Link information of the hardware
581  *
582  * \retval NFCSTATUS_SUCCESS            DAL Configuration Released successfully.
583  * \retval NFCSTATUS_FAILED             Configuration release failed(example: Unable to close Com port).
584  *
585  *\msc
586  *ClientApp,UpperLayer,phDal4Nfc;
587  *ClientApp=>phDal4Nfc [label="phDal4Nfc_Config()",URL="\ref phDal4Nfc_Config"];
588  *ClientApp<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
589  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Register()",URL="\ref phDal4Nfc_Register"];
590  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
591  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Init()",URL="\ref	phDal4Nfc_Init"];
592  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
593  *--- [label="Perform read write operation"];
594  *--- [label="DAL resources can be released during upper layer deinit sequence"];
595  *UpperLayer=>phDal4Nfc [label="phDal4Nfc_Shutdown()",URL="\ref	phDal4Nfc_Shutdown"];
596  *UpperLayer<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
597  *ClientApp=>phDal4Nfc [label="phDal4Nfc_ConfigRelease()",URL="\ref phDal4Nfc_ConfigRelease"];
598  *ClientApp<<phDal4Nfc [label="NFCSTATUS_SUCCESS"];
599  *\endmsc
600  */
601 extern
602 NFCSTATUS
603 phDal4Nfc_ConfigRelease(
604     void        *pHwRef);
605 
606 extern
607 NFCSTATUS
608 phDal4Nfc_Reset(long level);
609 
610 extern
611 NFCSTATUS
612 phDal4Nfc_Download();
613 
614 /******************** Function declarations *************************/
615 
616 #endif /* PHDALNFC_H */
617 
618 /****************************************** END OF FILE ***************************************************/
619 
620