Hi,
I'm using an nrf52833 with SDK 17.1.0 and was looking at the peripheral/libuarte example. I have a question regarding the following code snippet
void uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt) { nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context; ret_code_t ret; switch (p_evt->type) { case NRF_LIBUARTE_ASYNC_EVT_ERROR: bsp_board_led_invert(0); break; case NRF_LIBUARTE_ASYNC_EVT_RX_DATA: ret = nrf_libuarte_async_tx(p_libuarte,p_evt->data.rxtx.p_data, p_evt->data.rxtx.length); if (ret == NRF_ERROR_BUSY) { buffer_t buf = { .p_data = p_evt->data.rxtx.p_data, .length = p_evt->data.rxtx.length, }; ret = nrf_queue_push(&m_buf_queue, &buf); APP_ERROR_CHECK(ret); } else { APP_ERROR_CHECK(ret); } bsp_board_led_invert(1); m_loopback_phase = true; break; case NRF_LIBUARTE_ASYNC_EVT_TX_DONE: if (m_loopback_phase) { nrf_libuarte_async_rx_free(p_libuarte, p_evt->data.rxtx.p_data, p_evt->data.rxtx.length); if (!nrf_queue_is_empty(&m_buf_queue)) { buffer_t buf; ret = nrf_queue_pop(&m_buf_queue, &buf); APP_ERROR_CHECK(ret); UNUSED_RETURN_VALUE(nrf_libuarte_async_tx(p_libuarte, buf.p_data, buf.length)); } } bsp_board_led_invert(2); break; default: break; } }
Can someone explain to my why the RX buffer is freed in the TX_DONE case? And why is the function for clearing the RX buffer used with the event data (p_evt->data.rxtx.p_data) which comes for the TX_DONE event? Do I also have to clear the TX buffer?
Best regards,
Christian