summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/esp8266/machine_pin.c28
-rw-r--r--ports/esp8266/modesp.c4
2 files changed, 18 insertions, 14 deletions
diff --git a/ports/esp8266/machine_pin.c b/ports/esp8266/machine_pin.c
index a76f55423..344197da9 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 878d9392a..95595faeb 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;
}