diff --git a/ports/esp8266/machine_pin.c b/ports/esp8266/machine_pin.c index a76f554237..344197da94 100644 --- a/ports/esp8266/machine_pin.c +++ b/ports/esp8266/machine_pin.c @@ -122,11 +122,22 @@ void MP_FASTCODE(pin_intr_handler_part2)(uint32_t status) { } pyb_pin_obj_t *mp_obj_get_pin_obj(mp_obj_t pin_in) { - if (mp_obj_get_type(pin_in) != &pyb_pin_type) { - mp_raise_ValueError(MP_ERROR_TEXT("expecting a pin")); + if (mp_obj_is_type(pin_in, &pyb_pin_type)) { + return pin_in; } - pyb_pin_obj_t *self = pin_in; - return self; + // 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(pyb_pin_obj)) { + pyb_pin_obj_t *pin = (pyb_pin_obj_t *)&pyb_pin_obj[wanted_pin]; + if (pin->base.type != NULL) { + return pin; + } + } + } + // At this place a check for named pins may be added. + // + mp_raise_ValueError(MP_ERROR_TEXT("invalid pin")); } uint mp_obj_get_pin(mp_obj_t pin_in) { @@ -310,14 +321,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]); - pyb_pin_obj_t *pin = NULL; - if (0 <= wanted_pin && wanted_pin < MP_ARRAY_SIZE(pyb_pin_obj)) { - pin = (pyb_pin_obj_t *)&pyb_pin_obj[wanted_pin]; - } - if (pin == NULL || pin->base.type == NULL) { - mp_raise_ValueError(MP_ERROR_TEXT("invalid pin")); - } + pyb_pin_obj_t *pin = mp_obj_get_pin_obj(args[0]); if (n_args > 1 || n_kw > 0) { // pin mode given, so configure this GPIO diff --git a/ports/esp8266/modesp.c b/ports/esp8266/modesp.c index 878d9392a1..95595faebc 100644 --- a/ports/esp8266/modesp.c +++ b/ports/esp8266/modesp.c @@ -201,8 +201,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_check_fw_obj, esp_check_fw); STATIC mp_obj_t esp_apa102_write_(mp_obj_t clockPin, mp_obj_t dataPin, mp_obj_t buf) { mp_buffer_info_t bufinfo; mp_get_buffer_raise(buf, &bufinfo, MP_BUFFER_READ); - esp_apa102_write(mp_obj_get_pin_obj(clockPin)->phys_port, - mp_obj_get_pin_obj(dataPin)->phys_port, + esp_apa102_write(mp_obj_get_pin(clockPin), + mp_obj_get_pin(dataPin), (uint8_t *)bufinfo.buf, bufinfo.len); return mp_const_none; }