diff options
Diffstat (limited to 'shared-bindings')
| -rw-r--r-- | shared-bindings/microcontroller/Pin.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/shared-bindings/microcontroller/Pin.c b/shared-bindings/microcontroller/Pin.c index 33bd43347..c456a030f 100644 --- a/shared-bindings/microcontroller/Pin.c +++ b/shared-bindings/microcontroller/Pin.c @@ -46,27 +46,37 @@ //| `board` or `microcontroller.pin` to reference the desired pin. //| -STATIC void mcu_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { - mcu_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); - // If the pin is in board, print its version there. +static void get_pin_name(const mcu_pin_obj_t *self, qstr* package, qstr* module, qstr* name) { const mp_map_t* board_map = &board_module_globals.map; for (uint8_t i = 0; i < board_map->alloc; i++) { if (board_map->table[i].value == self) { - mp_printf(print, "%q.%q", MP_QSTR_board, - MP_OBJ_QSTR_VALUE(board_map->table[i].key)); + *package = 0; + *module = MP_QSTR_board; + *name = MP_OBJ_QSTR_VALUE(board_map->table[i].key); return; } } const mp_map_t* mcu_map = &mcu_pin_globals.map; for (uint8_t i = 0; i < mcu_map->alloc; i++) { if (mcu_map->table[i].value == self) { - mp_printf(print, "%q.%q.%q", MP_QSTR_microcontroller, MP_QSTR_pin, - MP_OBJ_QSTR_VALUE(mcu_map->table[i].key)); + *package = MP_QSTR_microcontroller; + *module = MP_QSTR_pin; + *name = MP_OBJ_QSTR_VALUE(mcu_map->table[i].key); return; } } } +STATIC void mcu_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { + mcu_pin_obj_t *self = MP_OBJ_TO_PTR(self_in); + qstr package; + qstr module; + qstr name; + + get_pin_name(self, &package, &module, &name); + mp_printf(print, "%q.%q.%q", MP_QSTR_microcontroller, MP_QSTR_pin, name); +} + const mp_obj_type_t mcu_pin_type = { { &mp_type_type }, .name = MP_QSTR_Pin, @@ -81,6 +91,11 @@ void assert_pin(mp_obj_t obj, bool none_ok) { void assert_pin_free(const mcu_pin_obj_t* pin) { if (pin != NULL && pin != MP_OBJ_TO_PTR(mp_const_none) && !common_hal_mcu_pin_is_free(pin)) { - nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Pin %q in use", pin->name)); + qstr package; + qstr module; + qstr name; + + get_pin_name(pin, &package, &module, &name); + mp_raise_ValueError_varg("%q in use", name); } } |
