@@ -155,17 +155,35 @@ mp_obj_t microbit_pin_get_analog_period_microseconds(mp_obj_t self_in) {
155155}
156156MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_get_analog_period_microseconds_obj , microbit_pin_get_analog_period_microseconds );
157157
158- mp_obj_t microbit_pin_is_touched (mp_obj_t self_in ) {
158+ static int microbit_pin_get_touch_state (mp_obj_t self_in , int * was_touched , int * num_touches ) {
159159 microbit_pin_obj_t * self = (microbit_pin_obj_t * )self_in ;
160160 const microbit_pinmode_t * mode = microbit_pin_get_mode (self );
161161 if (mode != microbit_pin_mode_touch && mode != microbit_pin_mode_button ) {
162162 microbit_obj_pin_acquire (self , microbit_pin_mode_touch );
163163 // set NO_PULL on pin
164164 }
165- return mp_obj_new_bool (microbit_hal_pin_is_touched (self -> name ));
165+ return microbit_hal_pin_touch_state (self -> name , was_touched , num_touches );
166+ }
167+
168+ mp_obj_t microbit_pin_is_touched (mp_obj_t self_in ) {
169+ return mp_obj_new_bool (microbit_pin_get_touch_state (self_in , NULL , NULL ));
166170}
167171MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_is_touched_obj , microbit_pin_is_touched );
168172
173+ mp_obj_t microbit_pin_was_touched (mp_obj_t self_in ) {
174+ int was_touched ;
175+ microbit_pin_get_touch_state (self_in , & was_touched , NULL );
176+ return mp_obj_new_bool (was_touched );
177+ }
178+ MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_was_touched_obj , microbit_pin_was_touched );
179+
180+ mp_obj_t microbit_pin_get_touches (mp_obj_t self_in ) {
181+ int num_touches ;
182+ microbit_pin_get_touch_state (self_in , NULL , & num_touches );
183+ return MP_OBJ_NEW_SMALL_INT (num_touches );
184+ }
185+ MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_get_touches_obj , microbit_pin_get_touches );
186+
169187mp_obj_t microbit_pin_set_touch_mode (mp_obj_t self_in , mp_obj_t mode_in ) {
170188 microbit_pin_obj_t * self = (microbit_pin_obj_t * )self_in ;
171189 const microbit_pinmode_t * mode = microbit_pin_get_mode (self );
@@ -238,6 +256,8 @@ STATIC const mp_rom_map_elem_t microbit_touch_pin_locals_dict_table[] = {
238256 { MP_ROM_QSTR (MP_QSTR_set_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_set_analog_period_microseconds_obj ) },
239257 { MP_ROM_QSTR (MP_QSTR_get_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_get_analog_period_microseconds_obj ) },
240258 { MP_ROM_QSTR (MP_QSTR_is_touched ), MP_ROM_PTR (& microbit_pin_is_touched_obj ) },
259+ { MP_ROM_QSTR (MP_QSTR_was_touched ), MP_ROM_PTR (& microbit_pin_was_touched_obj ) },
260+ { MP_ROM_QSTR (MP_QSTR_get_touches ), MP_ROM_PTR (& microbit_pin_get_touches_obj ) },
241261 { MP_ROM_QSTR (MP_QSTR_get_pull ), MP_ROM_PTR (& microbit_pin_get_pull_obj ) },
242262 { MP_ROM_QSTR (MP_QSTR_set_pull ), MP_ROM_PTR (& microbit_pin_set_pull_obj ) },
243263 { MP_ROM_QSTR (MP_QSTR_get_mode ), MP_ROM_PTR (& microbit_pin_get_mode_obj ) },
@@ -256,6 +276,8 @@ MP_DEFINE_CONST_OBJ_TYPE(
256276
257277STATIC const mp_rom_map_elem_t microbit_touch_only_pin_locals_dict_table [] = {
258278 { MP_ROM_QSTR (MP_QSTR_is_touched ), MP_ROM_PTR (& microbit_pin_is_touched_obj ) },
279+ { MP_ROM_QSTR (MP_QSTR_was_touched ), MP_ROM_PTR (& microbit_pin_was_touched_obj ) },
280+ { MP_ROM_QSTR (MP_QSTR_get_touches ), MP_ROM_PTR (& microbit_pin_get_touches_obj ) },
259281 { MP_ROM_QSTR (MP_QSTR_set_touch_mode ), MP_ROM_PTR (& microbit_pin_set_touch_mode_obj ) },
260282 TOUCH_CONSTANTS ,
261283};
0 commit comments