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 */
109typedef 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 */
122typedef 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 */
170typedef 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 */
234typedef 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 */
308NFCSTATUS 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 */
339NFCSTATUS 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 */
365NFCSTATUS 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 */
395NFCSTATUS 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 */
421NFCSTATUS 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 */
448uint8_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