@@ -102,11 +102,11 @@ static void IRAM_ATTR machine_bitstream_high_low_bitbang(mp_hal_pin_obj_t pin, u
102102
103103typedef struct {
104104uint32_t resolution ;/*!< Encoder resolution, in Hz */
105- int32_t bit0_duration0 ;
106- int32_t bit0_duration1 ;
107- int32_t bit1_duration0 ;
108- int32_t bit1_duration1 ;
109- int32_t reset_duration ;
105+ int64_t bit0_duration0 ;
106+ int64_t bit0_duration1 ;
107+ int64_t bit1_duration0 ;
108+ int64_t bit1_duration1 ;
109+ int64_t reset_duration ;
110110}led_strip_encoder_config_t ;
111111
112112
@@ -166,7 +166,6 @@ static esp_err_t rmt_del_led_strip_encoder(rmt_encoder_t *encoder)
166166}
167167
168168
169- RMT_ENCODER_FUNC_ATTR
170169static esp_err_t rmt_led_strip_encoder_reset (rmt_encoder_t * encoder )
171170{
172171rmt_led_strip_encoder_t * led_encoder = __containerof (encoder ,rmt_led_strip_encoder_t ,base );
@@ -181,29 +180,34 @@ esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rm
181180{
182181esp_err_t ret = ESP_OK ;
183182rmt_led_strip_encoder_t * led_encoder = NULL ;
184- ESP_GOTO_ON_FALSE (config && ret_encoder ,ESP_ERR_INVALID_ARG ,err ,TAG ,"invalid argument" );
183+ if (!(config && ret_encoder )) {
184+ return ESP_ERR_INVALID_ARG ;
185+ }
186+
185187led_encoder = rmt_alloc_encoder_mem (sizeof (rmt_led_strip_encoder_t ));
186- ESP_GOTO_ON_FALSE (led_encoder ,ESP_ERR_NO_MEM ,err ,TAG ,"no mem for led strip encoder" );
188+ if (!led_encoder ) {
189+ return ESP_ERR_NO_MEM ;
190+ }
187191led_encoder -> base .encode = rmt_encode_led_strip ;
188192led_encoder -> base .del = rmt_del_led_strip_encoder ;
189193led_encoder -> base .reset = rmt_led_strip_encoder_reset ;
190194
191- uint32_t bit0_duration0 ;
192- uint32_t bit0_duration1 ;
195+ uint32_t bit0_duration0 = 0 ;
196+ uint32_t bit0_duration1 = 0 ;
193197
194- uint32_t bit1_duration0 ;
195- uint32_t bit2_duration1 ;
198+ uint32_t bit1_duration0 = 0 ;
199+ uint32_t bit2_duration1 = 0 ;
196200
197- if (config -> bit0_duration0 < 0 )bit0_duration0 = (uint32_t )- config -> bit0_duration0 ;
201+ if (config -> bit0_duration0 < 0 )bit0_duration0 = (uint32_t )( - config -> bit0_duration0 ) ;
198202else bit0_duration0 = (uint32_t )config -> bit0_duration0 ;
199203
200- if (config -> bit0_duration1 < 0 )bit0_duration1 = (uint32_t )- config -> bit0_duration1 ;
204+ if (config -> bit0_duration1 < 0 )bit0_duration1 = (uint32_t )( - config -> bit0_duration1 ) ;
201205else bit0_duration1 = (uint32_t )config -> bit0_duration1 ;
202206
203- if (config -> bit1_duration0 < 0 )bit1_duration0 = (uint32_t )- config -> bit1_duration0 ;
207+ if (config -> bit1_duration0 < 0 )bit1_duration0 = (uint32_t )( - config -> bit1_duration0 ) ;
204208else bit1_duration0 = (uint32_t )config -> bit1_duration0 ;
205209
206- if (config -> bit1_duration1 < 0 )bit1_duration1 = (uint32_t )- config -> bit1_duration1 ;
210+ if (config -> bit1_duration1 < 0 )bit1_duration1 = (uint32_t )( - config -> bit1_duration1 ) ;
207211else bit1_duration1 = (uint32_t )config -> bit1_duration1 ;
208212
209213rmt_bytes_encoder_config_t bytes_encoder_config = {
@@ -223,9 +227,15 @@ esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rm
223227 };
224228
225229
226- ESP_GOTO_ON_ERROR (rmt_new_bytes_encoder (& bytes_encoder_config ,& led_encoder -> bytes_encoder ),err ,TAG ,"create bytes encoder failed" );
230+ ret = rmt_new_bytes_encoder (& bytes_encoder_config ,& led_encoder -> bytes_encoder )
231+ if (err != ESP_OK ) {
232+ gotoerr ;
233+ }
227234rmt_copy_encoder_config_t copy_encoder_config = {};
228- ESP_GOTO_ON_ERROR (rmt_new_copy_encoder (& copy_encoder_config ,& led_encoder -> copy_encoder ),err ,TAG ,"create copy encoder failed" );
235+ ret = rmt_new_copy_encoder (& copy_encoder_config ,& led_encoder -> copy_encoder )
236+ if (err != ESP_OK ) {
237+ gotoerr ;
238+ }
229239
230240uint32_t reset_duration ;
231241
@@ -268,10 +278,10 @@ static void machine_bitstream_high_low_rmt(mp_hal_pin_obj_t pin, uint32_t *timin
268278
269279led_strip_encoder_config_t encoder_config = {0 };
270280encoder_config .resolution = RMT_LED_STRIP_RESOLUTION_HZ ;
271- encoder_config .bit0_duration0 = (int32_t )timing_ns [0 ];
272- encoder_config .bit0_duration1 = - (int32_t )timing_ns [1 ];
273- encoder_config .bit1_duration0 = (int32_t )timing_ns [2 ];
274- encoder_config .bit1_duration1 = - (int32_t )timing_ns [3 ];
281+ encoder_config .bit0_duration0 = (int64_t )timing_ns [0 ];
282+ encoder_config .bit0_duration1 = - (int64_t )timing_ns [1 ];
283+ encoder_config .bit1_duration0 = (int64_t )timing_ns [2 ];
284+ encoder_config .bit1_duration1 = - (int64_t )timing_ns [3 ];
275285encoder_config .reset_duration = -50000 ;
276286
277287rmt_channel_handle_t channel_handle = NULL ;