1. Rename api from rmt_get_ringbuf_handler to rmt_get_ringbuf_handle (Github Issue #274)
2. doxygen param rename
3. change API rmt_wait_tx_done to specify maximum waiting time
4.Change return type of rmt_wait_tx_done API from bool to esp_err_t
5. update doc
*
* @param channel RMT channel (0 - 7)
*
+ * @param wait_time Maximum time to wait for transmission to be complete
+ *
* @return
+ * - ESP_OK RMT Tx done successfully
+ * - ESP_ERR_TIMEOUT Crossed the 'wait_time' given
* - ESP_ERR_INVALID_ARG Parameter error
- * - ESP_OK Success
+ * - ESP_FAIL Driver not installed
*/
-esp_err_t rmt_wait_tx_done(rmt_channel_t channel);
+esp_err_t rmt_wait_tx_done(rmt_channel_t channel, TickType_t wait_time);
/**
* @brief Get ringbuffer from UART.
*
* @param channel RMT channel (0 - 7)
*
- * @param buf_handler Pointer to buffer handler to accept RX ringbuffer handler.
+ * @param buf_handle Pointer to buffer handler to accept RX ringbuffer handler.
*
* @return
* - ESP_ERR_INVALID_ARG Parameter error
* - ESP_OK Success
*/
-esp_err_t rmt_get_ringbuf_handler(rmt_channel_t channel, RingbufHandle_t* buf_handler);
+esp_err_t rmt_get_ringbuf_handle(rmt_channel_t channel, RingbufHandle_t* buf_handle);
/***************************EXAMPLE**********************************
*
return ESP_OK;
}
-esp_err_t rmt_wait_tx_done(rmt_channel_t channel)
+esp_err_t rmt_wait_tx_done(rmt_channel_t channel, TickType_t wait_time)
{
RMT_CHECK(channel < RMT_CHANNEL_MAX, RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG);
RMT_CHECK(p_rmt_obj[channel] != NULL, RMT_DRIVER_ERROR_STR, ESP_FAIL);
- xSemaphoreTake(p_rmt_obj[channel]->tx_sem, portMAX_DELAY);
- xSemaphoreGive(p_rmt_obj[channel]->tx_sem);
- return ESP_OK;
+ if(xSemaphoreTake(p_rmt_obj[channel]->tx_sem, wait_time) == pdTRUE) {
+ xSemaphoreGive(p_rmt_obj[channel]->tx_sem);
+ return ESP_OK;
+ }
+ else {
+ ESP_LOGE(RMT_TAG, "Timeout on wait_tx_done");
+ return ESP_ERR_TIMEOUT;
+ }
}
-esp_err_t rmt_get_ringbuf_handler(rmt_channel_t channel, RingbufHandle_t* buf_handler)
+esp_err_t rmt_get_ringbuf_handle(rmt_channel_t channel, RingbufHandle_t* buf_handle)
{
RMT_CHECK(channel < RMT_CHANNEL_MAX, RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG);
RMT_CHECK(p_rmt_obj[channel] != NULL, RMT_DRIVER_ERROR_STR, ESP_FAIL);
- RMT_CHECK(buf_handler != NULL, RMT_ADDR_ERROR_STR, ESP_ERR_INVALID_ARG);
- *buf_handler = p_rmt_obj[channel]->rx_buf;
+ RMT_CHECK(buf_handle != NULL, RMT_ADDR_ERROR_STR, ESP_ERR_INVALID_ARG);
+ *buf_handle = p_rmt_obj[channel]->rx_buf;
return ESP_OK;
}
nec_rx_init();
RingbufHandle_t rb = NULL;
//get RMT RX ringbuffer
- rmt_get_ringbuf_handler(channel, &rb);
+ rmt_get_ringbuf_handle(channel, &rb);
rmt_rx_start(channel, 1);
while(rb) {
size_t rx_size = 0;
//To send data according to the waveform items.
rmt_write_items(channel, item, item_num, true);
//Wait until sending is done.
- rmt_wait_tx_done(channel);
+ rmt_wait_tx_done(channel, portMAX_DELAY);
//before we free the data, make sure sending is already done.
free(item);
vTaskDelay(2000 / portTICK_PERIOD_MS);