Skip to content

Commit fffe1b4

Browse files
committed
feature: machine.Timer() accepts kw argments
1 parent bbc6af0 commit fffe1b4

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

raspberrypi/machine_timer.c

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,20 +89,10 @@ void isr_irq_timer(void) {
8989
}
9090
}
9191

92-
STATIC mp_obj_t machine_timer_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
93-
mp_arg_check_num(n_args, n_kw, 1, 1, false);
94-
int id = mp_obj_get_int(args[0]);
95-
if (id > 3) {
96-
mp_raise_ValueError("invalid timer number");
97-
}
98-
machine_timer_obj_t *tim = (machine_timer_obj_t*) &machine_timer_obj[id];
99-
return tim;
100-
}
101-
10292
STATIC mp_obj_t machine_timer_init_helper(machine_timer_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
10393
static const mp_arg_t allowed_args[] = {
10494
{ MP_QSTR_period, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0xffffffff} },
105-
{ MP_QSTR_mode, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
95+
{ MP_QSTR_mode, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = (int) PERIODIC} },
10696
{ MP_QSTR_callback, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
10797
};
10898

@@ -114,13 +104,37 @@ STATIC mp_obj_t machine_timer_init_helper(machine_timer_obj_t *self, size_t n_ar
114104
self->mode = args[1].u_int;
115105
self->callback = args[2].u_obj;
116106
self->counter = 0;
117-
timer_enable(self->id);
107+
108+
// the timer is not enabled in this function
118109

119110
return mp_const_none;
120111
}
121112

113+
STATIC mp_obj_t machine_timer_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
114+
mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
115+
int id = mp_obj_get_int(args[0]);
116+
if (id > 3) {
117+
mp_raise_ValueError("invalid timer number");
118+
}
119+
machine_timer_obj_t *tim = (machine_timer_obj_t*) &machine_timer_obj[id];
120+
121+
mp_map_t kw_args;
122+
mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
123+
machine_timer_init_helper(tim, n_args - 1, args + 1, &kw_args);
124+
125+
// the timer is enabled when the args other than id are provided
126+
if (n_kw > 0) {
127+
timer_enable(id);
128+
}
129+
130+
return tim;
131+
}
132+
122133
STATIC mp_obj_t machine_timer_init(size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
123-
return machine_timer_init_helper(args[0], n_args - 1, args + 1, kw_args);
134+
machine_timer_obj_t *self = (machine_timer_obj_t*) args[0];
135+
machine_timer_init_helper(self, n_args - 1, args + 1, kw_args);
136+
timer_enable(self->id);
137+
return mp_const_none;
124138
}
125139
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(machine_timer_init_obj, 0, machine_timer_init);
126140

0 commit comments

Comments
 (0)