63
63
// Return the machine_pin_obj_t pointer corresponding to a machine_pin_irq_obj_t pointer.
64
64
#define PIN_OBJ_PTR_FROM_IRQ_OBJ_PTR (self ) ((machine_pin_obj_t *)((uintptr_t)(self) - offsetof(machine_pin_obj_t, irq)))
65
65
66
+ typedef struct _machine_pin_obj_cfg_t {
67
+ int8_t mode ;
68
+ int8_t pull ;
69
+ } machine_pin_obj_cfg_t ;
70
+
71
+ static machine_pin_obj_cfg_t machine_pin_obj_cfg_table [GPIO_NUM_MAX ];
72
+ static bool inited_cfg_table = false;
73
+
66
74
static const machine_pin_obj_t * machine_pin_find_named (const mp_obj_dict_t * named_pins , mp_obj_t name ) {
67
75
const mp_map_t * named_map = & named_pins -> map ;
68
76
mp_map_elem_t * named_elem = mp_map_lookup ((mp_map_t * )named_map , name , MP_MAP_LOOKUP );
@@ -130,7 +138,15 @@ gpio_num_t machine_pin_get_id(mp_obj_t pin_in) {
130
138
131
139
static void machine_pin_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
132
140
machine_pin_obj_t * self = self_in ;
133
- mp_printf (print , "Pin(%u)" , PIN_OBJ_PTR_INDEX (self ));
141
+ gpio_num_t index = PIN_OBJ_PTR_INDEX (self );
142
+ mp_printf (print , "Pin(%u" , index );
143
+ if (machine_pin_obj_cfg_table [index ].mode != -1 ) {
144
+ mp_printf (print , ", mode=%d" , machine_pin_obj_cfg_table [index ].mode );
145
+ }
146
+ if (machine_pin_obj_cfg_table [index ].pull != -1 ) {
147
+ mp_printf (print , ", pull=%d" , machine_pin_obj_cfg_table [index ].pull );
148
+ }
149
+ mp_printf (print , ")" );
134
150
}
135
151
136
152
// pin.init(mode=None, pull=-1, *, value, drive, hold)
@@ -190,6 +206,7 @@ static mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
190
206
}
191
207
#endif
192
208
gpio_set_direction (index , pin_io_mode );
209
+ machine_pin_obj_cfg_table [index ].mode = pin_io_mode ;
193
210
}
194
211
195
212
// configure pull
@@ -208,6 +225,7 @@ static mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
208
225
} else {
209
226
gpio_pullup_dis (index );
210
227
}
228
+ machine_pin_obj_cfg_table [index ].pull = mode ;
211
229
}
212
230
213
231
// configure pad hold
@@ -227,6 +245,13 @@ static mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
227
245
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 ) {
228
246
mp_arg_check_num (n_args , n_kw , 1 , MP_OBJ_FUN_ARGS_MAX , true);
229
247
248
+ if (!inited_cfg_table ) {
249
+ inited_cfg_table = true;
250
+ for (int i = 0 ; i < GPIO_NUM_MAX ; ++ i ) {
251
+ machine_pin_obj_cfg_table [i ].mode = -1 ;
252
+ machine_pin_obj_cfg_table [i ].pull = -1 ;
253
+ }
254
+ }
230
255
// get the wanted pin object
231
256
const machine_pin_obj_t * self = machine_pin_find (args [0 ]);
232
257
0 commit comments