Skip to content

Commit a0f7343

Browse files
committed
esp32/machine_pwm.c: Add check_duty_x().
Try to resolve `set_duty(self) -> set_duty_xyz(self, arg) -> apply_duty(self)` Co-Authored-By: Angus Gratton <[email protected]> Signed-off-by: Ihor Nehrutsa <[email protected]>
1 parent e978ad9 commit a0f7343

File tree

1 file changed

+26
-27
lines changed

1 file changed

+26
-27
lines changed

ports/esp32/machine_pwm.c

+26-27
Original file line numberDiff line numberDiff line change
@@ -299,42 +299,43 @@ static uint32_t get_duty_ns(machine_pwm_obj_t *self) {
299299
return duty_to_ns(self, get_duty_u16(self));
300300
}
301301

302-
static void set_duty_u16(machine_pwm_obj_t *self, int duty) {
302+
static void check_duty_u16(machine_pwm_obj_t *self, int duty) {
303303
if ((duty < 0) || (duty > MAX_16_DUTY)) {
304304
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("duty_u16 must be from 0 to %d"), MAX_16_DUTY);
305305
}
306-
307306
self->duty_scale = DUTY_16;
308307
self->duty_ui = duty;
308+
}
309+
310+
static void set_duty_u16(machine_pwm_obj_t *self, int duty) {
311+
check_duty_u16(self, duty);
309312
apply_duty(self);
310313
}
311314

312-
static void set_duty_u10(machine_pwm_obj_t *self, int duty) {
315+
static void check_duty_u10(machine_pwm_obj_t *self, int duty) {
313316
if ((duty < 0) || (duty > MAX_10_DUTY)) {
314317
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("duty must be from 0 to %u"), MAX_10_DUTY);
315318
}
316319
self->duty_scale = DUTY_10;
317320
self->duty_ui = duty;
321+
}
322+
323+
static void set_duty_u10(machine_pwm_obj_t *self, int duty) {
324+
check_duty_u10(self, duty);
318325
apply_duty(self);
319326
}
320327

321-
static void set_duty_ns(machine_pwm_obj_t *self, int ns) {
328+
static void check_duty_ns(machine_pwm_obj_t *self, int ns) {
322329
if ((ns < 0) || (ns > duty_to_ns(self, MAX_16_DUTY))) {
323330
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("duty_ns must be from 0 to %d ns"), duty_to_ns(self, MAX_16_DUTY));
324331
}
325332
self->duty_scale = DUTY_NS;
326333
self->duty_ui = ns;
327-
apply_duty(self);
328334
}
329335

330-
static void set_duty(machine_pwm_obj_t *self) {
331-
if (self->duty_scale == DUTY_16) {
332-
set_duty_u16(self, self->duty_ui);
333-
} else if (self->duty_scale == DUTY_10) {
334-
set_duty_u10(self, self->duty_ui);
335-
} else if (self->duty_scale == DUTY_NS) {
336-
set_duty_ns(self, self->duty_ui);
337-
}
336+
static void set_duty_ns(machine_pwm_obj_t *self, int ns) {
337+
check_duty_ns(self, ns);
338+
apply_duty(self);
338339
}
339340

340341
#if !(CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2)
@@ -518,7 +519,13 @@ static void select_timer(machine_pwm_obj_t *self, int freq) {
518519
}
519520
}
520521

521-
/******************************************************************************/
522+
static void set_freq_duty(machine_pwm_obj_t *self, unsigned int freq) {
523+
select_timer(self, freq);
524+
set_freq(self, freq);
525+
apply_duty(self);
526+
}
527+
528+
// ******************************************************************************
522529
// MicroPython bindings for PWM
523530

524531
static void mp_machine_pwm_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
@@ -585,14 +592,11 @@ static void mp_machine_pwm_init_helper(machine_pwm_obj_t *self,
585592
int duty_u16 = args[ARG_duty_u16].u_int;
586593
int duty_ns = args[ARG_duty_ns].u_int;
587594
if (duty_u16 >= 0) {
588-
self->duty_scale = DUTY_16;
589-
self->duty_ui = duty_u16;
595+
check_duty_u16(self, duty_u16);
590596
} else if (duty_ns >= 0) {
591-
self->duty_scale = DUTY_NS;
592-
self->duty_ui = duty_ns;
597+
check_duty_ns(self, duty_ns);
593598
} else if (duty >= 0) {
594-
self->duty_scale = DUTY_10;
595-
self->duty_ui = duty;
599+
check_duty_u10(self, duty);
596600
} else if (self->duty_scale == 0) {
597601
self->duty_scale = DUTY_16;
598602
self->duty_ui = PWM_DUTY;
@@ -623,10 +627,7 @@ static void mp_machine_pwm_init_helper(machine_pwm_obj_t *self,
623627
freq = PWM_FREQ;
624628
}
625629
}
626-
627-
select_timer(self, freq);
628-
set_freq(self, freq);
629-
set_duty(self);
630+
set_freq_duty(self, freq);
630631
}
631632

632633
static void self_reset(machine_pwm_obj_t *self) {
@@ -685,9 +686,7 @@ static void mp_machine_pwm_freq_set(machine_pwm_obj_t *self, mp_int_t freq) {
685686
if (freq == timers[self->mode][self->timer].freq) {
686687
return;
687688
}
688-
select_timer(self, freq);
689-
set_freq(self, freq);
690-
set_duty(self);
689+
set_freq_duty(self, freq);
691690
}
692691

693692
static mp_obj_t mp_machine_pwm_duty_get(machine_pwm_obj_t *self) {

0 commit comments

Comments
 (0)