Skip to content

Commit d9d4081

Browse files
committed
esp8266: Add dummy entries for non-existing pins to simplify pin logic.
Now pins can be easily looked up in the table using the pin number as the index and vice versa.
1 parent a9a732a commit d9d4081

1 file changed

Lines changed: 9 additions & 8 deletions

File tree

esp8266/modpybpin.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,19 @@
4444
// Removed in SDK 1.1.0
4545
//#define GPIO_PULL_DOWN (2)
4646

47-
STATIC const pyb_pin_obj_t pyb_pin_obj[] = {
47+
STATIC const pyb_pin_obj_t pyb_pin_obj[16 + 1] = {
4848
{{&pyb_pin_type}, 0, FUNC_GPIO0, PERIPHS_IO_MUX_GPIO0_U},
4949
{{&pyb_pin_type}, 1, FUNC_GPIO1, PERIPHS_IO_MUX_U0TXD_U},
5050
{{&pyb_pin_type}, 2, FUNC_GPIO2, PERIPHS_IO_MUX_GPIO2_U},
5151
{{&pyb_pin_type}, 3, FUNC_GPIO3, PERIPHS_IO_MUX_U0RXD_U},
5252
{{&pyb_pin_type}, 4, FUNC_GPIO4, PERIPHS_IO_MUX_GPIO4_U},
5353
{{&pyb_pin_type}, 5, FUNC_GPIO5, PERIPHS_IO_MUX_GPIO5_U},
54+
{{NULL}, 0, 0, 0},
55+
{{NULL}, 0, 0, 0},
56+
{{NULL}, 0, 0, 0},
5457
{{&pyb_pin_type}, 9, FUNC_GPIO9, PERIPHS_IO_MUX_SD_DATA2_U},
5558
{{&pyb_pin_type}, 10, FUNC_GPIO10, PERIPHS_IO_MUX_SD_DATA3_U},
59+
{{NULL}, 0, 0, 0},
5660
{{&pyb_pin_type}, 12, FUNC_GPIO12, PERIPHS_IO_MUX_MTDI_U},
5761
{{&pyb_pin_type}, 13, FUNC_GPIO13, PERIPHS_IO_MUX_MTCK_U},
5862
{{&pyb_pin_type}, 14, FUNC_GPIO14, PERIPHS_IO_MUX_MTMS_U},
@@ -198,16 +202,13 @@ STATIC mp_obj_t pyb_pin_obj_init_helper(pyb_pin_obj_t *self, mp_uint_t n_args, c
198202
STATIC mp_obj_t pyb_pin_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
199203
mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
200204

201-
// Run an argument through the mapper and return the result.
205+
// get the wanted pin object
202206
int wanted_pin = mp_obj_get_int(args[0]);
203207
pyb_pin_obj_t *pin = NULL;
204-
for (int i = 0; i < MP_ARRAY_SIZE(pyb_pin_obj); i++) {
205-
if (pyb_pin_obj[i].phys_port == wanted_pin) {
206-
pin = (pyb_pin_obj_t*)&pyb_pin_obj[i];
207-
break;
208-
}
208+
if (0 <= wanted_pin && wanted_pin < MP_ARRAY_SIZE(pyb_pin_obj)) {
209+
pin = (pyb_pin_obj_t*)&pyb_pin_obj[wanted_pin];
209210
}
210-
if (pin == NULL) {
211+
if (pin == NULL || pin->base.type == NULL) {
211212
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "invalid pin"));
212213
}
213214

0 commit comments

Comments
 (0)