From 9a921ada7fb181f1b7b65e5a4a11b5e8d126dec7 Mon Sep 17 00:00:00 2001 From: morris Date: Thu, 21 Jul 2022 15:41:01 +0800 Subject: [PATCH] rmt: const callback event data --- components/driver/include/driver/rmt_types.h | 4 ++-- .../driver/test_apps/rmt/main/test_rmt_rx.c | 2 +- .../driver/test_apps/rmt/main/test_rmt_tx.c | 6 +++--- docs/en/api-reference/peripherals/rmt.rst | 16 ++++++++-------- .../main/ir_nec_transceiver_main.c | 2 +- .../components/onewire_bus/onewire_bus_rmt.c | 10 +++++----- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/components/driver/include/driver/rmt_types.h b/components/driver/include/driver/rmt_types.h index 96d1f5d936..90baa1f677 100644 --- a/components/driver/include/driver/rmt_types.h +++ b/components/driver/include/driver/rmt_types.h @@ -46,7 +46,7 @@ typedef struct { * * @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 @@ -65,7 +65,7 @@ typedef struct { * @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 */ -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 } diff --git a/components/driver/test_apps/rmt/main/test_rmt_rx.c b/components/driver/test_apps/rmt/main/test_rmt_rx.c index 7528843fe7..72559a4242 100644 --- a/components/driver/test_apps/rmt/main/test_rmt_rx.c +++ b/components/driver/test_apps/rmt/main/test_rmt_rx.c @@ -26,7 +26,7 @@ typedef struct { } test_nec_rx_user_data_t; 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; test_nec_rx_user_data_t *test_user_data = (test_nec_rx_user_data_t *)user_data; diff --git a/components/driver/test_apps/rmt/main/test_rmt_tx.c b/components/driver/test_apps/rmt/main/test_rmt_tx.c index 676834f42b..71bc800210 100644 --- a/components/driver/test_apps/rmt/main/test_rmt_tx.c +++ b/components/driver/test_apps/rmt/main/test_rmt_tx.c @@ -160,7 +160,7 @@ TEST_CASE("rmt_ping_pong_trans_with_dma", "[rmt]") #endif 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; 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 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; TEST_ASSERT_EQUAL(*p_expected_encoded_size, edata->num_symbols); @@ -454,7 +454,7 @@ TEST_CASE("rmt_tx_nec_carrier_with_dma", "[rmt]") #endif 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; *record_time = esp_timer_get_time(); diff --git a/docs/en/api-reference/peripherals/rmt.rst b/docs/en/api-reference/peripherals/rmt.rst index d3e4655671..638c56eb0a 100644 --- a/docs/en/api-reference/peripherals/rmt.rst +++ b/docs/en/api-reference/peripherals/rmt.rst @@ -304,21 +304,21 @@ The receiver will be stopped by the driver when it finishes working (i.e. receiv .. 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; - 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 - 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 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 = { .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 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 ESP_ERROR_CHECK(rmt_receive(rx_channel, raw_symbols, sizeof(raw_symbols), &receive_config)); // wait for RX done signal - rmt_rx_done_event_data_t *rx_data = NULL; - xTaskNotifyWait(0x00, ULONG_MAX, (uint32_t *)&rx_data, portMAX_DELAY); + rmt_rx_done_event_data_t rx_data; + xQueueReceive(receive_queue, &rx_data, portMAX_DELAY); // 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 ^^^^^^^^^^^ diff --git a/examples/peripherals/rmt/ir_nec_transceiver/main/ir_nec_transceiver_main.c b/examples/peripherals/rmt/ir_nec_transceiver/main/ir_nec_transceiver_main.c index b376105d07..c8d3028105 100644 --- a/examples/peripherals/rmt/ir_nec_transceiver/main/ir_nec_transceiver_main.c +++ b/examples/peripherals/rmt/ir_nec_transceiver/main/ir_nec_transceiver_main.c @@ -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; QueueHandle_t receive_queue = (QueueHandle_t)user_data; diff --git a/examples/peripherals/rmt/onewire_ds18b20/components/onewire_bus/onewire_bus_rmt.c b/examples/peripherals/rmt/onewire_ds18b20/components/onewire_bus/onewire_bus_rmt.c index d422383349..af0e6a232c 100644 --- a/examples/peripherals/rmt/onewire_ds18b20/components/onewire_bus/onewire_bus_rmt.c +++ b/examples/peripherals/rmt/onewire_ds18b20/components/onewire_bus/onewire_bus_rmt.c @@ -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 }; -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; struct onewire_bus_t *handle = (struct onewire_bus_t *)user_data; @@ -190,12 +190,12 @@ static bool onewire_rmt_check_presence_pulse(rmt_symbol_word_t *rmt_symbols, siz if (symbol_num >= 2) { // there should be at lease 2 symbols(3 or 4 edges) if (rmt_symbols[0].level1 == 1) { // bus is high before reset pulse if (rmt_symbols[0].duration1 > ONEWIRE_RESET_PRESENSE_WAIT_DURATION_MIN && - rmt_symbols[1].duration0 > ONEWIRE_RESET_PRESENSE_DURATION_MIN) { + rmt_symbols[1].duration0 > ONEWIRE_RESET_PRESENSE_DURATION_MIN) { return true; } } else { // bus is low before reset pulse(first pulse after rmt channel init) if (rmt_symbols[0].duration0 > ONEWIRE_RESET_PRESENSE_WAIT_DURATION_MIN && - rmt_symbols[1].duration1 > ONEWIRE_RESET_PRESENSE_DURATION_MIN) { + rmt_symbols[1].duration1 > ONEWIRE_RESET_PRESENSE_DURATION_MIN) { return true; } } @@ -324,7 +324,7 @@ esp_err_t onewire_del_bus(onewire_bus_handle_t handle) rmt_disable(handle->tx_channel); rmt_del_channel(handle->tx_channel); } - if(handle->receive_queue) { + if (handle->receive_queue) { vQueueDelete(handle->receive_queue); } if (handle->rx_symbols) { @@ -340,7 +340,7 @@ esp_err_t onewire_bus_reset(onewire_bus_handle_t handle) ESP_RETURN_ON_FALSE(handle, ESP_ERR_INVALID_ARG, TAG, "invalid 1-wire handle"); // send reset pulse while receive presence pulse - ESP_RETURN_ON_ERROR(rmt_receive(handle->rx_channel, handle->rx_symbols, sizeof(rmt_symbol_word_t)*2, &onewire_rmt_rx_config), + ESP_RETURN_ON_ERROR(rmt_receive(handle->rx_channel, handle->rx_symbols, sizeof(rmt_symbol_word_t) * 2, &onewire_rmt_rx_config), TAG, "1-wire reset pulse receive failed"); ESP_RETURN_ON_ERROR(rmt_transmit(handle->tx_channel, handle->tx_copy_encoder, &onewire_reset_pulse_symbol, sizeof(onewire_reset_pulse_symbol), &onewire_rmt_tx_config), TAG, "1-wire reset pulse transmit failed");