rmt: const callback event data

This commit is contained in:
morris
2022-07-21 15:41:01 +08:00
parent 741b031e83
commit 9a921ada7f
6 changed files with 20 additions and 20 deletions

View File

@@ -46,7 +46,7 @@ typedef struct {
* *
* @return Whether a high priority task has been waken up by this callback function * @return Whether a high priority task has been waken up by this callback function
*/ */
typedef bool (*rmt_tx_done_callback_t)(rmt_channel_handle_t tx_chan, rmt_tx_done_event_data_t *edata, void *user_ctx); typedef bool (*rmt_tx_done_callback_t)(rmt_channel_handle_t tx_chan, const rmt_tx_done_event_data_t *edata, void *user_ctx);
/** /**
* @brief Type of RMT RX done event data * @brief Type of RMT RX done event data
@@ -65,7 +65,7 @@ typedef struct {
* @param[in] user_ctx User registered context, passed from `rmt_rx_register_event_callbacks()` * @param[in] user_ctx User registered context, passed from `rmt_rx_register_event_callbacks()`
* @return Whether a high priority task has been waken up by this function * @return Whether a high priority task has been waken up by this function
*/ */
typedef bool (*rmt_rx_done_callback_t)(rmt_channel_handle_t rx_chan, rmt_rx_done_event_data_t *edata, void *user_ctx); typedef bool (*rmt_rx_done_callback_t)(rmt_channel_handle_t rx_chan, const rmt_rx_done_event_data_t *edata, void *user_ctx);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -26,7 +26,7 @@ typedef struct {
} test_nec_rx_user_data_t; } test_nec_rx_user_data_t;
TEST_RMT_CALLBACK_ATTR TEST_RMT_CALLBACK_ATTR
static bool test_rmt_rx_done_callback(rmt_channel_handle_t channel, rmt_rx_done_event_data_t *edata, void *user_data) static bool test_rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data)
{ {
BaseType_t high_task_wakeup = pdFALSE; BaseType_t high_task_wakeup = pdFALSE;
test_nec_rx_user_data_t *test_user_data = (test_nec_rx_user_data_t *)user_data; test_nec_rx_user_data_t *test_user_data = (test_nec_rx_user_data_t *)user_data;

View File

@@ -160,7 +160,7 @@ TEST_CASE("rmt_ping_pong_trans_with_dma", "[rmt]")
#endif #endif
TEST_RMT_CALLBACK_ATTR TEST_RMT_CALLBACK_ATTR
static bool test_rmt_tx_done_cb_check_event_data(rmt_channel_handle_t channel, rmt_tx_done_event_data_t *edata, void *user_data) static bool test_rmt_tx_done_cb_check_event_data(rmt_channel_handle_t channel, const rmt_tx_done_event_data_t *edata, void *user_data)
{ {
uint32_t *p_expected_encoded_size = (uint32_t *)user_data; uint32_t *p_expected_encoded_size = (uint32_t *)user_data;
TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols); TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols);
@@ -237,7 +237,7 @@ TEST_CASE("rmt_trans_done_event_callback_with_dma", "[rmt]")
#if SOC_RMT_SUPPORT_TX_LOOP_COUNT #if SOC_RMT_SUPPORT_TX_LOOP_COUNT
TEST_RMT_CALLBACK_ATTR TEST_RMT_CALLBACK_ATTR
static bool test_rmt_loop_done_cb_check_event_data(rmt_channel_handle_t channel, rmt_tx_done_event_data_t *edata, void *user_data) static bool test_rmt_loop_done_cb_check_event_data(rmt_channel_handle_t channel, const rmt_tx_done_event_data_t *edata, void *user_data)
{ {
uint32_t *p_expected_encoded_size = (uint32_t *)user_data; uint32_t *p_expected_encoded_size = (uint32_t *)user_data;
TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols); TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols);
@@ -454,7 +454,7 @@ TEST_CASE("rmt_tx_nec_carrier_with_dma", "[rmt]")
#endif #endif
TEST_RMT_CALLBACK_ATTR TEST_RMT_CALLBACK_ATTR
static bool test_rmt_tx_done_cb_record_time(rmt_channel_handle_t channel, rmt_tx_done_event_data_t *edata, void *user_data) static bool test_rmt_tx_done_cb_record_time(rmt_channel_handle_t channel, const rmt_tx_done_event_data_t *edata, void *user_data)
{ {
int64_t *record_time = (int64_t *)user_data; int64_t *record_time = (int64_t *)user_data;
*record_time = esp_timer_get_time(); *record_time = esp_timer_get_time();

View File

@@ -304,21 +304,21 @@ The receiver will be stopped by the driver when it finishes working (i.e. receiv
.. code:: c .. code:: c
static bool example_rmt_rx_done_callback(rmt_channel_handle_t channel, rmt_rx_done_event_data_t *edata, void *user_data) static bool example_rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data)
{ {
BaseType_t high_task_wakeup = pdFALSE; BaseType_t high_task_wakeup = pdFALSE;
TaskHandle_t task_to_notify = (TaskHandle_t)user_data; QueueHandle_t receive_queue = (QueueHandle_t)user_data;
// send the received RMT symbols to the parser task // send the received RMT symbols to the parser task
xTaskNotifyFromISR(task_to_notify, (uint32_t)edata, eSetValueWithOverwrite, &high_task_wakeup); xQueueSendFromISR(receive_queue, edata, &high_task_wakeup);
// return whether any task is woken up // return whether any task is woken up
return high_task_wakeup == pdTRUE; return high_task_wakeup == pdTRUE;
} }
TaskHandle_t cur_task = xTaskGetCurrentTaskHandle(); QueueHandle_t receive_queue = xQueueCreate(1, sizeof(rmt_rx_done_event_data_t));
rmt_rx_event_callbacks_t cbs = { rmt_rx_event_callbacks_t cbs = {
.on_recv_done = example_rmt_rx_done_callback, .on_recv_done = example_rmt_rx_done_callback,
}; };
ESP_ERROR_CHECK(rmt_rx_register_event_callbacks(rx_channel, &cbs, cur_task)); ESP_ERROR_CHECK(rmt_rx_register_event_callbacks(rx_channel, &cbs, receive_queue));
// the following timing requirement is based on NEC protocol // the following timing requirement is based on NEC protocol
rmt_receive_config_t receive_config = { rmt_receive_config_t receive_config = {
@@ -330,10 +330,10 @@ The receiver will be stopped by the driver when it finishes working (i.e. receiv
// ready to receive // ready to receive
ESP_ERROR_CHECK(rmt_receive(rx_channel, raw_symbols, sizeof(raw_symbols), &receive_config)); ESP_ERROR_CHECK(rmt_receive(rx_channel, raw_symbols, sizeof(raw_symbols), &receive_config));
// wait for RX done signal // wait for RX done signal
rmt_rx_done_event_data_t *rx_data = NULL; rmt_rx_done_event_data_t rx_data;
xTaskNotifyWait(0x00, ULONG_MAX, (uint32_t *)&rx_data, portMAX_DELAY); xQueueReceive(receive_queue, &rx_data, portMAX_DELAY);
// parse the receive symbols // parse the receive symbols
example_parse_nec_frame(rx_data->received_symbols, rx_data->num_symbols); example_parse_nec_frame(rx_data.received_symbols, rx_data.num_symbols);
RMT Encoder RMT Encoder
^^^^^^^^^^^ ^^^^^^^^^^^

View File

@@ -142,7 +142,7 @@ static void example_parse_nec_frame(rmt_symbol_word_t *rmt_nec_symbols, size_t s
} }
} }
static bool example_rmt_rx_done_callback(rmt_channel_handle_t channel, rmt_rx_done_event_data_t *edata, void *user_data) static bool example_rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data)
{ {
BaseType_t high_task_wakeup = pdFALSE; BaseType_t high_task_wakeup = pdFALSE;
QueueHandle_t receive_queue = (QueueHandle_t)user_data; QueueHandle_t receive_queue = (QueueHandle_t)user_data;

View File

@@ -144,7 +144,7 @@ const static rmt_receive_config_t onewire_rmt_rx_config = {
.signal_range_max_ns = (ONEWIRE_RESET_PULSE_DURATION + ONEWIRE_RESET_WAIT_DURATION) * 1000 .signal_range_max_ns = (ONEWIRE_RESET_PULSE_DURATION + ONEWIRE_RESET_WAIT_DURATION) * 1000
}; };
static bool onewire_rmt_rx_done_callback(rmt_channel_handle_t channel, rmt_rx_done_event_data_t *edata, void *user_data) static bool onewire_rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data)
{ {
BaseType_t task_woken = pdFALSE; BaseType_t task_woken = pdFALSE;
struct onewire_bus_t *handle = (struct onewire_bus_t *)user_data; struct onewire_bus_t *handle = (struct onewire_bus_t *)user_data;