typedef intr_handle_t rmt_isr_handle_t;
+typedef void (*rmt_tx_end_t)(rmt_channel_t channel);
+
/**
* @brief Set RMT clock divider, channel clock is divided from source clock.
*
*/
esp_err_t rmt_get_ringbuf_handle(rmt_channel_t channel, RingbufHandle_t* buf_handle);
+/**
+ * @brief Registers a callback that will be called when transmission ends.
+ *
+ * Called by rmt_driver_isr_default in interrupt context.
+ *
+ * @note Requires rmt_driver_install to install the default ISR handler.
+ *
+ * @param fn Function to be called from the default interrupt handler or NULL.
+ *
+ * @return the previous handler (or NULL if there was none)
+ */
+rmt_tx_end_t rmt_register_tx_end_callback(rmt_tx_end_t fn);
+
+
/*
* ----------------EXAMPLE OF RMT INTERRUPT ------------------
* @code{c}
rmt_obj_t* p_rmt_obj[RMT_CHANNEL_MAX] = {0};
+// Event called when transmission is ended
+static rmt_tx_end_t rmt_tx_end_callback = NULL;
+
static void rmt_set_tx_wrap_en(rmt_channel_t channel, bool en)
{
portENTER_CRITICAL(&rmt_spinlock);
p_rmt->tx_len_rem = 0;
p_rmt->tx_offset = 0;
p_rmt->tx_sub_len = 0;
+ if(rmt_tx_end_callback != NULL) {
+ rmt_tx_end_callback(channel);
+ }
break;
//RX_END
case 1:
return ESP_OK;
}
+rmt_tx_end_t rmt_register_tx_end_callback(rmt_tx_end_t handler)
+{
+ rmt_tx_end_t previous = rmt_tx_end_callback;
+ rmt_tx_end_callback = handler;
+ return previous;
+}