8000 esp32/machine_pin: Add mode and pull in machine_pin_print(). · micropython/micropython@c306ff3 · GitHub
[go: up one dir, main page]

Skip to content

Commit c306ff3

Browse files
committed
esp32/machine_pin: Add mode and pull in machine_pin_print().
Signed-off-by: IhorNehrutsa <Ihor.Nehrutsa@gmail.com>
1 parent 5232847 commit c306ff3

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

ports/esp32/machine_pin.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@
5757
#define GPIO_FIRST_NON_OUTPUT (46)
5858
#endif
5959

60+
typedef struct _machine_pin_obj_cfg_t {
61+
int8_t mode;
62+
int8_t pull;
63+
} machine_pin_obj_cfg_t;
64+
65+
STATIC machine_pin_obj_cfg_t machine_pin_obj_cfg_table[GPIO_NUM_MAX];
66+
STATIC bool inited_cfg_table = false;
67+
6068
// Return the gpio_num_t index for a given pin or pin-irq object.
6169
#define PIN_OBJ_INDEX(self) ((self) - &machine_pin_obj_table[0])
6270
#define PIN_IRQ_OBJ_INDEX(self) ((self) - &machine_pin_irq_obj_table[0])
@@ -128,7 +136,14 @@ gpio_num_t machine_pin_get_id(mp_obj_t pin_in) {
128136

129137
STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
130138
machine_pin_obj_t *self = self_in;
131-
mp_printf(print, "Pin(%u)", PIN_OBJ_INDEX(self));
139+
mp_printf(print, "Pin(%u", PIN_OBJ_INDEX(self));
140+
if (machine_pin_obj_cfg_table[PIN_OBJ_INDEX(self)].mode != -1) {
141+
mp_printf(print, ", mode=%d", machine_pin_obj_cfg_table[PIN_OBJ_INDEX(self)].mode);
142+
}
143+
if (machine_pin_obj_cfg_table[PIN_OBJ_INDEX(self)].pull != -1) {
144+
mp_printf(print, ", pull=%d", machine_pin_obj_cfg_table[PIN_OBJ_INDEX(self)].pull);
145+
}
146+
mp_printf(print, ")");
132147
}
133148

134149
// pin.init(mode=None, pull=-1, *, value, drive, hold)
@@ -186,6 +201,7 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
186201
}
187202
#endif
188203
gpio_set_direction(PIN_OBJ_INDEX(self), pin_io_mode);
204+
machine_pin_obj_cfg_table[PIN_OBJ_INDEX(self)].mode = pin_io_mode;
189205
}
190206

191207
// configure pull
@@ -204,6 +220,7 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
204220
} else {
205221
gpio_pullup_dis(PIN_OBJ_INDEX(self));
206222
}
223+
machine_pin_obj_cfg_table[PIN_OBJ_INDEX(self)].pull = mode;
207224
}
208225

209226
// configure pad hold
@@ -223,6 +240,13 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
223240
mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
224241
mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
225242

243+
if (!inited_cfg_table) {
244+
inited_cfg_table = true;
245+
for (int i = 0; i < GPIO_NUM_MAX; ++i) {
246+
machine_pin_obj_cfg_table[i].mode = -1;
247+
machine_pin_obj_cfg_table[i].pull = -1;
248+
}
249+
}
226250
// get the wanted pin object
227251
const machine_pin_obj_t *self = machine_pin_find(args[0]);
228252

0 commit comments

Comments
 (0)
0