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