diff options
| author | robert-hh <robert@hammelrath.com> | 2023-06-07 14:58:56 +0200 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2023-07-20 17:31:38 +1000 |
| commit | 3819ee4a6f07aa01f6e9d41c6617b931499f406b (patch) | |
| tree | 75f100971fbb0324fa9e07d91ad2a035bdbf6114 | |
| parent | c02da6d81dcc668fd719dc78efb848388a561074 (diff) | |
esp32/machine_pin: Add a pin-find func and use it in machine_pin_get_id.
The new machine_pin_find() function accepts a Pin object and a integer
object as input and returns a pin object. That can be extended later to
accept a string object, once named pins are supported.
Signed-off-by: robert-hh <robert@hammelrath.com>
| -rw-r--r-- | ports/esp32/machine_pin.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/ports/esp32/machine_pin.c b/ports/esp32/machine_pin.c index 5ea41701a..119b5d250 100644 --- a/ports/esp32/machine_pin.c +++ b/ports/esp32/machine_pin.c @@ -248,12 +248,27 @@ STATIC void machine_pin_isr_handler(void *arg) { mp_hal_wake_main_task_from_isr(); } -gpio_num_t machine_pin_get_id(mp_obj_t pin_in) { - if (mp_obj_get_type(pin_in) != &machine_pin_type) { - mp_raise_ValueError(MP_ERROR_TEXT("expecting a pin")); +STATIC const machine_pin_obj_t *machine_pin_find(mp_obj_t pin_in) { + if (mp_obj_is_type(pin_in, &machine_pin_type)) { + return pin_in; + } + // get the wanted pin object + if (mp_obj_is_small_int(pin_in)) { + int wanted_pin = mp_obj_get_int(pin_in); + if (0 <= wanted_pin && wanted_pin < MP_ARRAY_SIZE(machine_pin_obj)) { + machine_pin_obj_t *self = (machine_pin_obj_t *)&machine_pin_obj[wanted_pin]; + if (self->base.type != NULL) { + return self; + } + } } - machine_pin_obj_t *self = pin_in; - return self->id; + // At this place a check for named pins may be added + // + mp_raise_ValueError(MP_ERROR_TEXT("expecting a pin")); +} + +gpio_num_t machine_pin_get_id(mp_obj_t pin_in) { + return machine_pin_find(pin_in)->id; } STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { @@ -354,14 +369,7 @@ mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true); // get the wanted pin object - int wanted_pin = mp_obj_get_int(args[0]); - const machine_pin_obj_t *self = NULL; - if (0 <= wanted_pin && wanted_pin < MP_ARRAY_SIZE(machine_pin_obj)) { - self = (machine_pin_obj_t *)&machine_pin_obj[wanted_pin]; - } - if (self == NULL || self->base.type == NULL) { - mp_raise_ValueError(MP_ERROR_TEXT("invalid pin")); - } + const machine_pin_obj_t *self = machine_pin_find(args[0]); if (n_args > 1 || n_kw > 0) { // pin mode given, so configure this GPIO |
