57
57
#define GPIO_FIRST_NON_OUTPUT (46)
58
58
#endif
59
59
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
+
60
68
// Return the gpio_num_t index for a given pin or pin-irq object.
61
69
#define PIN_OBJ_INDEX (self ) ((self) - &machine_pin_obj_table[0])
62
70
#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) {
128
136
129
137
STATIC void machine_pin_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
130
138
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 , ")" );
132
147
}
133
148
134
149
// 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_
186
201
}
187
202
#endif
188
203
gpio_set_direction (PIN_OBJ_INDEX (self ), pin_io_mode );
204
+ machine_pin_obj_cfg_table [PIN_OBJ_INDEX (self )].mode = pin_io_mode ;
189
205
}
190
206
191
207
// configure pull
@@ -204,6 +220,7 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
204
220
} else {
205
221
gpio_pullup_dis (PIN_OBJ_INDEX (self ));
206
222
}
223
+ machine_pin_obj_cfg_table [PIN_OBJ_INDEX (self )].pull = mode ;
207
224
}
208
225
209
226
// configure pad hold
@@ -223,6 +240,13 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
223
240
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 ) {
224
241
mp_arg_check_num (n_args , n_kw , 1 , MP_OBJ_FUN_ARGS_MAX , true);
225
242
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
+ }
226
250
// get the wanted pin object
227
251
const machine_pin_obj_t * self = machine_pin_find (args [0 ]);
228
252
0 commit comments