From b19a3e3e568588a8e2856f2c61c257ce47761787 Mon Sep 17 00:00:00 2001 From: morris Date: Mon, 17 Apr 2023 10:36:21 +0800 Subject: [PATCH] rmt: define RMT_ENCODING_RESET in rmt_encode_state_t Closes https://github.com/espressif/esp-idf/issues/11200 --- .../driver/rmt/include/driver/rmt_encoder.h | 1 + components/driver/rmt/rmt_encoder.c | 6 +++--- components/driver/rmt/rmt_tx.c | 2 +- .../rmt/main/test_util_rmt_encoders.c | 18 +++++++++--------- docs/en/api-reference/peripherals/rmt.rst | 6 +++--- .../rmt/dshot_esc/main/dshot_esc_encoder.c | 8 ++++---- .../ir_nec_transceiver/main/ir_nec_encoder.c | 8 ++++---- .../rmt/led_strip/main/led_strip_encoder.c | 8 ++++---- .../main/musical_score_encoder.c | 2 +- .../stepper_motor/main/stepper_motor_encoder.c | 4 ++-- 10 files changed, 32 insertions(+), 31 deletions(-) diff --git a/components/driver/rmt/include/driver/rmt_encoder.h b/components/driver/rmt/include/driver/rmt_encoder.h index 6fdccf8a81..91ee775068 100644 --- a/components/driver/rmt/include/driver/rmt_encoder.h +++ b/components/driver/rmt/include/driver/rmt_encoder.h @@ -23,6 +23,7 @@ typedef struct rmt_encoder_t rmt_encoder_t; * @brief RMT encoding state */ typedef enum { + RMT_ENCODING_RESET = 0, /*!< The encoding session is in reset state */ RMT_ENCODING_COMPLETE = (1 << 0), /*!< The encoding session is finished, the caller can continue with subsequent encoding */ RMT_ENCODING_MEM_FULL = (1 << 1), /*!< The encoding artifact memory is full, the caller should return from current encoding session */ } rmt_encode_state_t; diff --git a/components/driver/rmt/rmt_encoder.c b/components/driver/rmt/rmt_encoder.c index 35e330f986..f6c5939b74 100644 --- a/components/driver/rmt/rmt_encoder.c +++ b/components/driver/rmt/rmt_encoder.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -61,7 +61,7 @@ static size_t IRAM_ATTR rmt_encode_bytes(rmt_encoder_t *encoder, rmt_channel_han rmt_bytes_encoder_t *bytes_encoder = __containerof(encoder, rmt_bytes_encoder_t, base); rmt_tx_channel_t *tx_chan = __containerof(channel, rmt_tx_channel_t, base); const uint8_t *nd = (const uint8_t *)primary_data; - rmt_encode_state_t state = 0; + rmt_encode_state_t state = RMT_ENCODING_RESET; dma_descriptor_t *desc0 = NULL; dma_descriptor_t *desc1 = NULL; @@ -167,7 +167,7 @@ static size_t IRAM_ATTR rmt_encode_copy(rmt_encoder_t *encoder, rmt_channel_hand rmt_copy_encoder_t *copy_encoder = __containerof(encoder, rmt_copy_encoder_t, base); rmt_tx_channel_t *tx_chan = __containerof(channel, rmt_tx_channel_t, base); rmt_symbol_word_t *symbols = (rmt_symbol_word_t *)primary_data; - rmt_encode_state_t state = 0; + rmt_encode_state_t state = RMT_ENCODING_RESET; dma_descriptor_t *desc0 = NULL; dma_descriptor_t *desc1 = NULL; diff --git a/components/driver/rmt/rmt_tx.c b/components/driver/rmt/rmt_tx.c index 8f64d11de9..7a91ced31e 100644 --- a/components/driver/rmt/rmt_tx.c +++ b/components/driver/rmt/rmt_tx.c @@ -567,7 +567,7 @@ static void IRAM_ATTR rmt_tx_mark_eof(rmt_tx_channel_t *tx_chan) static size_t IRAM_ATTR rmt_encode_check_result(rmt_tx_channel_t *tx_chan, rmt_tx_trans_desc_t *t) { - rmt_encode_state_t encode_state = 0; + rmt_encode_state_t encode_state = RMT_ENCODING_RESET; rmt_encoder_handle_t encoder = t->encoder; size_t encoded_symbols = encoder->encode(encoder, &tx_chan->base, t->payload, t->payload_bytes, &encode_state); if (encode_state & RMT_ENCODING_COMPLETE) { diff --git a/components/driver/test_apps/rmt/main/test_util_rmt_encoders.c b/components/driver/test_apps/rmt/main/test_util_rmt_encoders.c index ae69e35edb..5cfadd4097 100644 --- a/components/driver/test_apps/rmt/main/test_util_rmt_encoders.c +++ b/components/driver/test_apps/rmt/main/test_util_rmt_encoders.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -29,8 +29,8 @@ TEST_RMT_ENCODER_ATTR static size_t rmt_encode_led_strip(rmt_encoder_t *encoder, rmt_channel_handle_t channel, const void *primary_data, size_t data_size, rmt_encode_state_t *ret_state) { rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base); - rmt_encode_state_t session_state = 0; - rmt_encode_state_t state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; + rmt_encode_state_t state = RMT_ENCODING_RESET; size_t encoded_symbols = 0; switch (led_encoder->state) { case 0: @@ -47,7 +47,7 @@ static size_t rmt_encode_led_strip(rmt_encoder_t *encoder, rmt_channel_handle_t encoded_symbols += led_encoder->copy_encoder->encode(led_encoder->copy_encoder, channel, &led_encoder->reset_code, sizeof(led_encoder->reset_code), &session_state); if (session_state & RMT_ENCODING_COMPLETE) { state |= RMT_ENCODING_COMPLETE; - led_encoder->state = 0; // back to the initial encoding session + led_encoder->state = RMT_ENCODING_RESET; // back to the initial encoding session } if (session_state & RMT_ENCODING_MEM_FULL) { state |= RMT_ENCODING_MEM_FULL; @@ -73,7 +73,7 @@ static esp_err_t rmt_led_strip_encoder_reset(rmt_encoder_t *encoder) rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base); rmt_encoder_reset(led_encoder->bytes_encoder); rmt_encoder_reset(led_encoder->copy_encoder); - led_encoder->state = 0; + led_encoder->state = RMT_ENCODING_RESET; return ESP_OK; } @@ -122,8 +122,8 @@ typedef struct { static size_t rmt_encode_nec_protocol(rmt_encoder_t *encoder, rmt_channel_handle_t channel, const void *primary_data, size_t data_size, rmt_encode_state_t *ret_state) { rmt_nec_protocol_encoder_t *nec_encoder = __containerof(encoder, rmt_nec_protocol_encoder_t, base); - rmt_encode_state_t session_state = 0; - rmt_encode_state_t state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; + rmt_encode_state_t state = RMT_ENCODING_RESET; size_t encoded_symbols = 0; const rmt_symbol_word_t nec_leading_symbol = { .level0 = 1, @@ -162,7 +162,7 @@ static size_t rmt_encode_nec_protocol(rmt_encoder_t *encoder, rmt_channel_handle encoded_symbols += nec_encoder->copy_encoder->encode(nec_encoder->copy_encoder, channel, &nec_ending_symbol, sizeof(nec_ending_symbol), &session_state); if (session_state & RMT_ENCODING_COMPLETE) { state |= RMT_ENCODING_COMPLETE; - nec_encoder->state = 0; // back to the initial encoding session + nec_encoder->state = RMT_ENCODING_RESET; // back to the initial encoding session } if (session_state & RMT_ENCODING_MEM_FULL) { state |= RMT_ENCODING_MEM_FULL; @@ -188,7 +188,7 @@ static esp_err_t rmt_nec_protocol_encoder_reset(rmt_encoder_t *encoder) rmt_nec_protocol_encoder_t *nec_encoder = __containerof(encoder, rmt_nec_protocol_encoder_t, base); rmt_encoder_reset(nec_encoder->copy_encoder); rmt_encoder_reset(nec_encoder->bytes_encoder); - nec_encoder->state = 0; + nec_encoder->state = RMT_ENCODING_RESET; return ESP_OK; } diff --git a/docs/en/api-reference/peripherals/rmt.rst b/docs/en/api-reference/peripherals/rmt.rst index 104bd6ccdc..85077ca78b 100644 --- a/docs/en/api-reference/peripherals/rmt.rst +++ b/docs/en/api-reference/peripherals/rmt.rst @@ -419,8 +419,8 @@ Then we can construct the NEC :cpp:member:`rmt_encoder_t::encode` function in th static size_t rmt_encode_ir_nec(rmt_encoder_t *encoder, rmt_channel_handle_t channel, const void *primary_data, size_t data_size, rmt_encode_state_t *ret_state) { rmt_ir_nec_encoder_t *nec_encoder = __containerof(encoder, rmt_ir_nec_encoder_t, base); - rmt_encode_state_t session_state = 0; - rmt_encode_state_t state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; + rmt_encode_state_t state = RMT_ENCODING_RESET; size_t encoded_symbols = 0; ir_nec_scan_code_t *scan_code = (ir_nec_scan_code_t *)primary_data; rmt_encoder_handle_t copy_encoder = nec_encoder->copy_encoder; @@ -461,7 +461,7 @@ Then we can construct the NEC :cpp:member:`rmt_encoder_t::encode` function in th encoded_symbols += copy_encoder->encode(copy_encoder, channel, &nec_encoder->nec_ending_symbol, sizeof(rmt_symbol_word_t), &session_state); if (session_state & RMT_ENCODING_COMPLETE) { - nec_encoder->state = 0; // back to the initial encoding session + nec_encoder->state = RMT_ENCODING_RESET; // back to the initial encoding session state |= RMT_ENCODING_COMPLETE; // telling the caller the NEC encoding has finished } if (session_state & RMT_ENCODING_MEM_FULL) { diff --git a/examples/peripherals/rmt/dshot_esc/main/dshot_esc_encoder.c b/examples/peripherals/rmt/dshot_esc/main/dshot_esc_encoder.c index 3f46ea7486..1f75d28203 100644 --- a/examples/peripherals/rmt/dshot_esc/main/dshot_esc_encoder.c +++ b/examples/peripherals/rmt/dshot_esc/main/dshot_esc_encoder.c @@ -51,8 +51,8 @@ static size_t rmt_encode_dshot_esc(rmt_encoder_t *encoder, rmt_channel_handle_t rmt_dshot_esc_encoder_t *dshot_encoder = __containerof(encoder, rmt_dshot_esc_encoder_t, base); rmt_encoder_handle_t bytes_encoder = dshot_encoder->bytes_encoder; rmt_encoder_handle_t copy_encoder = dshot_encoder->copy_encoder; - rmt_encode_state_t session_state = 0; - rmt_encode_state_t state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; + rmt_encode_state_t state = RMT_ENCODING_RESET; size_t encoded_symbols = 0; // convert user data into dshot frame @@ -76,7 +76,7 @@ static size_t rmt_encode_dshot_esc(rmt_encoder_t *encoder, rmt_channel_handle_t sizeof(rmt_symbol_word_t), &session_state); if (session_state & RMT_ENCODING_COMPLETE) { state |= RMT_ENCODING_COMPLETE; - dshot_encoder->state = 0; // switch to next state when current encoding session finished + dshot_encoder->state = RMT_ENCODING_RESET; // switch to next state when current encoding session finished } if (session_state & RMT_ENCODING_MEM_FULL) { state |= RMT_ENCODING_MEM_FULL; @@ -102,7 +102,7 @@ static esp_err_t rmt_dshot_encoder_reset(rmt_encoder_t *encoder) rmt_dshot_esc_encoder_t *dshot_encoder = __containerof(encoder, rmt_dshot_esc_encoder_t, base); rmt_encoder_reset(dshot_encoder->bytes_encoder); rmt_encoder_reset(dshot_encoder->copy_encoder); - dshot_encoder->state = 0; + dshot_encoder->state = RMT_ENCODING_RESET; return ESP_OK; } diff --git a/examples/peripherals/rmt/ir_nec_transceiver/main/ir_nec_encoder.c b/examples/peripherals/rmt/ir_nec_transceiver/main/ir_nec_encoder.c index 7e33c622d4..66f309f9d0 100644 --- a/examples/peripherals/rmt/ir_nec_transceiver/main/ir_nec_encoder.c +++ b/examples/peripherals/rmt/ir_nec_transceiver/main/ir_nec_encoder.c @@ -21,8 +21,8 @@ typedef struct { static size_t rmt_encode_ir_nec(rmt_encoder_t *encoder, rmt_channel_handle_t channel, const void *primary_data, size_t data_size, rmt_encode_state_t *ret_state) { rmt_ir_nec_encoder_t *nec_encoder = __containerof(encoder, rmt_ir_nec_encoder_t, base); - rmt_encode_state_t session_state = 0; - rmt_encode_state_t state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; + rmt_encode_state_t state = RMT_ENCODING_RESET; size_t encoded_symbols = 0; ir_nec_scan_code_t *scan_code = (ir_nec_scan_code_t *)primary_data; rmt_encoder_handle_t copy_encoder = nec_encoder->copy_encoder; @@ -63,7 +63,7 @@ static size_t rmt_encode_ir_nec(rmt_encoder_t *encoder, rmt_channel_handle_t cha encoded_symbols += copy_encoder->encode(copy_encoder, channel, &nec_encoder->nec_ending_symbol, sizeof(rmt_symbol_word_t), &session_state); if (session_state & RMT_ENCODING_COMPLETE) { - nec_encoder->state = 0; // back to the initial encoding session + nec_encoder->state = RMT_ENCODING_RESET; // back to the initial encoding session state |= RMT_ENCODING_COMPLETE; } if (session_state & RMT_ENCODING_MEM_FULL) { @@ -90,7 +90,7 @@ static esp_err_t rmt_ir_nec_encoder_reset(rmt_encoder_t *encoder) rmt_ir_nec_encoder_t *nec_encoder = __containerof(encoder, rmt_ir_nec_encoder_t, base); rmt_encoder_reset(nec_encoder->copy_encoder); rmt_encoder_reset(nec_encoder->bytes_encoder); - nec_encoder->state = 0; + nec_encoder->state = RMT_ENCODING_RESET; return ESP_OK; } diff --git a/examples/peripherals/rmt/led_strip/main/led_strip_encoder.c b/examples/peripherals/rmt/led_strip/main/led_strip_encoder.c index aff7fee9fe..8ec7e1c541 100644 --- a/examples/peripherals/rmt/led_strip/main/led_strip_encoder.c +++ b/examples/peripherals/rmt/led_strip/main/led_strip_encoder.c @@ -22,8 +22,8 @@ static size_t rmt_encode_led_strip(rmt_encoder_t *encoder, rmt_channel_handle_t rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base); rmt_encoder_handle_t bytes_encoder = led_encoder->bytes_encoder; rmt_encoder_handle_t copy_encoder = led_encoder->copy_encoder; - rmt_encode_state_t session_state = 0; - rmt_encode_state_t state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; + rmt_encode_state_t state = RMT_ENCODING_RESET; size_t encoded_symbols = 0; switch (led_encoder->state) { case 0: // send RGB data @@ -40,7 +40,7 @@ static size_t rmt_encode_led_strip(rmt_encoder_t *encoder, rmt_channel_handle_t encoded_symbols += copy_encoder->encode(copy_encoder, channel, &led_encoder->reset_code, sizeof(led_encoder->reset_code), &session_state); if (session_state & RMT_ENCODING_COMPLETE) { - led_encoder->state = 0; // back to the initial encoding session + led_encoder->state = RMT_ENCODING_RESET; // back to the initial encoding session state |= RMT_ENCODING_COMPLETE; } if (session_state & RMT_ENCODING_MEM_FULL) { @@ -67,7 +67,7 @@ static esp_err_t rmt_led_strip_encoder_reset(rmt_encoder_t *encoder) rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base); rmt_encoder_reset(led_encoder->bytes_encoder); rmt_encoder_reset(led_encoder->copy_encoder); - led_encoder->state = 0; + led_encoder->state = RMT_ENCODING_RESET; return ESP_OK; } diff --git a/examples/peripherals/rmt/musical_buzzer/main/musical_score_encoder.c b/examples/peripherals/rmt/musical_buzzer/main/musical_score_encoder.c index a8f7574c0a..d014ee14a3 100644 --- a/examples/peripherals/rmt/musical_buzzer/main/musical_score_encoder.c +++ b/examples/peripherals/rmt/musical_buzzer/main/musical_score_encoder.c @@ -19,7 +19,7 @@ static size_t rmt_encode_musical_score(rmt_encoder_t *encoder, rmt_channel_handl { rmt_musical_score_encoder_t *score_encoder = __containerof(encoder, rmt_musical_score_encoder_t, base); rmt_encoder_handle_t copy_encoder = score_encoder->copy_encoder; - rmt_encode_state_t session_state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; buzzer_musical_score_t *score = (buzzer_musical_score_t *)primary_data; uint32_t rmt_raw_symbol_duration = score_encoder->resolution / score->freq_hz / 2; rmt_symbol_word_t musical_score_rmt_symbol = { diff --git a/examples/peripherals/rmt/stepper_motor/main/stepper_motor_encoder.c b/examples/peripherals/rmt/stepper_motor/main/stepper_motor_encoder.c index ea2e58cb8e..29531fef29 100644 --- a/examples/peripherals/rmt/stepper_motor/main/stepper_motor_encoder.c +++ b/examples/peripherals/rmt/stepper_motor/main/stepper_motor_encoder.c @@ -31,7 +31,7 @@ static size_t rmt_encode_stepper_motor_curve(rmt_encoder_t *encoder, rmt_channel { rmt_stepper_curve_encoder_t *motor_encoder = __containerof(encoder, rmt_stepper_curve_encoder_t, base); rmt_encoder_handle_t copy_encoder = motor_encoder->copy_encoder; - rmt_encode_state_t session_state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; uint32_t points_num = *(uint32_t *)primary_data; size_t encoded_symbols = 0; if (motor_encoder->flags.is_accel_curve) { @@ -127,7 +127,7 @@ static size_t rmt_encode_stepper_motor_uniform(rmt_encoder_t *encoder, rmt_chann { rmt_stepper_uniform_encoder_t *motor_encoder = __containerof(encoder, rmt_stepper_uniform_encoder_t, base); rmt_encoder_handle_t copy_encoder = motor_encoder->copy_encoder; - rmt_encode_state_t session_state = 0; + rmt_encode_state_t session_state = RMT_ENCODING_RESET; uint32_t target_freq_hz = *(uint32_t *)primary_data; uint32_t symbol_duration = motor_encoder->resolution / target_freq_hz / 2; rmt_symbol_word_t freq_sample = {