Skip to content

Commit eef5eb8

Browse files
committed
updates bitstream to use new IDF API
1 parent 9cc0023 commit eef5eb8

File tree

1 file changed

+32
-22
lines changed

1 file changed

+32
-22
lines changed

micropy_updates/esp32/machine_bitstream.c

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ static void IRAM_ATTR machine_bitstream_high_low_bitbang(mp_hal_pin_obj_t pin, u
102102

103103
typedef struct {
104104
uint32_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
170169
static esp_err_t rmt_led_strip_encoder_reset(rmt_encoder_t *encoder)
171170
{
172171
rmt_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
{
182181
esp_err_t ret = ESP_OK;
183182
rmt_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+
185187
led_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+
}
187191
led_encoder->base.encode = rmt_encode_led_strip;
188192
led_encoder->base.del = rmt_del_led_strip_encoder;
189193
led_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);
198202
else 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);
201205
else 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);
204208
else 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);
207211
else bit1_duration1 = (uint32_t)config->bit1_duration1;
208212

209213
rmt_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+
goto err;
233+
}
227234
rmt_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+
goto err;
238+
}
229239

230240
uint32_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

269279
led_strip_encoder_config_t encoder_config = { 0 };
270280
encoder_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];
275285
encoder_config.reset_duration = -50000;
276286

277287
rmt_channel_handle_t channel_handle = NULL;

0 commit comments

Comments
 (0)