Home | History | Annotate | Download | only in src
      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