<?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>NRFX UART RX CONTINUOUS RECEIVE where RX LEN is unknown</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/105254/nrfx-uart-rx-continuous-receive-where-rx-len-is-unknown</link><description>Hello, 
 
 I am using nrfx library for nrf5340 because I wanted to change UART pins dynamically at run time by disabling, changing pins and renabling the UART. This part is working fine, 
 Now I neewd to know how to receive data continuously and fill</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 06 Nov 2023 14:54:57 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/105254/nrfx-uart-rx-continuous-receive-where-rx-len-is-unknown" /><item><title>RE: NRFX UART RX CONTINUOUS RECEIVE where RX LEN is unknown</title><link>https://devzone.nordicsemi.com/thread/454257?ContentTypeID=1</link><pubDate>Mon, 06 Nov 2023 14:54:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ed83343d-7a34-4bde-b426-25532b964684</guid><dc:creator>Vidar Berg</dc:creator><description>[quote user="vinodsdw"]1)By the way, I am not able to find the libuarte source code, could you please show where I can find it?[/quote]
&lt;p&gt;/nRF5_SDK_17.1.0_ddde560/components/libraries/libuarte&lt;/p&gt;
[quote user="vinodsdw"]2)RXRDY is showing as event 1 or 0, but how can I know how many bytes are received in the RAM if timeout happens? I checked many registers under UARTE0 but&amp;nbsp; couldn&amp;#39;t find anything holding the current number of received bytes over dma (partial).[/quote]
&lt;p&gt;You need to connect the event to a TIMER in counter mode to count the number of events triggered.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRFX UART RX CONTINUOUS RECEIVE where RX LEN is unknown</title><link>https://devzone.nordicsemi.com/thread/453652?ContentTypeID=1</link><pubDate>Thu, 02 Nov 2023 09:59:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:572af067-7912-47a3-96d7-15c23f442666</guid><dc:creator>vinodsdw</dc:creator><description>&lt;p&gt;Thanks for this information.&lt;/p&gt;
&lt;p&gt;I implemented the method I mentioned and I faced sometime some data missing while aboarting and re-starting. I will look into the&amp;nbsp;&lt;a title="EVENTS_RXDRDY" href="https://infocenter.nordicsemi.com/topic/ps_nrf5340/uarte.html?cp=4_0_0_6_37_8_12#register.EVENTS_RXDRDY"&gt;EVENTS_RXDRDY&lt;/a&gt;&amp;nbsp;and will update you.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Update after implementing RXDRDY:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1)By the way, I am not able to find the libuarte source code, could you please show where I can find it?&lt;/p&gt;
&lt;p&gt;2)RXRDY is showing as event 1 or 0, but how can I know how many bytes are received in the RAM if timeout happens? I checked many registers under UARTE0 but&amp;nbsp; couldn&amp;#39;t find anything holding the current number of received bytes over dma (partial).&lt;/p&gt;
&lt;p&gt;3)Out of curiosity, asking, how to collect partially received data in RAM without aborting the uart_rx?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Attaching my current working code, implemented RXRDY to detect if something is received after timeout or not, if something is received, then Iam aborting at present to collect the data RX. This is working at present without any error after several minutes of testing, but still I am looking for somehing without aborting the rx at all.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/sys/ring_buffer.h&amp;gt;
#include &amp;lt;nrfx_uarte.h&amp;gt;
#include &amp;lt;zephyr/sys/printk.h&amp;gt;
#include &amp;lt;nrfx_log.h&amp;gt;
 
#define UARTE_INST_IDX 0
#define UARTE_TX_PIN 31
#define UARTE_RX_PIN 5
#define DOUBLE_BUFF_SIZE 200
#define UART_RX_TIMEOUT 200 // 100ms
#define MY_RING_BUF_BYTES 1024
 
K_SEM_DEFINE(rx_timeout_sem, 0, 1);
RING_BUF_DECLARE(uart_rx_ring_buf, MY_RING_BUF_BYTES);
nrfx_uarte_t uarte_inst = NRFX_UARTE_INSTANCE(UARTE_INST_IDX);
 
static volatile uint8_t uart_rx_timeout_triggered;
static uint8_t rx_doublebuffer[2][DOUBLE_BUFF_SIZE];
 
 
volatile static int skipcnt;
 
 
 static void uart_rx_timeout_work_handler(struct k_work *work);
 
static K_WORK_DELAYABLE_DEFINE(uart_rx_timeout_work, uart_rx_timeout_work_handler);
 
 static void uart_rx_timeout_work_handler(struct k_work *work)
{
    ARG_UNUSED(work);
    uart_rx_timeout_triggered = 1;
    if((uarte_inst.p_reg)-&amp;gt;EVENTS_RXDRDY) {
        nrfx_uarte_rx_abort(&amp;amp;uarte_inst);
    }else {
        skipcnt++;
        k_work_reschedule(&amp;amp;uart_rx_timeout_work, K_MSEC(UART_RX_TIMEOUT)); // RX TIMEOUT RESCHEDULE
    }
}
 
static void uarte_handler(nrfx_uarte_event_t const *p_event, void *p_context)
{
    nrfx_uarte_t *p_inst = p_context;
 
    if (p_event-&amp;gt;type == NRFX_UARTE_EVT_TX_DONE)
    {
        ;
    }
    else if (p_event-&amp;gt;type == NRFX_UARTE_EVT_RX_DONE)
    {
        uint8_t *buffer = p_event-&amp;gt;data.rxtx.p_data; // alternate double buffer
 
        if (p_event-&amp;gt;data.rxtx.bytes)
            ring_buf_put(&amp;amp;uart_rx_ring_buf, buffer, p_event-&amp;gt;data.rxtx.bytes);
        nrfx_uarte_rx(p_inst, buffer, DOUBLE_BUFF_SIZE);
        if (uart_rx_timeout_triggered)
        {
            uart_rx_timeout_triggered = 0;
            if (ring_buf_size_get(&amp;amp;uart_rx_ring_buf))
                k_sem_give(&amp;amp;rx_timeout_sem);
        }
        else if (ring_buf_size_get(&amp;amp;uart_rx_ring_buf) &amp;gt;= (MY_RING_BUF_BYTES / 2))
        {
            k_sem_give(&amp;amp;rx_timeout_sem);
        }
 
        k_work_reschedule(&amp;amp;uart_rx_timeout_work, K_MSEC(UART_RX_TIMEOUT)); // RX TIMEOUT RESCHEDULE
    }
    else if (p_event-&amp;gt;type == NRFX_UARTE_EVT_ERROR)
    {
        nrfx_uarte_rx(&amp;amp;uarte_inst, rx_doublebuffer[0], DOUBLE_BUFF_SIZE);
        nrfx_uarte_rx(&amp;amp;uarte_inst, rx_doublebuffer[1], DOUBLE_BUFF_SIZE);
        ; // todo
    }
}
 
int nrfx_uart1_main(void)
{
    nrfx_err_t status;
    (void)status;
 
    nrfx_uarte_config_t uarte_config1 = NRFX_UARTE_DEFAULT_CONFIG(31, 5); // UARTE_RX_PIN);
    nrfx_uarte_config_t uarte_config2 = NRFX_UARTE_DEFAULT_CONFIG(5, UARTE_RX_PIN);
    nrfx_uarte_config_t uarte_config3 = NRFX_UARTE_DEFAULT_CONFIG((1 &amp;lt;&amp;lt; 5) | 10, UARTE_RX_PIN);
    uarte_config1.p_context = &amp;amp;uarte_inst;
    uarte_config2.p_context = &amp;amp;uarte_inst;
    uarte_config3.p_context = &amp;amp;uarte_inst;
    status = nrfx_uarte_init(&amp;amp;uarte_inst, &amp;amp;uarte_config1, uarte_handler);
    NRFX_ASSERT(status == NRFX_SUCCESS);
 
#if defined(__ZEPHYR__)
    IRQ_DIRECT_CONNECT(NRFX_IRQ_NUMBER_GET(NRF_UARTE_INST_GET(UARTE_INST_IDX)), IRQ_PRIO_LOWEST,
                       NRFX_UARTE_INST_HANDLER_GET(UARTE_INST_IDX), 0);
#endif
 
    status = nrfx_uarte_rx(&amp;amp;uarte_inst, rx_doublebuffer[0], DOUBLE_BUFF_SIZE);
    NRFX_ASSERT(status == NRFX_SUCCESS);
    status = nrfx_uarte_rx(&amp;amp;uarte_inst, rx_doublebuffer[1], DOUBLE_BUFF_SIZE);
    NRFX_ASSERT(status == NRFX_SUCCESS);
    k_work_reschedule(&amp;amp;uart_rx_timeout_work, K_MSEC(UART_RX_TIMEOUT)); // debounce
    // status = nrfx_uarte_tx(&amp;amp;uarte_inst, m_tx_buffer, sizeof(m_tx_buffer));
    // NRFX_ASSERT(status == NRFX_SUCCESS);
 
    int cnt = 0;
    while (1)
    {
 
        k_sem_take(&amp;amp;rx_timeout_sem, K_FOREVER);
        while (1)
        {
            char c;
            if (ring_buf_get(&amp;amp;uart_rx_ring_buf, &amp;amp;c, 1) == 1)
            {
                printk(&amp;quot;%c&amp;quot;, c);
            }
            else
                break;
        }
 
        // SWITCHING UART PORT
        //  char txb[100];
        //  sprintf(txb, &amp;quot;HELLO WORLD %d\n&amp;quot;, cnt++);
        //  char r[101];
        //  r[101] = 0;
        //  k_msgq_get(&amp;amp;q_name, r, K_FOREVER);
        //  printk(&amp;quot;%s&amp;quot;, r);
        //  nrfx_uarte_uninit(&amp;amp;uarte_inst);
        //  nrfx_uarte_init(&amp;amp;uarte_inst, &amp;amp;uarte_config1, uarte_handler);
        //  sprintf(txb, &amp;quot;HELLO WORLD %d\n&amp;quot;, cnt++);
        //  nrfx_uarte_tx(&amp;amp;uarte_inst, txb, strlen(txb));
        //  k_msleep(1000);
 
        // nrfx_uarte_uninit(&amp;amp;uarte_inst);
        // nrfx_uarte_init(&amp;amp;uarte_inst, &amp;amp;uarte_config2, uarte_handler);
        // sprintf(txb, &amp;quot;HELLO WORLD %d\n&amp;quot;, cnt++);
        // nrfx_uarte_tx(&amp;amp;uarte_inst, txb, strlen(txb));
        // k_msleep(1000);
 
        // nrfx_uarte_uninit(&amp;amp;uarte_inst);
        // nrfx_uarte_init(&amp;amp;uarte_inst, &amp;amp;uarte_config3, uarte_handler);
        // sprintf(txb, &amp;quot;HELLO WORLD %d\n&amp;quot;, cnt++);
        // nrfx_uarte_tx(&amp;amp;uarte_inst, txb, strlen(txb));
        // k_msleep(1000);
        // NRFX_EXAMPLE_LOG_PROCESS();
    }
}
 
/** @} */&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRFX UART RX CONTINUOUS RECEIVE where RX LEN is unknown</title><link>https://devzone.nordicsemi.com/thread/453645?ContentTypeID=1</link><pubDate>Thu, 02 Nov 2023 09:21:07 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1cc4e145-ddec-490c-ad2a-4a991491bc15</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Yes, it&amp;#39;s possible to&amp;nbsp;assign the highest interrupt priority to the UARTE.&amp;nbsp;&lt;/p&gt;
[quote user="vinodsdw"]Another idea what I am thinking is to trigger a timer&amp;nbsp; every time inside RX handler with a timeout of say 100mS or so, same like a button debounce handling so that if no more interrupt is happening, then the timer work handler will get called and I can&amp;nbsp;call &lt;strong&gt;nrfx_uarte_rx_abort&amp;nbsp;&lt;/strong&gt;to get NRFX_UARTE_EVT_RX_DONE with the available bytes in the dma rx buffer. I think this might be a decent approach right?[/quote]
&lt;p&gt;I&amp;nbsp;think you may end up aborting the reception in the middle of a transaction if you only used a fixed timeout. I&amp;#39;d recommend using the UART async or libuarte implementations as a reference if you are going to do this. They use the&amp;nbsp;&lt;a title="EVENTS_RXDRDY" href="https://infocenter.nordicsemi.com/topic/ps_nrf5340/uarte.html?cp=4_0_0_6_37_8_12#register.EVENTS_RXDRDY"&gt;EVENTS_RXDRDY&lt;/a&gt;&amp;nbsp;event to&amp;nbsp;determine&amp;nbsp;when data is being received.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRFX UART RX CONTINUOUS RECEIVE where RX LEN is unknown</title><link>https://devzone.nordicsemi.com/thread/453612?ContentTypeID=1</link><pubDate>Thu, 02 Nov 2023 05:18:29 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:30ce9a28-2a7a-479b-b630-2e4855ff7ef4</guid><dc:creator>vinodsdw</dc:creator><description>&lt;p&gt;Yes 1 byte double buffer is kind if simplest solution but again there are chances to miss the data. Is it possible to keep highest priority for the uart interrupt in zephyr environment ? If so, then it might be okay to keep 1 byte double buffer.&lt;/p&gt;
&lt;p&gt;Another idea what I am thinking is to trigger a timer&amp;nbsp; every time inside RX handler with a timeout of say 100mS or so, same like a button debounce handling so that if no more interrupt is happening, then the timer work handler will get called and I can&amp;nbsp;call &lt;strong&gt;nrfx_uarte_rx_abort&amp;nbsp;&lt;/strong&gt;to get NRFX_UARTE_EVT_RX_DONE with the available bytes in the dma rx buffer. I think this might be a decent approach right?&lt;/p&gt;
&lt;p&gt;Because the main reason I am bypassing the complete zephyr mechanism for uart is to switch the uart port manually at run time between 3 uart devices connected at different GPIO pins of nrf5340 and that is working now as expected.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRFX UART RX CONTINUOUS RECEIVE where RX LEN is unknown</title><link>https://devzone.nordicsemi.com/thread/453524?ContentTypeID=1</link><pubDate>Wed, 01 Nov 2023 13:44:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:060ab481-c037-4e66-9d11-9bc7fbe08333</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;I&amp;#39;m afraid it&amp;#39;s not straightforward to solve this problem with the nrfx_uarte driver. In the Zephyr UART async driver, we&amp;#39;re using one TIMER instance for byte counting and another TIMER to trigger a timeout after inactivity,&amp;nbsp;same as the approach used in the&amp;nbsp;&lt;a title="Libuarte - advanced UARTE driver" href="https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.1.0/lib_libuarte.html?cp=9_1_3_28"&gt;Libuarte - advanced UARTE driver&lt;/a&gt; from the nRF5 SDK.&lt;/p&gt;
[quote userid="125376" url="~/f/nordic-q-a/105254/nrfx-uart-rx-continuous-receive-where-rx-len-is-unknown/453483"]&lt;div&gt;nrfx_uarte_rx(&amp;amp;uarte_inst, m_rx_buffer1, sizeof(m_rx_buffer1));&lt;/div&gt;
&lt;div&gt;&lt;span&gt;nrfx_uarte_rx(&amp;amp;uarte_inst, m_rx_buffer2, sizeof(m_rx_buffer2));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;[/quote]
&lt;p&gt;The simplest solution is to do double buffering with 1-byte buffers, but&amp;nbsp;it&amp;nbsp;will likely require HW flow control to avoid packet loss. Another alternative may be to modify the Zephyr async driver to allow you to change the pinout dynamically.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRFX UART RX CONTINUOUS RECEIVE where RX LEN is unknown</title><link>https://devzone.nordicsemi.com/thread/453506?ContentTypeID=1</link><pubDate>Wed, 01 Nov 2023 12:52:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1043c886-32b7-476d-a3cc-aaac4c38080f</guid><dc:creator>vinodsdw</dc:creator><description>&lt;p&gt;New update:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre class="ui-code" data-mode="text"&gt;static uint8_t rxb1[100];
static uint8_t rxb2[100];

static int rxbi = 0;

K_MSGQ_DEFINE(q_name, 100, 10, 1);

static void uarte_handler(nrfx_uarte_event_t const *p_event, void *p_context)
{
&amp;#160; &amp;#160; nrfx_uarte_t *p_inst = p_context;

&amp;#160; &amp;#160; if (p_event-&amp;gt;type == NRFX_UARTE_EVT_TX_DONE)
&amp;#160; &amp;#160; {
&amp;#160; &amp;#160; &amp;#160; &amp;#160; // NRFX_LOG_INFO(&amp;quot;--&amp;gt; UARTE event: TX done&amp;quot;);
&amp;#160; &amp;#160; &amp;#160; &amp;#160; // NRFX_LOG_INFO(&amp;quot;Content of TX buffer: %s&amp;quot;, m_tx_buffer);
&amp;#160; &amp;#160; &amp;#160; &amp;#160; // NRFX_LOG_INFO(&amp;quot;Content of RX buffer: %s&amp;quot;, m_rx_buffer);
&amp;#160; &amp;#160; }
&amp;#160; &amp;#160; else if (p_event-&amp;gt;type == NRFX_UARTE_EVT_RX_DONE)
&amp;#160; &amp;#160; {
&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (p_event-&amp;gt;data.rxtx.p_data == rxb1)
&amp;#160; &amp;#160; &amp;#160; &amp;#160; {
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; k_msgq_put(&amp;amp;q_name, rxb1, K_NO_WAIT);
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; nrfx_uarte_rx(p_inst, rxb1, sizeof(rxb1));
&amp;#160; &amp;#160; &amp;#160; &amp;#160; }
&amp;#160; &amp;#160; &amp;#160; &amp;#160; else if (p_event-&amp;gt;data.rxtx.p_data == rxb2)
&amp;#160; &amp;#160; &amp;#160; &amp;#160; {
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; k_msgq_put(&amp;amp;q_name, rxb2, K_NO_WAIT);
&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; nrfx_uarte_rx(p_inst, rxb2, sizeof(rxb2));
&amp;#160; &amp;#160; &amp;#160; &amp;#160; }
&amp;#160; &amp;#160; &amp;#160; &amp;#160; // NRFX_LOG_INFO(&amp;quot;UARTE event: %d&amp;quot;, p_event-&amp;gt;type);
&amp;#160; &amp;#160; }
&amp;#160; &amp;#160; // nrfx_uarte_uninit(p_inst);
}&lt;/pre&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Above code is working as expected, but what I want is a timeout feature for the reception, and if the timeout occures and if any of the on going buffer is not completely filled or partially filled, I need a callback after the timeout so that I can get an interrupt for timeout and can collect the UART data, this is a feature which I used in stm32,&amp;nbsp; I am expecting similar feature here also, if not it will be extremely difficult coz I cannot always guarantee my received byte size alwasy 100 bytes or what ever i keep.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;This is my last step, Any clue ?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: NRFX UART RX CONTINUOUS RECEIVE where RX LEN is unknown</title><link>https://devzone.nordicsemi.com/thread/453483?ContentTypeID=1</link><pubDate>Wed, 01 Nov 2023 11:53:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2a8c69a0-d6e3-4fba-a910-055b17f1970c</guid><dc:creator>vinodsdw</dc:creator><description>&lt;p&gt;If I call below lines after uart init,&lt;/p&gt;
&lt;div&gt;nrfx_uarte_rx(&amp;amp;uarte_inst, m_rx_buffer1, sizeof(m_rx_buffer1));&lt;/div&gt;
&lt;div&gt;&lt;span&gt;nrfx_uarte_rx(&amp;amp;uarte_inst, m_rx_buffer2, sizeof(m_rx_buffer2));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;and inside ISR if I call these alternatively, I might get continuos data.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;But my question is, the device receives only few bytes and if that is less than the size of the rx_buffer_1 or 2, then how will I get that data and how will I understand the size of the received data coz I believe the interrupt on RX will appear only when the requested amount of data is received, but if I don&amp;#39;t know the count or expected rx bytes, how can I proceed ? Also I cannot keep 1 byte as the dma rx size coz then I may loose data as we are keeping this UART comparitively low priority and doesn&amp;#39;t want too much interrupt latency and overhead by keeping 1 byte rx size.&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>