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  * \file  phFriNfc_NdefReg.h
     19  * \brief NFC Ndef Registration / Listening.
     20  *
     21  * Project: NFC-FRI
     22  *
     23  * $Date: Fri Oct  5 10:10:07 2007 $
     24  * $Author: frq05303 $
     25  * $Revision: 1.1 $
     26  * $Aliases: NFC_FRI1.1_WK826_PREP1,NFC_FRI1.1_WK826_R1,NFC_FRI1.1_WK826_R2,NFC_FRI1.1_WK830_PREP1,NFC_FRI1.1_WK830_PREP2,NFC_FRI1.1_WK830_R5_1,NFC_FRI1.1_WK830_R5_2,NFC_FRI1.1_WK830_R5_3,NFC_FRI1.1_WK832_PREP1,NFC_FRI1.1_WK832_PRE2,NFC_FRI1.1_WK832_PREP2,NFC_FRI1.1_WK832_PREP3,NFC_FRI1.1_WK832_R5_1,NFC_FRI1.1_WK832_R6_1,NFC_FRI1.1_WK834_PREP1,NFC_FRI1.1_WK834_PREP2,NFC_FRI1.1_WK834_R7_1,NFC_FRI1.1_WK836_PREP1,NFC_FRI1.1_WK836_R8_1,NFC_FRI1.1_WK838_PREP1,NFC_FRI1.1_WK838_R9_PREP2,NFC_FRI1.1_WK838_R9_1,NFC_FRI1.1_WK840_R10_PREP1,NFC_FRI1.1_WK840_R10_1,NFC_FRI1.1_WK842_R11_PREP1,NFC_FRI1.1_WK842_R11_PREP2,NFC_FRI1.1_WK842_R11_1,NFC_FRI1.1_WK844_PREP1,NFC_FRI1.1_WK844_R12_1,NFC_FRI1.1_WK846_PREP1,NFC_FRI1.1_WK846_R13_1,NFC_FRI1.1_WK848_PREP1,NFC_FRI1.1_WK848_R14_1,NFC_FRI1.1_WK850_PACK1,NFC_FRI1.1_WK851_PREP1,NFC_FRI1.1_WK850_R15_1,NFC_FRI1.1_WK902_PREP1,NFC_FRI1.1_WK902_R16_1,NFC_FRI1.1_WK904_PREP1,NFC_FRI1.1_WK904_R17_1,NFC_FRI1.1_WK906_R18_1,NFC_FRI1.1_WK908_PREP1,NFC_FRI1.1_WK908_R19_1,NFC_FRI1.1_WK910_PREP1,NFC_FRI1.1_WK910_R20_1,NFC_FRI1.1_WK912_PREP1,NFC_FRI1.1_WK912_R21_1,NFC_FRI1.1_WK914_PREP1,NFC_FRI1.1_WK914_R22_1,NFC_FRI1.1_WK914_R22_2,NFC_FRI1.1_WK916_R23_1,NFC_FRI1.1_WK918_R24_1,NFC_FRI1.1_WK920_PREP1,NFC_FRI1.1_WK920_R25_1,NFC_FRI1.1_WK922_PREP1,NFC_FRI1.1_WK922_R26_1,NFC_FRI1.1_WK924_PREP1,NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,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 $
     27  *
     28  */
     29 
     30 #ifndef PHFRINFC_NDEFREG_H
     31 #define PHFRINFC_NDEFREG_H
     32 
     33 #ifndef PH_FRINFC_EXCLUDE_FROM_TESTFW /* */
     34 
     35 /**
     36  *  \name NDEF Registry and Listening
     37  *
     38  */
     39 /*@{*/
     40 #define PH_FRINFC_NDEFREG_FILEREVISION "$Revision: 1.1 $" /** \ingroup grp_file_attributes */
     41 #define PH_FRINFC_NDEFREG_FILEALIASES  "$Aliases: NFC_FRI1.1_WK826_PREP1,NFC_FRI1.1_WK826_R1,NFC_FRI1.1_WK826_R2,NFC_FRI1.1_WK830_PREP1,NFC_FRI1.1_WK830_PREP2,NFC_FRI1.1_WK830_R5_1,NFC_FRI1.1_WK830_R5_2,NFC_FRI1.1_WK830_R5_3,NFC_FRI1.1_WK832_PREP1,NFC_FRI1.1_WK832_PRE2,NFC_FRI1.1_WK832_PREP2,NFC_FRI1.1_WK832_PREP3,NFC_FRI1.1_WK832_R5_1,NFC_FRI1.1_WK832_R6_1,NFC_FRI1.1_WK834_PREP1,NFC_FRI1.1_WK834_PREP2,NFC_FRI1.1_WK834_R7_1,NFC_FRI1.1_WK836_PREP1,NFC_FRI1.1_WK836_R8_1,NFC_FRI1.1_WK838_PREP1,NFC_FRI1.1_WK838_R9_PREP2,NFC_FRI1.1_WK838_R9_1,NFC_FRI1.1_WK840_R10_PREP1,NFC_FRI1.1_WK840_R10_1,NFC_FRI1.1_WK842_R11_PREP1,NFC_FRI1.1_WK842_R11_PREP2,NFC_FRI1.1_WK842_R11_1,NFC_FRI1.1_WK844_PREP1,NFC_FRI1.1_WK844_R12_1,NFC_FRI1.1_WK846_PREP1,NFC_FRI1.1_WK846_R13_1,NFC_FRI1.1_WK848_PREP1,NFC_FRI1.1_WK848_R14_1,NFC_FRI1.1_WK850_PACK1,NFC_FRI1.1_WK851_PREP1,NFC_FRI1.1_WK850_R15_1,NFC_FRI1.1_WK902_PREP1,NFC_FRI1.1_WK902_R16_1,NFC_FRI1.1_WK904_PREP1,NFC_FRI1.1_WK904_R17_1,NFC_FRI1.1_WK906_R18_1,NFC_FRI1.1_WK908_PREP1,NFC_FRI1.1_WK908_R19_1,NFC_FRI1.1_WK910_PREP1,NFC_FRI1.1_WK910_R20_1,NFC_FRI1.1_WK912_PREP1,NFC_FRI1.1_WK912_R21_1,NFC_FRI1.1_WK914_PREP1,NFC_FRI1.1_WK914_R22_1,NFC_FRI1.1_WK914_R22_2,NFC_FRI1.1_WK916_R23_1,NFC_FRI1.1_WK918_R24_1,NFC_FRI1.1_WK920_PREP1,NFC_FRI1.1_WK920_R25_1,NFC_FRI1.1_WK922_PREP1,NFC_FRI1.1_WK922_R26_1,NFC_FRI1.1_WK924_PREP1,NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,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 $"      /** \ingroup grp_file_attributes */
     42 /*@}*/
     43 #include <phFriNfc_NdefRecord.h>
     44 
     45 #endif /* Exclude from test fw */
     46 
     47 /*
     48  * NDEF Registration And Listening - States of the Finite State machine
     49  *
     50  */
     51 #define PH_FRINFC_NDEFREG_STATE_INIT        0       /**< \internal Init state. The start-up state */
     52 #define PH_FRINFC_NDEFREG_STATE_DIS_PKT     1       /**< \internal Dispatch Packet is in progress */
     53 #define PH_FRINFC_NDEFREG_STATE_DIS_RCD     2       /**< \internal Dispatch Record is in progress */
     54 
     55 /*
     56  * NDEF Registration And Listening internal definitions
     57  */
     58 #define PH_FRINFC_NDEFRECORD_TNF_MASK       0x07    /**< \internal */
     59 #define PH_FRINFC_NDEFREG_CH_FLG_ARR_INDEX  50      /**< \internal */
     60 
     61 
     62 
     63 
     64 /** \defgroup grp_fri_nfc_ndef_reg NDEF Registry
     65  *
     66  *  This component implements the NDEF Registration and Listening functionality.
     67  */
     68 /*@{*/
     69 
     70 /*
     71  * \name NDEF Registration And Listening callback and node definitions
     72  *
     73  *  \ref PH_FRINFC_NDEFREG_MAX_RTD_REGISTERED is the maximum number of RTDs
     74  *  that can be registered in a node.\n
     75  *  \ref PH_FRINFC_NDEFREG_MAX_RTD is the maximum number of Records that can
     76  *  be present in a single callback function.
     77  */
     78 /*@{*/
     79 #define PH_FRINFC_NDEFREG_MAX_RTD_REGISTERED    64    /**< Maximum number of RTDs per node */
     80 #define PH_FRINFC_NDEFREG_MAX_RTD                8    /**< Maximum number of RTDs per callback function. */
     81 /*@}*/
     82 
     83 /**
     84  *  \brief NDEF Callback
     85  *
     86  * \copydoc page_reg
     87  *
     88  *  Upon reception of a NDEF record the component calls into the function registered as a listener
     89  *  for a NDEF type. The function must be compatible to the declaration of the pointer described in
     90  *  this section.
     91  *
     92  * \par Parameter
     93  *      The underlying type of the callback parameter (void pointer) is \ref phFriNfc_NdefReg_CbParam_t .
     94  *
     95  * \note On systems, requiring non-blocking operation, the user-defined callback function must not block,
     96  *       but just deliver the data and return immediately. In this case the CB must make a copy of the
     97  *       parameter structure (\ref phFriNfc_NdefReg_CbParam_t) and store it within the environment of the
     98  *       registered listener. A copy is needed because once the CB returns the values behind the parameter
     99  *       pointer become invalid. We observe the following rules:
    100  *       - This component does not rely on lower layers (e.g. HAL), therefore it doesn't need to handle
    101  *         completion routines.
    102  *       - This library gets a NDEF message and extracts the records using the NDEF Record (Tools) Library.
    103  *       - Alternatively, this component can process pre-extracted NDEF records.
    104  *       - This library only handles TOP level records, cascaded content is ignored.
    105  *       - Functions do not block: The \ref phFriNfc_NdefReg_Process "Process" function needs to be called
    106  *         periodically until completion.
    107  *       .
    108  */
    109 typedef void(*pphFriNfc_NdefReg_Cb_t)(void*);
    110 
    111 
    112 /**
    113  * \brief Callback Parameter. This parameter is provided to the CB function that serves
    114  *        as the notifier for services/applicatioon/software components registered for a specific
    115  *        NDEF Type.
    116  *
    117  * All information required to perform the \ref pphFriNfc_Cr_t "callback" operation is contained
    118  * within the structure. The members of the structure may only be read, changing them is not allowed.
    119  *
    120  *
    121  */
    122 typedef struct phFriNfc_NdefReg_CbParam
    123 {
    124     /**
    125      * Number of array Positions. Each array position carries data from a NDEF Record. The maximum
    126      * number is \ref PH_FRINFC_NDEFREG_MAX_RTD .
    127      */
    128     uint8_t                 Count;
    129 
    130     /**
    131      * The records that matched with the registred RTDs for this callback.
    132      * The number of records here will be equal to the first parameter Count.
    133      */
    134     phFriNfc_NdefRecord_t   Records[PH_FRINFC_NDEFREG_MAX_RTD];
    135 
    136     /** Indicates whether a record is chunked or not. */
    137     uint8_t                 Chunked[PH_FRINFC_NDEFREG_MAX_RTD];
    138 
    139     /** Pointer to the raw record. */
    140     uint8_t                 *RawRecord[PH_FRINFC_NDEFREG_MAX_RTD];
    141 
    142     /** Size of the raw record */
    143     uint32_t                RawRecordSize[PH_FRINFC_NDEFREG_MAX_RTD];
    144 
    145     /** Pointer for usage by the registering entity. The software component that registers for
    146         a specific RTD can specify this \b context pointer. With the help of the pointer
    147         the component is able to resolve its own address, context or object, respectively.\n
    148         \b Example: \ref grp_fri_nfc_ndef_reg "This SW component" is embedded into a C++ system
    149         that has one object registered for a certain RTD. \ref grp_fri_nfc_ndef_reg "This library"
    150         itself is written in C and therefore it requires a pure "C" callback that can be provided by
    151         C++ through a \b static member function. The registering C++ object will consequently set the
    152         \ref phFriNfc_NdefReg_CbParam_t::CbContext pointer to its \c this pointer. When the static
    153         member function of the C++ class is called it immediately knows the instance and can
    154         call into one of the C++ instance members again (\ref phFriNfc_NdefReg_CbParam_t::CbContext
    155         needs to be casted back to the original C++ class type).
    156     */
    157     void                    *CbContext;
    158 } phFriNfc_NdefReg_CbParam_t;
    159 
    160 
    161 
    162 /**
    163  * \brief Registration of a Callback - Parameter Structure
    164  *
    165  * This structure is used by the registering software. The registering listener has to \b initialise
    166  * \b all \b members of the structure that are \b not \b internal. Members for \b internal use \b must
    167  * \b not be set by the registering entity. Used by \ref phFriNfc_NdefReg_CbParam_t .
    168  *
    169  */
    170 typedef struct phFriNfc_NdefReg_Cb
    171 {
    172     /**
    173      * Number of array Positions. Each array position carries data specifying a RTD. The maximum number
    174      * is \ref PH_FRINFC_NDEFREG_MAX_RTD .
    175      *
    176      * \li Needs to be set by the registering entity.
    177      */
    178     uint8_t                     NumberOfRTDs;
    179     /**
    180      *  The Type Name Format, according to the NDEF specification, see the NDEF Record (Tools) component.
    181      *
    182      * \li Needs to be set by the registering entity.
    183      */
    184     uint8_t                     Tnf[PH_FRINFC_NDEFREG_MAX_RTD_REGISTERED];
    185 
    186     /**
    187      * Array of pointers to the individual RTD buffers.
    188      *
    189      * \li Needs to be set by the registering entity.
    190      */
    191     uint8_t                     *NdefType[PH_FRINFC_NDEFREG_MAX_RTD_REGISTERED];
    192 
    193     /**
    194      * Array of length indicators of the RTD buffers.
    195      *
    196      * \li Needs to be set by the registering entity.
    197      */
    198     uint8_t                      NdeftypeLength[PH_FRINFC_NDEFREG_MAX_RTD_REGISTERED];
    199 
    200     /**
    201      * Function pointer to the C-style function within the registering entity.
    202      *
    203      * \li Needs to be set by the registering entity.
    204      */
    205     pphFriNfc_NdefReg_Cb_t       NdefCallback;
    206 
    207     /**
    208      * Context pointer of the registering entity (see \ref phFriNfc_NdefReg_CbParam_t).
    209      *
    210      * \li Needs to be set by the registering entity.
    211      */
    212     void                        *CbContext;
    213 
    214     /** \internal
    215      * This member is required by the library to link to the previous registered item. In case of the
    216      * first item this member is NULL.
    217      */
    218     struct phFriNfc_NdefReg_Cb  *Previous;
    219     /** \internal
    220      * This member is required by the library to link to the next registered item. In case of the
    221      * last item this member is NULL.
    222      */
    223     struct phFriNfc_NdefReg_Cb  *Next;
    224 } phFriNfc_NdefReg_Cb_t;
    225 
    226 
    227 /**
    228  *  \brief NFC NDEF Registry Compound
    229  *
    230  *  The NDEF Registry Compound. This is the context structure of the NDEF Registry and
    231  *  Listener.
    232  *
    233  */
    234 typedef struct phFriNfc_NdefReg
    235 {
    236     phFriNfc_NdefReg_Cb_t       *NdefTypeList;    /**< \internal List of Callback Structures (Listeners). */
    237     uint8_t                     *NdefData;        /**< \internal Data to process. */
    238     uint32_t                    NdefDataLength;   /**< \internal Length of the NDEF data. */
    239     uint8_t                     State;            /**< \internal The state of the library. */
    240     uint8_t                   **NdefTypes;        /**< \internal */
    241 
    242     phFriNfc_NdefRecord_t      *RecordsExtracted; /**< \internal */
    243 
    244     phFriNfc_NdefReg_CbParam_t  *CbParam;         /**< \internal */
    245 
    246     /*  Harsha: Fix for 0000252: [JF] Buffer overshoot in phFriNfc_NdefRecord_GetRecords */
    247     uint8_t                     *IsChunked;       /**< \internal Array of chunked flags */
    248 
    249     /*  Harsha: Fix for 0000252: [JF] Buffer overshoot
    250         in phFriNfc_NdefRecord_GetRecords   */
    251     uint32_t                    NumberOfRecords;  /**< \internal Space available in NdefTypes
    252                                                                 and IsChunked arrays */
    253 
    254     /*  Harsha: Fix for 0000243: [JF] phFriNfc_NdefReg_Process
    255         won't parse correctly chunked records   */
    256     /*  Used to remember the last valid TNF */
    257     uint8_t                     validPreviousTnf; /**< \internal The last valid TNF that we had. */
    258 
    259     uint32_t                    NumberOfNdefTypes;/**< \internal */
    260 
    261     uint32_t                    RecordIndex;      /**< \internal */
    262 
    263     uint32_t                    RtdIndex;         /**< \internal */
    264 
    265     /*  This flag is used to remember whether we have found a
    266         TNF which matches with the Registered RTD */
    267     uint8_t                     MainTnfFound;     /**< \internal */
    268 
    269     /*  This flag is used to tell whether the present record
    270         being processed is newly extracted */
    271     uint8_t                     newRecordextracted;/**< \internal */
    272 
    273 }phFriNfc_NdefReg_t;
    274 
    275 
    276 #ifndef PH_FRINFC_EXCLUDE_FROM_TESTFW /* */
    277 
    278 /**
    279  * \brief Ndef Registry \b Reset function
    280  *
    281  * \copydoc page_reg
    282  *
    283  * Resets the component instance to the initial state and lets the component forget about
    284  * the list of registered items. Does basic initialisation.
    285  *
    286  * \param[in] NdefReg Pointer to a valid or uninitialised instance of \ref phFriNfc_NdefReg_t .
    287  *
    288  * \param[in] NdefTypesarray Array of pointers to individual NDEF Types. Later used to store
    289  *            the NdefTypes
    290  *
    291  * \param[in] RecordsExtracted Pointer to an uninitialised instance of the NDEF Record structure
    292  *            that is later used to retrieve the record information.
    293  *
    294  * \param[in] CbParam Pointer to an un-initialised instance of \ref phFriNfc_NdefReg_CbParam_t
    295  *            structure, which is later used to store the callback parameters.
    296  *
    297  * \param[in] ChunkedRecordsarray Pointer to an array of bytes. Later used to store the
    298  *            Chunked record flags.
    299  *
    300  * \param[in] NumberOfRecords The number of members in the arrays NdefTypesarray and ChunkedRecordsarray.
    301  *
    302  * \retval NFCSTATUS_SUCCESS                The operation has been successful.
    303  * \retval NFCSTATUS_INVALID_PARAMETER      At least one parameter of the function is invalid.
    304  *
    305  * \note  This function has to be called at the beginning, after creating an instance of
    306  *        \ref phFriNfc_NdefReg_t .
    307  */
    308 NFCSTATUS phFriNfc_NdefReg_Reset(phFriNfc_NdefReg_t          *NdefReg,
    309                                  uint8_t                    **NdefTypesarray,
    310                                  phFriNfc_NdefRecord_t       *RecordsExtracted,
    311                                  phFriNfc_NdefReg_CbParam_t  *CbParam,
    312                                  uint8_t                     *ChunkedRecordsarray,
    313                                  uint32_t                     NumberOfRecords);
    314 
    315 
    316 /**
    317  * \brief Ndef Registry \b Add \b Callback function
    318  *
    319  * \copydoc page_reg
    320  *
    321  * Adds an NDEF type listener to the (internal) list of listeners:
    322  * The registering caller or embedding SW must create an instance of \ref phFriNfc_NdefReg_Cb_t and
    323  * hand the reference over to this function. The library does no allocation of memory.
    324  *
    325  * \param[in] NdefReg Pointer to an initialised instance of \ref phFriNfc_NdefReg_t that holds the
    326  *            context of the current component instance.
    327  *
    328  * \param[in] NdefCb Pointer to a caller-initialised structure describing the context of a Listener
    329  *            that requests its registration.
    330  *
    331  * \retval NFCSTATUS_SUCCESS                                        The operation has been successful.
    332  * \retval NFCSTATUS_INVALID_PARAMETER                              At least one parameter of the function
    333  *                                                                  is invalid. or Number of RTDs in NdefCb
    334  *                                                                  Structure is greater than
    335  *                                                                  PH_FRINFC_NDEFREG_MAX_RTD_REGISTERED
    336  *
    337  * \note This function returns once the listener is registered successfully or an error occurs.
    338  */
    339 NFCSTATUS phFriNfc_NdefReg_AddCb(phFriNfc_NdefReg_t     *NdefReg,
    340                                  phFriNfc_NdefReg_Cb_t  *NdefCb);
    341 
    342 
    343 /**
    344  * \brief NDEF Registry \b Remove \b Callback function
    345  *
    346  * \copydoc page_reg
    347  *
    348  * Removes a specific listener from the list: The element to remove is specified by its address.
    349  * As the library does no de-allocation the caller of this function  needs to take care of the
    350  * correct disposal of the removed \ref phFriNfc_NdefReg_Cb_t instance once this function returns
    351  * successfully.
    352  *
    353  * \param[in] NdefReg Pointer to an initialised instance of \ref phFriNfc_NdefReg_t that holds the
    354  *            context of this component.
    355  *
    356  * \param[in] NdefCb Pointer to a caller-initialised structure describing the context of a Listener
    357  *            that requests its un-registration.
    358  *
    359  * \retval NFCSTATUS_SUCCESS                The operation has been successful.
    360  * \retval NFCSTATUS_INVALID_PARAMETER      At least one parameter of the function is invalid.
    361  * \retval NFCSTATUS_NODE_NOT_FOUND         If the internal list is NULL or a list node is not found.
    362  *
    363  * \note This function returns once the listener is removed successfully or an error occurs.
    364  */
    365 NFCSTATUS phFriNfc_NdefReg_RmCb(phFriNfc_NdefReg_t    *NdefReg,
    366                                 phFriNfc_NdefReg_Cb_t *NdefCb);
    367 
    368 
    369 
    370 /**
    371  * \brief NDEF Registry \b Dispatch \b Packet function
    372  *
    373  * \copydoc page_reg
    374  *
    375  * The entry point for NDEF \b PACKETS retrieved from the Peer (Remote) Device:
    376  * The function performs a reset of the state. It starts the action (state machine). For actual
    377  * processing a periodic call of \ref phFriNfc_NdefReg_Process has to be done. This
    378  * function parses the Message, isolates the record, looks for a match with the registered
    379  * RTDs and if a match is found, it calls the related callback. This procedure is done for each
    380  * record in the Message
    381  *
    382  * \param[in] NdefReg Pointer to an initialised instance of \ref phFriNfc_NdefReg_t that holds the
    383  *            context of this component.
    384  *
    385  * \param[in] PacketData Pointer to a NDEF Packet that has been received.
    386  *
    387  * \param[in] PacketDataLength Length of the NDEF packet to process.
    388  *
    389  * \retval NFCSTATUS_SUCCESS                The operation has been successfully initiated.
    390  * \retval NFCSTATUS_INVALID_PARAMETER      At least one parameter of the function is invalid.
    391  *
    392  * \note This function returns once the operation is initiated or an error occurs.
    393  *
    394  */
    395 NFCSTATUS phFriNfc_NdefReg_DispatchPacket(phFriNfc_NdefReg_t    *NdefReg,
    396                                           uint8_t               *PacketData,
    397                                           uint16_t               PacketDataLength);
    398 
    399 
    400 /**
    401  * \brief NDEF Registry \b Dispatch \b Record function
    402  *
    403  * \copydoc page_reg
    404  *
    405  * The entry point for NDEF \b RECORDS retrieved from the Peer (Remote) Device:
    406  * The function performs a reset of the state. It starts the action (state machine). For actual
    407  * processing a periodic call of \ref phFriNfc_NdefReg_Process has to be done. This
    408  * function compares the given record with the registered RTDs and if a match is found it calls
    409  * the related callback.
    410  *
    411  * \param[in] NdefReg Pointer to an initialised instance of \ref phFriNfc_NdefReg_t that holds the
    412  *            context of this component.
    413  *
    414  * \param[in] RecordsExtracted Pointer to a NDEF Record that has been received.
    415  *
    416  * \retval NFCSTATUS_SUCCESS                The operation has been successfully initiated.
    417  * \retval NFCSTATUS_INVALID_PARAMETER      At least one parameter of the function is invalid.
    418  *
    419  * \note This function returns once the process is initiated or an error occurs.
    420  */
    421 NFCSTATUS phFriNfc_NdefReg_DispatchRecord(phFriNfc_NdefReg_t     *NdefReg,
    422                                           phFriNfc_NdefRecord_t  *RecordsExtracted);
    423 
    424 
    425 /**
    426  * \brief NDEF Registry \b Process function
    427  *
    428  * \copydoc page_reg
    429  *
    430  * Processing function, needed to avoid long blocking and to give control to other parts of the software
    431  * between the internal dispatching of data.
    432  * The function needs to be called during processing, within a message loop or a simple loop until its
    433  * return value tells that it has finished. No State reset is performed during operation.
    434  *
    435  * \param NdefReg Pointer to a valid instance of the \ref phFriNfc_NdefReg_t structure describing
    436  *                the component context.
    437  *
    438  * \param Status  Pointer to a variable receiving the final result of the NDEF data processing operation.
    439  *                There are the following values:
    440  *                \li NFCSTATUS_SUCCESS                   The operation has been successful.
    441  *                \li NFCSTATUS_INVALID_PARAMETER         At least one parameter of the function is invalid.
    442  *                \li NFCSTATUS_NODE_NOT_FOUND            If the List is NULL or Node is not found.
    443  *                \li NFCSTATUS_INVALID_DEVICE_REQUEST    State other than the specified in the File.
    444  *
    445  * \retval        FALSE Processing has finished, no more function call is needed.
    446  * \retval        TRUE  Processing is ongoing, the function must be called again.
    447  */
    448 uint8_t phFriNfc_NdefReg_Process(phFriNfc_NdefReg_t  *NdefReg,
    449                                  NFCSTATUS           *Status);
    450 
    451 /*@}*/ /* defgroup */
    452 
    453 #endif /* PH_FRINFC_EXCLUDE_FROM_TESTFW */
    454 
    455 #endif /* PHFRINFCNDEFREG_H */
    456 
    457