20static 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)
23 rmt_encoder_handle_t bytes_encoder = led_encoder->
bytes_encoder;
24 rmt_encoder_handle_t copy_encoder = led_encoder->
copy_encoder;
25 rmt_encode_state_t session_state = 0;
26 rmt_encode_state_t state = 0;
27 size_t encoded_symbols = 0;
28 switch (led_encoder->
state) {
30 encoded_symbols += bytes_encoder->encode(bytes_encoder, channel, primary_data, data_size, &session_state);
31 if (session_state & RMT_ENCODING_COMPLETE) {
32 led_encoder->
state = 1;
34 if (session_state & RMT_ENCODING_MEM_FULL) {
35 state |= RMT_ENCODING_MEM_FULL;
40 encoded_symbols += copy_encoder->encode(copy_encoder, channel, &led_encoder->
reset_code,
41 sizeof(led_encoder->
reset_code), &session_state);
42 if (session_state & RMT_ENCODING_COMPLETE) {
43 led_encoder->
state = 0;
44 state |= RMT_ENCODING_COMPLETE;
46 if (session_state & RMT_ENCODING_MEM_FULL) {
47 state |= RMT_ENCODING_MEM_FULL;
53 return encoded_symbols;
78 ESP_GOTO_ON_FALSE(config && ret_encoder, ESP_ERR_INVALID_ARG, err,
TAG,
"invalid argument");
81 ESP_GOTO_ON_FALSE(led_encoder, ESP_ERR_NO_MEM, err,
TAG,
"no mem for led strip encoder");
85 rmt_bytes_encoder_config_t bytes_encoder_config;
87 bytes_encoder_config = (rmt_bytes_encoder_config_t) {
90 .duration0 = 0.3 * config->
resolution / 1000000,
92 .duration1 = 0.9 * config->
resolution / 1000000,
96 .duration0 = 0.6 * config->
resolution / 1000000,
98 .duration1 = 0.6 * config->
resolution / 1000000,
104 bytes_encoder_config = (rmt_bytes_encoder_config_t) {
107 .duration0 = 0.3 * config->
resolution / 1000000,
109 .duration1 = 0.9 * config->
resolution / 1000000,
113 .duration0 = 0.9 * config->
resolution / 1000000,
115 .duration1 = 0.3 * config->
resolution / 1000000,
123 rmt_copy_encoder_config_t copy_encoder_config = {};
126 uint32_t reset_ticks = config->
resolution / 1000000 * 280 / 2;
127 led_encoder->
reset_code = (rmt_symbol_word_t) {
129 .duration0 = reset_ticks,
131 .duration1 = reset_ticks,
133 *ret_encoder = &led_encoder->
base;
#define ESP_GOTO_ON_ERROR(x, goto_tag, log_tag, format,...)