<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/125900/low-level-driver-for-nfct-using-hal-nfc-library-only</link><description>Dear All, 
 We need to develop a custom low-level driver for NFC communication using the Hardware Abstraction Layer (HAL) library exclusively . We are currently unable to use the recommended NFC library because we only have access to its binary distribution</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 08 Dec 2025 10:31:58 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/125900/low-level-driver-for-nfct-using-hal-nfc-library-only" /><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/556436?ContentTypeID=1</link><pubDate>Mon, 08 Dec 2025 10:31:58 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2d743889-de56-4d5d-b6bd-da85999c63b0</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi&amp;nbsp;Alain,&lt;/p&gt;
&lt;p&gt;I am glad to hear. Thank you for letting us know!&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Einar&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/556385?ContentTypeID=1</link><pubDate>Fri, 05 Dec 2025 21:35:18 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d5743911-720c-4177-b113-0d23cf199cc4</guid><dc:creator>eGate2022</dc:creator><description>&lt;div&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I found the issue: it was related to the protocol selection parameter. I needed to use &lt;code&gt;NRF_NFCT_SELRES_PROTOCOL_NFCDEP_T4AT&lt;/code&gt; instead of &lt;code&gt;NRF_NFCT_SELRES_PROTOCOL_NFCDEP&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now I receive frames correctly, and the problem is resolved.&lt;/p&gt;
&lt;p&gt;Thank you for your help!&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt; Alain&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="background-color:#1e1e1e;color:#d4d4d4;font-family:&amp;#39;Droid Sans Mono&amp;#39;, &amp;#39;monospace&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_nfct_param_t sel_res_param = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .id = NRFX_NFCT_PARAM_ID_SEL_RES,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;sel_res_protocol&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = NRF_NFCT_SELRES_PROTOCOL_NFCDEP_T4AT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_parameter_set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;sel_res_param);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/556380?ContentTypeID=1</link><pubDate>Fri, 05 Dec 2025 19:47:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9e174fca-6ca0-4d52-a8c9-fa4cf42e98f6</guid><dc:creator>eGate2022</dc:creator><description>&lt;div&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I got an explanation about this meaningless value (8190). After the ISO 14443 selection, the PCD is supposed to send RATS, but we received 7 bits. In the HAL handler, there is the computation of the received length using the following function:&lt;/p&gt;
&lt;div&gt;
&lt;div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded-lg font-mono text-sm font-normal bg-subtler"&gt;
&lt;div class="translate-y-xs -translate-x-xs bottom-xl mb-xl flex h-0 items-start justify-end sm:sticky sm:top-xs"&gt;
&lt;div class="overflow-hidden rounded-full border-subtlest ring-subtlest divide-subtlest bg-base"&gt;
&lt;div class="border-subtlest ring-subtlest divide-subtlest bg-subtler"&gt;
&lt;div class="flex items-center min-w-0 gap-two justify-center"&gt;
&lt;div class="flex shrink-0 items-center justify-center size-4"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="-mt-xl"&gt;
&lt;div&gt;
&lt;div class="text-quiet bg-subtle py-xs px-sm inline-block rounded-br rounded-tl-lg text-xs font-thin" data-testid="code-language-indicator"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style="background:transparent;border-radius:3px;color:#4d4d4c;display:flex;font-family:inherit;font-size:inherit;line-height:1.42857;white-space:pre;"&gt;&lt;code style="font-family:inherit;font-size:inherit;line-height:1.66667;padding:8px;white-space:pre-wrap;"&gt;&lt;span style="background-color:transparent;color:#4d4d4c;font-size:inherit;line-height:1.42857;padding:8px;text-align:right;"&gt;&lt;span&gt;NRF_STATIC_INLINE &lt;/span&gt;&lt;span class="token token" style="color:#8959a8;font-weight:bolder;"&gt;uint16_t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token" style="color:#4d4d4c;"&gt;nrf_nfct_rx_bits_get&lt;/span&gt;&lt;span class="token token punctuation"&gt;(&lt;/span&gt;&lt;span&gt;NRF_NFCT_Type &lt;/span&gt;&lt;span class="token token" style="color:#8959a8;font-weight:bolder;"&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token operator"&gt;*&lt;/span&gt;&lt;span&gt; p_reg&lt;/span&gt;&lt;span class="token token punctuation"&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token" style="color:#8959a8;font-weight:bolder;"&gt;bool&lt;/span&gt;&lt;span&gt; crc_excluded&lt;/span&gt;&lt;span class="token token punctuation"&gt;)&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:#4d4d4c;font-size:inherit;line-height:1.42857;padding:8px;text-align:right;"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="token token punctuation"&gt;{&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:#4d4d4c;font-size:inherit;line-height:1.42857;padding:8px;text-align:right;"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span class="token token" style="color:#8959a8;font-weight:bolder;"&gt;uint16_t&lt;/span&gt;&lt;span&gt; rx_bits &lt;/span&gt;&lt;span class="token token operator"&gt;=&lt;/span&gt;&lt;span&gt; p_reg&lt;/span&gt;&lt;span class="token token operator"&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;RXD&lt;/span&gt;&lt;span class="token token punctuation"&gt;.&lt;/span&gt;&lt;span&gt;AMOUNT &lt;/span&gt;&lt;span class="token token operator"&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token punctuation"&gt;(&lt;/span&gt;&lt;span&gt;NFCT_RXD_AMOUNT_RXDATABITS_Msk &lt;/span&gt;&lt;span class="token token operator"&gt;|&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:#4d4d4c;font-size:inherit;line-height:1.42857;padding:8px;text-align:right;"&gt;&lt;span&gt;                                           NFCT_RXD_AMOUNT_RXDATABYTES_Msk&lt;/span&gt;&lt;span class="token token punctuation"&gt;)&lt;/span&gt;&lt;span class="token token punctuation"&gt;;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:#4d4d4c;font-size:inherit;line-height:1.42857;padding:8px;text-align:right;"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span class="token token" style="color:#8959a8;font-weight:bolder;"&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token punctuation"&gt;(&lt;/span&gt;&lt;span class="token token" style="color:#8959a8;font-weight:bolder;"&gt;uint16_t&lt;/span&gt;&lt;span class="token token punctuation"&gt;)&lt;/span&gt;&lt;span class="token token punctuation"&gt;(&lt;/span&gt;&lt;span&gt;rx_bits &lt;/span&gt;&lt;span class="token token operator"&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token punctuation"&gt;(&lt;/span&gt;&lt;span&gt;crc_excluded &lt;/span&gt;&lt;span class="token token operator"&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token punctuation"&gt;(&lt;/span&gt;&lt;span class="token token" style="color:#f5871f;"&gt;8u&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token operator"&gt;*&lt;/span&gt;&lt;span&gt; NRF_NFCT_CRC_SIZE&lt;/span&gt;&lt;span class="token token punctuation"&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token operator"&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="token token" style="color:#f5871f;"&gt;0&lt;/span&gt;&lt;span class="token token punctuation"&gt;)&lt;/span&gt;&lt;span class="token token punctuation"&gt;)&lt;/span&gt;&lt;span class="token token punctuation"&gt;;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:#4d4d4c;font-size:inherit;line-height:1.42857;padding:8px;text-align:right;"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="token token punctuation"&gt;}&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:#4d4d4c;font-size:inherit;line-height:1.42857;padding:8px;text-align:right;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The RATS is supposed to have a CRC, so the content of the NFCT register should be 0x18 (3 bytes = 24 bits).&lt;/p&gt;
&lt;p&gt;Nevertheless, the HAL code is not protected: if the bit count is 7, then the number of bytes is 0. 0 - 2 (CRC size) = -2, which becomes 0x1FFE (8190) due to uint16_t underflow.&lt;/p&gt;
&lt;p&gt;The problem is still open, why I cannot receive the RATS?&lt;br /&gt;&lt;br /&gt;Best regards, Alain&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/556122?ContentTypeID=1</link><pubDate>Wed, 03 Dec 2025 13:35:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:49c13447-e5aa-497c-9713-f0e4a6cf6138</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;eI see. I do believe you, but I do not see how you can get 8190 in the&amp;nbsp;RXD.AMOUNT. Can you share the exact raw value you read form RXD.AMOUNT a debugger in form of a screenshot or something similar? The reason is that this consists of two parts, adding up bytes and bits, and I do not see how you get get this value.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/556098?ContentTypeID=1</link><pubDate>Wed, 03 Dec 2025 11:57:23 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:615f3d1b-2562-4615-b8b0-2d22a21d2671</guid><dc:creator>eGate2022</dc:creator><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Here is the trace&lt;br /&gt;&lt;img style="max-height:348px;max-width:691px;" height="348" src="https://devzone.nordicsemi.com/resized-image/__size/1382x696/__key/communityserver-discussions-components-files/4/pastedimage1764763016976v1.png" width="691" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/556092?ContentTypeID=1</link><pubDate>Wed, 03 Dec 2025 10:28:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5d6ba8ac-e776-4b22-bbcc-f725816cc634</guid><dc:creator>eGate2022</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I will provide you with a trace. In short, after anti-collision, I receive a frame reception event. The HAL does not report any errors, but the length of the data received by the controller via EasyDMA indicates 8190 bits both via the HAL layer and when reading the RXD.AMOUNT register directly via a debugger (Ozone). The frame is not transferred to the receive buffer.&lt;br /&gt;BR/&lt;/p&gt;
&lt;p&gt;A.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/556082?ContentTypeID=1</link><pubDate>Wed, 03 Dec 2025 09:13:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:69a0ed70-ee27-4f5c-8d35-edf5c37f304a</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Where in this code is it you see the wrong size? Is it in you &lt;code&gt;handle_iso14443a_frame()&lt;/code&gt; where you read&amp;nbsp;&lt;code&gt;p_event-&amp;gt;params.rx_frameend.rx_data.data_size&lt;/code&gt;? Can you specify exactly? Also, do you have logs from when you run this (I see you have logging) and I also see you use the nrfx&amp;nbsp; nfct driver which also has loggging, so I suggest you enabel debug logging there.&lt;/p&gt;
&lt;p&gt;I am confused about the number though. You still see&amp;nbsp;&lt;span&gt;8190 bits(?), and&amp;nbsp;also see this&amp;nbsp;in RXD.AMOUNT if you check with a debugger? Is my&amp;nbsp;understand correct? However, so high values should not be possible there.&amp;nbsp;Can you let me know which raw value you read form a debugger as well as what you see in code when you debug?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/556038?ContentTypeID=1</link><pubDate>Tue, 02 Dec 2025 16:09:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:045033a0-6451-4699-a89c-1a1f348e9bba</guid><dc:creator>eGate2022</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Please find below my sample code.&lt;br /&gt; The size is retrieved from the event structure, and it matches the value of the &lt;code&gt;RXD.AMOUNT&lt;/code&gt; NFCT register when the &lt;code&gt;NRFX_NFCT_EVT_RX_FRAMEEND&lt;/code&gt; event occurs.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;A.&lt;/p&gt;
&lt;div style="background-color:#1e1e1e;color:#d4d4d4;font-family:&amp;#39;Droid Sans Mono&amp;#39;, &amp;#39;monospace&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;USE_WORKAROUND_FOR_ANOMALY_190&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;nrfx.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;nrfx_nfct.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;hal/nrf_nfct.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;stdbool.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;stddef.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;t4t_handler.h&amp;quot;&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Interface towards the T=1/APDU layer&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;nfc_pool_frame_generic.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;nfc_transport.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;nfc/tnep/poller.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;system_event.h&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;zephyr/logging/log.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;zephyr/kernel.h&amp;gt;&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Required for k_work_delayable&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#include&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;lt;zephyr/cache.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_MODULE_REGISTER&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(low_level_nfc, LOG_LEVEL_DBG);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// ====================================================================&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// --- 1. LOW LEVEL PROTOCOL CONSTANTS (ISO 14443-3/4) ---&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// ====================================================================&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;NFC_CMD_RATS&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xE0&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; ISO 14443-4 command: Request for Answer To Select.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;NFC_PCB_BLOCK_MASK&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xC0&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Mask to identify the block type (I, S, R) in the PCB field.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;NFC_PCB_I_BLOCK_MASK&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x00&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Mask value for I-blocks (Information).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;NFC_PCB_S_BLOCK_MASK&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0xC0&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Mask value for S-blocks (Supervisory).&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;MAX_FRAME_SIZE&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;256&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Maximum size of ISO-DEP frames (based on FSD/FSC of layer 3).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;NFC_FRAME_DELAY_MODE_DEFAULT&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_FRAME_DELAY_MODE_WINDOWGRID&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Default frame delay mode (Free Run) for transmission.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;NFC_RX_STATUS_OK&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Reception status indicating success without error.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;NFC_ACTIVATION_DELAY_MS&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;10&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Delay before activation for field stabilisation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;NFC_ALL_EVENTS&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; (NRF_NFCT_EVENT_READY &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_FIELDDETECTED &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_FIELDLOST &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_TXFRAMESTART &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_TXFRAMEEND &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_RXFRAMESTART &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_RXFRAMEEND &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_ERROR &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_RXERROR &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_ENDRX &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_ENDTX &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_AUTOCOLRESSTARTED &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_COLLISION &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; NRF_NFCT_EVENT_SELECTED)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; NFCTT macro sel event types, passed to the upper-layer callback function&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * provided during the initialization.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;typedef&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;enum&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;NFCT_STATE_DISABLED,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;NFCT_STATE_RAMPUP2RAMPUP=&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;2&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;NFCT_STATE_IDLE3IDLE,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;NFCT_STATE_RECEIVE4RECEIVE,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;NFCT_STATE_FRAMEDELAY5FRAMEDELAY,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;NFCT_STATE_TRANSMIT6TRANSMIT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;} nrfx_nfct_tag_state_id_t;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Macro to calculate the TB1 byte of the ATS (Answer To Select).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;FWI_VAL&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; FWI (Frame Waiting Integer) value.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;SFGI_VAL&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; SFGI (Start-up Frame Guard Integer) value.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;CALCULATE_TB1&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;(&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;FWI_VAL&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;, &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;SFGI_VAL&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;) \&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt; ((((uint8_t)(FWI_VAL) &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x0F&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;) &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;) &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;|&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; ((uint8_t)(SFGI_VAL) &lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x0F&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#ifndef&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;T1_FWI&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;T1_FWI&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Default Frame Waiting Integer (FWI) for ATS response (if not defined).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#f44747;"&gt;#endif&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#ifndef&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;T1_SFGI&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#9b9b9b;"&gt;#define&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#bd63c5;"&gt;T1_SFGI&lt;/span&gt;&lt;span style="color:#569cd6;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Default Start-up Frame Guard Integer (SFGI) (if not defined).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#f44747;"&gt;#endif&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// ====================================================================&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// --- 2. STRUCTURES AND STATE CONTEXTS (Static) ---&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// ====================================================================&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Enumeration of low-level NFC protocol states. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;typedef&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;enum&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; STATE_IDLE,&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; Waiting for field detection or selection.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; STATE_SELECTED,&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;///&amp;lt; The tag is selected (after RATS).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; STATE_DEINIT&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ///&amp;lt; NFC peripheral uninitialized.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;} nfc_protocol_state_t;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Current NFC protocol state. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; nfc_protocol_state_t current_protocol_state = STATE_IDLE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Unique tag identifier (NFCID1) - 4 bytes. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;UID&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;] = { &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x12&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x34&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x56&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x74&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; };&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// --- Buffers and Descriptors (EasyDMA accessible)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// Place buffers in a non-cacheable, 4-byte aligned section for EasyDMA&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Receive buffer for NFC data (EasyDMA access). */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c8c8c8;"&gt;__attribute__&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;((&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;section&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;.non_cacheable&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;))) &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;__aligned&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[MAX_FRAME_SIZE];&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Receive data descriptor for the nrfx_nfct driver. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_nfct_data_desc_t rx_data_desc = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .p_data = nfc_buffer,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .data_size = MAX_FRAME_SIZE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Mutex to ensure exclusive access to the NFCT/NFC peripheral. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c8c8c8;"&gt;K_MUTEX_DEFINE&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nfct_access_mutex);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; RF field status indicator (true if the field is present). */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;bool&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; field_on;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Handler for the deferred work item to force NFCT into the ACTIVATED state. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_activate_work_handler&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; k_work *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;work&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Work queue item for deferred NFCT activation (to satisfy Anomaly 190 delay). */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#c8c8c8;"&gt;K_WORK_DELAYABLE_DEFINE&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nfc_activation_work, nfc_activate_work_handler);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// ====================================================================&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// --- 3. STATIC PROTOTYPES ---&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// ====================================================================&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Performs a full hardware reset, state cleanup, and re-arms RX.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; This is the necessary workaround for persistent NFCT errors &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * like Anomaly 190 (status 0x2) and DMA corruption (RX errors).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;context&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; String indicating where the reset was triggered for logging.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_full_reset_and_rearm&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;char&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;* &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;context&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Prepares the TX buffer and initiates NFC transmission.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Copies the data to the EasyDMA-compatible buffer and calls&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * the nrfx_nfct driver&amp;#39;s send function. In case of transmission failure,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * re-arms the RX listener.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;data&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Pointer to the data to send.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;len&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Length of the data.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;prepare_and_send&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;size_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Main event handler for the NFCT peripheral.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Processes low-level events such as field detection,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * end of reception/transmission, selection by the reader, and errors.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;p_event&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Pointer to the nfct event structure.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfct_event_handler&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nrfx_nfct_evt_t &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Handles the reception of a RATS command (Request for Answer To Select).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Sends the ATS response (Answer To Select) to the reader.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_rats&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Handles ISO 14443-4 data frames (APDU/T=1).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Extracts the PCB and information data, passes them to the&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * T=1 protocol handler (`t1_process_frame`) and sends the T=1/APDU response.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;data&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Pointeur vers le d&amp;eacute;but de la trame re&amp;ccedil;ue (incluant le PCB).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;len&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Longueur totale de la trame re&amp;ccedil;ue.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_iso14443_4_data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;size_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Handles the end of reception of a low-level NFC-A frame.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Checks the status and length of the received frame. If the frame is valid,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * it determines whether it is a RATS command or an ISO 14443-4 frame and&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * calls the appropriate handling function.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;p_event&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Pointer to the NRFX_NFCT_EVT_RX_FRAMEEND event structure.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_iso14443a_frame&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nrfx_nfct_evt_t &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// ====================================================================&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// --- 4. NFCT FUNCTION IMPLEMENTATION (Low Level) ---&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;// ====================================================================&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/** &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; ATS response (Answer To Select) sent after a RATS. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ATS_RESPONSE&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;[]&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x04&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;,&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; // TL = number of subsequent bytes&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x70&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;,&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; // T0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x80&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;,&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; // TA(1)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;CALCULATE_TB1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(T1_FWI, T1_SFGI),&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; // TB(1)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x02&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; // TC(1): CID supported&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Asynchronously prepares and transmits an S-Block WTX-REQUEST.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; This function is intended to be called from the application thread &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * to request an extension of the PCD&amp;#39;s Frame Waiting Time (FWT).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * It acquires a mutex to ensure exclusive access to the NFC driver &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * before initiating transmission.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@return&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; int 0 on success, or an error code if transmission failed &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * or the mutex could not be acquired.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;int&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;t1_send_wtx_request&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;tx_frame_buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;size_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; tx_len = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;int&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ret = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;k_mutex_lock&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;nfct_access_mutex, K_FOREVER) != &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; -&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;tx_frame_buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[tx_len++] = NFC_PCB_S_BLOCK_MASK | T1_PCB_WTX_REQ;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;tx_frame_buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[tx_len++] = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;t1_get_wti&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_nfct_data_desc_t tx_data_desc = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .p_data = tx_frame_buffer,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .data_size = tx_len&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; };&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_err_t err = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_tx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;tx_data_desc, NFC_FRAME_DELAY_MODE_DEFAULT);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;k_mutex_unlock&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;nfct_access_mutex);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ret;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Prepares the TX buffer and initiates NFC transmission.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Copies the data to the EasyDMA-compatible buffer and calls&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * the nrfx_nfct driver&amp;#39;s send function. In case of transmission failure,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * re-arms the RX listener.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;data&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Pointer to the data to send.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;len&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Length of the data.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;prepare_and_send&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;size_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (len == &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; || len &amp;gt; MAX_FRAME_SIZE) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;memcpy&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nfc_buffer, data, len);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_nfct_data_desc_t tx_data_desc = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .p_data = nfc_buffer,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .data_size = len&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; };&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_err_t err = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_tx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;tx_data_desc, NFC_FRAME_DELAY_MODE_DEFAULT);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; err =&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ( err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nrfx_nfct_init failed: 0x%X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, err);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_HEXDUMP_INF&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nfc_buffer, len, &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;NFC TX--&amp;gt; &amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Handles the reception of a RATS command (Request for Answer To Select).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Sends the ATS response (Answer To Select) to the reader.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_rats&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;prepare_and_send&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(ATS_RESPONSE, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(ATS_RESPONSE));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Handles ISO 14443-4 data frames (APDU/T=1).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Extracts the PCB and information data, passes them to the&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * T=1 protocol handler (`t1_process_frame`) and sends the T=1/APDU response.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;data&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Pointer to the start of the received frame (including the PCB).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;len&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Total length of the received frame.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_iso14443_4_data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;size_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_err_t err;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (len == &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; pcb = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *inf_data = &amp;amp;&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;size_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; inf_len = (len &amp;gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) ? (len - &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) : &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; out_pcb;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;out_inf_buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[MAX_FRAME_SIZE];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;size_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; out_inf_len = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;t1_process_frame&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(pcb, inf_data, inf_len, out_inf_buffer, &amp;amp;out_inf_len, &amp;amp;out_pcb)) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;] = out_pcb;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;memcpy&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;], out_inf_buffer, out_inf_len);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;prepare_and_send&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nfc_buffer, out_inf_len + &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; } &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;else&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; err =&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ( err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nrfx_nfct_init failed: 0x%X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, err);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Performs a full hardware reset, state cleanup, and re-arms RX.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; This is the necessary workaround for persistent NFCT errors &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * like Anomaly 190 (status 0x2) and DMA corruption (RX errors).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;context&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; String indicating where the reset was triggered for logging.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_full_reset_and_rearm&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;char&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;* &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;context&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_err_t err;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Applying full reset from %s context.&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, context);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_task_trigger&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NRF_NFCT_TASK_GOIDLE);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// 2. D&amp;eacute;sactiver le p&amp;eacute;riph&amp;eacute;rique (met l&amp;#39;alimentation en mode faible)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_task_trigger&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NRF_NFCT_TASK_DISABLE);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Clear error flags&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; err_status = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_get&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, err_status);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Vider TOUS les &amp;eacute;v&amp;eacute;nements pour un &amp;eacute;tat propre&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_event_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NFC_ALL_EVENTS);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Step 1: Disable Auto-Collision Resolution before reset&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_autocolres_disable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// // Step 2: Full hardware reset (EasyDMA Workaround)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_disable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_enable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// // Step 3: Re-enable Auto-Collision Resolution&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_autocolres_enable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Step 4: Force SENSING state&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_state_force&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRFX_NFCT_STATE_SENSING);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Step 5: Reset protocol state and field flag&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; field_on = &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;false&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; current_protocol_state = STATE_IDLE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;k_work_cancel_delayable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;nfc_activation_work);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Step 6: Re-arm RX&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; err =&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ( err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nrfx_nfct_init failed: 0x%X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, err);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Handles the end of reception of a low-level NFC-A frame.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Checks the status and length of the received frame. If the frame is valid,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * it determines whether it is a RATS command or an ISO 14443-4 frame and&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * calls the appropriate handling function.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;p_event&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Pointeur vers la structure d&amp;#39;&amp;eacute;v&amp;eacute;nement NRFX_NFCT_EVT_RX_FRAMEEND.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_iso14443a_frame&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nrfx_nfct_evt_t &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_err_t err;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; status = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;params&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_frameend&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_status&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; rx_len = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;params&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_frameend&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *p_buffer = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;params&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_frameend&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;p_data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Check for RX errors and abnormally large frames (indicating DMA corruption)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (status != NFC_RX_STATUS_OK || rx_len == &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; || rx_len &amp;gt; MAX_FRAME_SIZE) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;RX Error: status=0x%X, len=%zu (max=%d). Possible DMA corruption.&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, status, rx_len, MAX_FRAME_SIZE);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Call full reset to clear potential DMA state corruption&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_full_reset_and_rearm&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;handle_iso14443a_frame (DMA Corruption)&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint8_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; command = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;p_buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;[&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_HEXDUMP_INF&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(p_buffer, rx_len, &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;NFC RX--&amp;gt; &amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (current_protocol_state == STATE_SELECTED) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (command == NFC_CMD_RATS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_INF&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;RATS received (len=%u)&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, rx_len);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_rats&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Do not re-arm here: TX_FRAMEEND will re-arm&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; } &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;else&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ((command &amp;amp; NFC_PCB_BLOCK_MASK) == NFC_PCB_I_BLOCK_MASK ||&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; (command &amp;amp; NFC_PCB_BLOCK_MASK) == NFC_PCB_S_BLOCK_MASK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_iso14443_4_data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(p_buffer, rx_len);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// If handle_iso14443_4_data generates a TX, TX_FRAMEEND will re-arm;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// otherwise it re-arms itself.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; } &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;else&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_WRN&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Unexpected RX cmd: 0x%02X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, command);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; err =&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ( err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nrfx_nfct_init failed: 0x%X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, err);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; } &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;else&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_WRN&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;RX in non-SELECTED state: %d&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, current_protocol_state);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Handler for the deferred work item to force NFCT into the ACTIVATED state.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; This function is executed after a short delay (e.g., 15ms) to respect &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * Anomaly 190.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_activate_work_handler&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;struct&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; k_work *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;work&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (field_on) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_INF&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Deferred activation triggered by work queue (forcing ACTIVATED).&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_state_force&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRFX_NFCT_STATE_ACTIVATED);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; } &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;else&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_DBG&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Deferred activation cancelled (Field lost before activation).&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;); &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Main event handler for the NFCT peripheral.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Processes low-level events such as field detection,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * end of reception/transmission, selection by the reader, and errors.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;[&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;in&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;] &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;p_event&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Pointer to the nfct event structure.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;static&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfct_event_handler&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(nrfx_nfct_evt_t &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;const&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; *&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_err_t err;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrf_nfct_tag_state_t state = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_tag_state_get&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_DBG&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Event: %d - HW State: %d - Protocol: %d&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;evt_id&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, state, current_protocol_state);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;switch&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;p_event&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;evt_id&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;case&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; NRFX_NFCT_EVT_FIELD_DETECTED:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_DBG&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Field detected&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; field_on = &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;true&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Increased delay to K_MSEC(NFC_ACTIVATION_DELAY_MS) for maximum robustness against Anomaly 190 &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// and persistent status 0x2 errors, based on the failure of NFC_ACTIVATION_DELAY_MS ms.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;k_work_schedule&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;nfc_activation_work&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;K_MSEC&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NFC_ACTIVATION_DELAY_MS));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;//nrfx_nfct_state_force(NRFX_NFCT_STATE_ACTIVATED);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_event_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NRF_NFCT_EVENT_FIELDLOST);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;break&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;case&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; NRFX_NFCT_EVT_FIELD_LOST:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_DBG&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Field lost&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Cancel any pending activation work&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;k_work_cancel_delayable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;nfc_activation_work&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_state_force&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRFX_NFCT_STATE_SENSING);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; current_protocol_state = STATE_IDLE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; field_on = &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;false&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_event_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NRF_NFCT_EVENT_FIELDDETECTED);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;break&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;case&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; NRFX_NFCT_EVT_SELECTED:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_DBG&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Selected&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_get&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_event_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NFC_ALL_EVENTS);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (field_on) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; current_protocol_state = STATE_SELECTED;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Always arm RX here&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; err =&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ( err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nrfx_nfct_init failed: 0x%X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, err);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_get&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Vider TOUS les &amp;eacute;v&amp;eacute;nements pour un &amp;eacute;tat propre&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_event_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NFC_ALL_EVENTS);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_event_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NRF_NFCT_EVENT_SELECTED);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;break&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;case&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; NRFX_NFCT_EVT_RX_FRAMEEND:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_DBG&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;RX end (status: %d, size: %d)&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, p_event-&amp;gt;params.rx_frameend.rx_status, p_event-&amp;gt;params.rx_frameend.rx_data.data_size);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// No strict state check: handle if OK&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (p_event-&amp;gt;params.rx_frameend.rx_status == NFC_RX_STATUS_OK) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;handle_iso14443a_frame&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(p_event);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; } &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;else&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// If status != OK, handle is inside handle_iso14443a_frame, but for robustness, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// we call a reset here if handle_iso14443a_frame did not catch a DMA error.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// In this case, we rely on the full reset from NRFX_NFCT_EVT_ERROR if the error &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// is severe enough to set the error flag. For typical ISO14443 errors (CRC, etc.), &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// re-arming RX is enough if not handled in handle_iso14443a_frame, but full reset &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// is more resilient. We rely on the reset in the error case.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_event_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NRF_NFCT_EVENT_ENDRX);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; err =&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ( err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nrfx_nfct_init failed: 0x%X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, err);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; err_status = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_get&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, err_status);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Vider TOUS les &amp;eacute;v&amp;eacute;nements pour un &amp;eacute;tat propre&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_event_clear&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT, NFC_ALL_EVENTS);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;break&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;case&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; NRFX_NFCT_EVT_TX_FRAMEEND:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_DBG&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;TX end&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Re-arm RX&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; err =&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; ( err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nrfx_nfct_init failed: 0x%X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, err);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;break&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;case&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; NRFX_NFCT_EVT_ERROR:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; err_status = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrf_nfct_error_status_get&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRF_NFCT);&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; // Detail error&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Error: reason %d, status 0x%X, State: %d&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, p_event-&amp;gt;params.error.reason, err_status, state);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Full hardware reset and re-initialization to clear persistent errors&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_full_reset_and_rearm&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nfct_event_handler (NRFX_NFCT_EVT_ERROR)&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;break&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;default&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_DBG&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;Unknown: %d&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, p_event-&amp;gt;&lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;evt_id&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;break&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; This function gets the NFC field status.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * This function returns true if the field is on.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;none&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@returns&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; true if the field is on&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;bool&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;NFC_is_field_on&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;() {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; field_on;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; This function sets the NFC field status.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * This function returns none.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@param&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;status&lt;/span&gt;&lt;span style="color:#6a9955;"&gt;: true if the field is on.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@returns&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; none&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;NFC_set_field_status&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;bool&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#7f7f7f;"&gt;status&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; field_on = status;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Initializes the custom NFC-A T4T driver.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; *&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; This is the only function exposed to the rest of the system.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;int&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_setup&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_nfct_config_t config = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .rxtx_int_mask = NRFX_NFCT_EVT_FIELD_DETECTED | NRFX_NFCT_EVT_FIELD_LOST | NRFX_NFCT_EVT_RX_FRAMEEND | NRFX_NFCT_EVT_TX_FRAMEEND | NRFX_NFCT_EVT_ERROR | NRFX_NFCT_EVT_SELECTED,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .irq_priority = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;2&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .cb = nfct_event_handler,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; };&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_err_t err = &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_init&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;config);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (err != NRFX_SUCCESS) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_ERR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;nrfx_nfct_init failed: 0x%X&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, err);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; -&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_nfct_param_t fwt_param = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .id = NRFX_NFCT_PARAM_ID_FDT,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// FWT est un entier de 16 bits (uint16_t)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// 256 (0x0100) est la valeur la plus courante pour un FWI de 8, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// repr&amp;eacute;sentant le temps d&amp;#39;attente maximum de 4.8 ms.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;fdt&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0x0100&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; // 256 cycles FWT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_parameter_set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;fwt_param);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_nfct_param_t nfcid1_param = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .id = NRFX_NFCT_PARAM_ID_NFCID1,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfcid1&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .p_id = UID,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .id_size = &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(UID)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_parameter_set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;nfcid1_param);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; nrfx_nfct_param_t sel_res_param = {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .id = NRFX_NFCT_PARAM_ID_SEL_RES,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; .&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;sel_res_protocol&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = NRF_NFCT_SELRES_PROTOCOL_NFCDEP&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_parameter_set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;sel_res_param);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Initialization of data pools (assuming these functions are defined elsewhere)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_pool_init&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;buffer_iso_reception,ISO_FRAME_SIZE, ISO_LIST_SIZE);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_pool_init&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;buffer_iso_emission,ISO_FRAME_SIZE, ISO_LIST_SIZE);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_pool_init&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;buffer_smp_emission,SMP_FRAME_SIZE, SMP_LIST_SIZE);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_autocolres_enable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;rx_data_desc&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;.&lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;data_size&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = MAX_FRAME_SIZE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_rx&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;rx_data_desc);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_enable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_state_force&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(NRFX_NFCT_STATE_SENSING);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; current_protocol_state = STATE_IDLE;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_INF&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;SMP NFC initialized with Auto Collision Resolution\n&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@brief&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Deinitializes the custom NFC-A T4T driver and shuts down the NFCT hardware.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@details&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; Disables the NFCT peripheral, stops sensing/transmission, and uninitializes the driver, &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * releasing associated resources.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; * &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;@return&lt;/span&gt;&lt;span style="color:#6a9955;"&gt; int Returns 0 on success.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#6a9955;"&gt; */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;int&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nfc_teardown&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_INF&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;NFC Teardown initiated.&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#6a9955;"&gt;// Cancel any pending activation work&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;k_work_cancel_delayable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&amp;amp;nfc_activation_work);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_disable&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;nrfx_nfct_uninit&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; current_protocol_state = STATE_DEINIT;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;t4t_deinit&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#c8c8c8;"&gt;LOG_INF&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;SMP NFC hardware and driver uninitialized.&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;return&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Low level driver for NFCT using HAL NFC library only.</title><link>https://devzone.nordicsemi.com/thread/555875?ContentTypeID=1</link><pubDate>Mon, 01 Dec 2025 13:47:10 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f395133f-0b46-4166-b752-267439655257</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi&amp;nbsp;Alain,&lt;/p&gt;
&lt;p&gt;We do not have any sample code for using the NFC HAL The closest thing we have is looking at the &lt;a href="https://github.com/zephyrproject-rtos/hal_nordic/blob/6541dc3a175ef8cd0970f7d8f1d954928e6bde8c/nrfx/drivers/src/nrfx_nfct.c"&gt;nrfx NFC driver implementation&lt;/a&gt; as an example of how the HAL can be used if you want to use that directly. There is no example of using the nrfx driver either though, as this is handled by the &lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/libraries/nfc/index.html"&gt;NFC libraries&lt;/a&gt; which are the only&amp;nbsp;approach&amp;nbsp;we support in the SDK.&lt;/p&gt;
&lt;p&gt;Regarding the error, I agree that receiving 8190 bits is not possible (it is larger than the maximum Rx buffer size and what can be conveyed in the&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/bundle/ps_nrf5340/page/nfc.html#register.RXD.AMOUNT"&gt;RXD.AMOUNT&lt;/a&gt;&amp;nbsp;register. Can you share more details on your implementation and where this number comes from?&lt;/p&gt;
&lt;p&gt;Br,&lt;/p&gt;
&lt;p&gt;Einar&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>