]> granicus.if.org Git - esp-idf/commitdiff
bugfix(driver): fix RMT issues from github
authorNilay Sheth <nilay@espressif.com>
Tue, 20 Jun 2017 05:23:29 +0000 (10:53 +0530)
committerWangjialin <wangjialin@espressif.com>
Tue, 15 Aug 2017 09:23:51 +0000 (17:23 +0800)
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

components/driver/include/driver/rmt.h
components/driver/rmt.c
examples/peripherals/rmt_nec_tx_rx/main/infrared_nec_main.c

index 0a958688cb2eceec08217dfc8080be61543fa39e..56c5ed4952d098163ea79bfa5bdae53fdca909e2 100644 (file)
@@ -677,11 +677,15 @@ esp_err_t rmt_write_items(rmt_channel_t channel, const rmt_item32_t* rmt_item, i
  *
  * @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.
@@ -690,13 +694,13 @@ esp_err_t rmt_wait_tx_done(rmt_channel_t channel);
  *
  * @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**********************************
  *
index e328e4521e71cb5bc430bd6350c225c8e3343175..7386aa2e64b8dae96d0f5bfbcedbfa46c10829b1 100644 (file)
@@ -748,21 +748,26 @@ esp_err_t rmt_write_items(rmt_channel_t channel, const rmt_item32_t* rmt_item, i
     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;
 }
 
index 1bc01a38628532cb7185a92bb327c3ea483f7525..3e357a726d291ae539f814d81324f766b5b4f88e 100644 (file)
@@ -284,7 +284,7 @@ static void rmt_example_nec_rx_task()
     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;
@@ -349,7 +349,7 @@ static void rmt_example_nec_tx_task()
         //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);