/// \method __str__() /// Return a string describing the pin object. STATIC void pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { pin_obj_t *self = MP_OBJ_TO_PTR(self_in); // pin name mp_printf(print, "Pin(Pin.cpu.%q, mode=Pin.", self->name); uint32_t mode = pin_get_mode(self); if (mode == GPIO_MODE_ANALOG) { // analog mp_print_str(print, "ANALOG)"); } else { // IO mode bool af = false; qstr mode_qst; if (mode == GPIO_MODE_INPUT) { mode_qst = MP_QSTR_IN; } else if (mode == GPIO_MODE_OUTPUT_PP) { mode_qst = MP_QSTR_OUT; } else if (mode == GPIO_MODE_OUTPUT_OD) { mode_qst = MP_QSTR_OPEN_DRAIN; } else { af = true; if (mode == GPIO_MODE_AF_PP) { mode_qst = MP_QSTR_ALT; } else { mode_qst = MP_QSTR_ALT_OPEN_DRAIN; } } mp_print_str(print, qstr_str(mode_qst)); // pull mode qstr pull_qst = MP_QSTR_NULL; uint32_t pull = pin_get_pull(self); if (pull == GPIO_PULLUP) { pull_qst = MP_QSTR_PULL_UP; } else if (pull == GPIO_PULLDOWN) { pull_qst = MP_QSTR_PULL_DOWN; } if (pull_qst != MP_QSTR_NULL) { mp_printf(print, ", pull=Pin.%q", pull_qst); } // AF mode if (af) { mp_uint_t af_idx = pin_get_af(self); const pin_af_obj_t *af_obj = pin_find_af_by_index(self, af_idx); if (af_obj == NULL) { mp_printf(print, ", af=%d)", af_idx); } else { mp_printf(print, ", af=Pin.%q)", af_obj->name); } } else { mp_print_str(print, ")"); } } }
/// \method __str__() /// Return a string describing the pin object. STATIC void pin_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) { pin_obj_t *self = self_in; // pin name print(env, "Pin(Pin.cpu.%s, mode=Pin.", qstr_str(self->name)); uint32_t mode = pin_get_mode(self); if (mode == GPIO_MODE_ANALOG) { // analog print(env, "ANALOG)"); } else { // IO mode bool af = false; qstr mode_qst; if (mode == GPIO_MODE_INPUT) { mode_qst = MP_QSTR_IN; } else if (mode == GPIO_MODE_OUTPUT_PP) { mode_qst = MP_QSTR_OUT_PP; } else if (mode == GPIO_MODE_OUTPUT_OD) { mode_qst = MP_QSTR_OUT_OD; } else { af = true; if (mode == GPIO_MODE_AF_PP) { mode_qst = MP_QSTR_AF_PP; } else { mode_qst = MP_QSTR_AF_OD; } } print(env, qstr_str(mode_qst)); // safe because mode_qst has no formating chars // pull mode qstr pull_qst = MP_QSTR_NULL; uint32_t pull = pin_get_pull(self); if (pull == GPIO_PULLUP) { pull_qst = MP_QSTR_PULL_UP; } else if (pull == GPIO_PULLDOWN) { pull_qst = MP_QSTR_PULL_DOWN; } if (pull_qst != MP_QSTR_NULL) { print(env, ", pull=Pin.%s", qstr_str(pull_qst)); } // AF mode if (af) { mp_uint_t af_idx = pin_get_af(self); const pin_af_obj_t *af_obj = pin_find_af_by_index(self, af_idx); if (af_obj == NULL) { print(env, ", af=%d)", af_idx); } else { print(env, ", af=Pin.%s)", qstr_str(af_obj->name)); } } else { print(env, ")"); } } }
/// \method af() /// Returns the currently configured alternate-function of the pin. The /// integer returned will match one of the allowed constants for the af /// argument to the init function. STATIC mp_obj_t pin_af(mp_obj_t self_in) { return MP_OBJ_NEW_SMALL_INT(pin_get_af(self_in)); }