Skip to content

Commit cbc3cfc

Browse files
committed
codal_port/microbit_pin: Add pin.set_touch_mode(mode) method.
Signed-off-by: Damien George <[email protected]>
1 parent 0d2faf5 commit cbc3cfc

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

src/codal_port/microbit_pin.c

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,17 @@ mp_obj_t microbit_pin_is_touched(mp_obj_t self_in) {
166166
}
167167
MP_DEFINE_CONST_FUN_OBJ_1(microbit_pin_is_touched_obj, microbit_pin_is_touched);
168168

169+
mp_obj_t microbit_pin_set_touch_mode(mp_obj_t self_in, mp_obj_t mode_in) {
170+
microbit_pin_obj_t *self = (microbit_pin_obj_t *)self_in;
171+
const microbit_pinmode_t *mode = microbit_pin_get_mode(self);
172+
if (mode != microbit_pin_mode_touch && mode != microbit_pin_mode_button) {
173+
microbit_obj_pin_acquire(self, microbit_pin_mode_touch);
174+
}
175+
microbit_hal_pin_set_touch_mode(self->name, mp_obj_get_int(mode_in));
176+
return mp_const_none;
177+
}
178+
MP_DEFINE_CONST_FUN_OBJ_2(microbit_pin_set_touch_mode_obj, microbit_pin_set_touch_mode);
179+
169180
STATIC mp_obj_t microbit_pin_speaker_disable(mp_obj_t self_in) {
170181
(void)self_in;
171182
microbit_pin_audio_speaker_enable(false);
@@ -185,17 +196,21 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(microbit_pin_speaker_enable_obj, microbit_pin_s
185196
{ MP_ROM_QSTR(MP_QSTR_PULL_DOWN), MP_ROM_INT(MICROBIT_HAL_PIN_PULL_DOWN) }, \
186197
{ MP_ROM_QSTR(MP_QSTR_NO_PULL), MP_ROM_INT(MICROBIT_HAL_PIN_PULL_NONE) }
187198

199+
#define TOUCH_CONSTANTS \
200+
{ MP_ROM_QSTR(MP_QSTR_RESISTIVE), MP_ROM_INT(MICROBIT_HAL_PIN_TOUCH_RESISTIVE) }, \
201+
{ MP_ROM_QSTR(MP_QSTR_CAPACITIVE), MP_ROM_INT(MICROBIT_HAL_PIN_TOUCH_CAPACITIVE) }
202+
188203
STATIC const mp_rom_map_elem_t microbit_dig_pin_locals_dict_table[] = {
189204
{ MP_ROM_QSTR(MP_QSTR_write_digital), MP_ROM_PTR(&microbit_pin_write_digital_obj) },
190205
{ MP_ROM_QSTR(MP_QSTR_read_digital), MP_ROM_PTR(&microbit_pin_read_digital_obj) },
191206
{ MP_ROM_QSTR(MP_QSTR_write_analog), MP_ROM_PTR(&microbit_pin_write_analog_obj) },
192207
{ MP_ROM_QSTR(MP_QSTR_set_analog_period), MP_ROM_PTR(&microbit_pin_set_analog_period_obj) },
193208
{ MP_ROM_QSTR(MP_QSTR_set_analog_period_microseconds), MP_ROM_PTR(&microbit_pin_set_analog_period_microseconds_obj) },
194209
{ MP_ROM_QSTR(MP_QSTR_get_analog_period_microseconds), MP_ROM_PTR(&microbit_pin_get_analog_period_microseconds_obj) },
195-
PULL_CONSTANTS,
196210
{ MP_ROM_QSTR(MP_QSTR_get_pull), MP_ROM_PTR(&microbit_pin_get_pull_obj) },
197211
{ MP_ROM_QSTR(MP_QSTR_set_pull), MP_ROM_PTR(&microbit_pin_set_pull_obj) },
198212
{ MP_ROM_QSTR(MP_QSTR_get_mode), MP_ROM_PTR(&microbit_pin_get_mode_obj) },
213+
PULL_CONSTANTS,
199214
};
200215
STATIC MP_DEFINE_CONST_DICT(microbit_dig_pin_locals_dict, microbit_dig_pin_locals_dict_table);
201216

@@ -213,10 +228,10 @@ STATIC const mp_rom_map_elem_t microbit_ann_pin_locals_dict_table[] = {
213228
{ MP_ROM_QSTR(MP_QSTR_set_analog_period), MP_ROM_PTR(&microbit_pin_set_analog_period_obj) },
214229
{ MP_ROM_QSTR(MP_QSTR_set_analog_period_microseconds), MP_ROM_PTR(&microbit_pin_set_analog_period_microseconds_obj) },
215230
{ MP_ROM_QSTR(MP_QSTR_get_analog_period_microseconds), MP_ROM_PTR(&microbit_pin_get_analog_period_microseconds_obj) },
216-
PULL_CONSTANTS,
217231
{ MP_ROM_QSTR(MP_QSTR_get_pull), MP_ROM_PTR(&microbit_pin_get_pull_obj) },
218232
{ MP_ROM_QSTR(MP_QSTR_set_pull), MP_ROM_PTR(&microbit_pin_set_pull_obj) },
219233
{ MP_ROM_QSTR(MP_QSTR_get_mode), MP_ROM_PTR(&microbit_pin_get_mode_obj) },
234+
PULL_CONSTANTS,
220235
};
221236
STATIC MP_DEFINE_CONST_DICT(microbit_ann_pin_locals_dict, microbit_ann_pin_locals_dict_table);
222237

@@ -235,10 +250,12 @@ STATIC const mp_rom_map_elem_t microbit_touch_pin_locals_dict_table[] = {
235250
{ MP_ROM_QSTR(MP_QSTR_set_analog_period_microseconds), MP_ROM_PTR(&microbit_pin_set_analog_period_microseconds_obj) },
236251
{ MP_ROM_QSTR(MP_QSTR_get_analog_period_microseconds), MP_ROM_PTR(&microbit_pin_get_analog_period_microseconds_obj) },
237252
{ MP_ROM_QSTR(MP_QSTR_is_touched), MP_ROM_PTR(&microbit_pin_is_touched_obj) },
238-
PULL_CONSTANTS,
239253
{ MP_ROM_QSTR(MP_QSTR_get_pull), MP_ROM_PTR(&microbit_pin_get_pull_obj) },
240254
{ MP_ROM_QSTR(MP_QSTR_set_pull), MP_ROM_PTR(&microbit_pin_set_pull_obj) },
241255
{ MP_ROM_QSTR(MP_QSTR_get_mode), MP_ROM_PTR(&microbit_pin_get_mode_obj) },
256+
{ MP_ROM_QSTR(MP_QSTR_set_touch_mode), MP_ROM_PTR(&microbit_pin_set_touch_mode_obj) },
257+
PULL_CONSTANTS,
258+
TOUCH_CONSTANTS,
242259
};
243260
STATIC MP_DEFINE_CONST_DICT(microbit_touch_pin_locals_dict, microbit_touch_pin_locals_dict_table);
244261

@@ -250,6 +267,8 @@ const mp_obj_type_t microbit_touch_pin_type = {
250267

251268
STATIC const mp_rom_map_elem_t microbit_touch_only_pin_locals_dict_table[] = {
252269
{ MP_ROM_QSTR(MP_QSTR_is_touched), MP_ROM_PTR(&microbit_pin_is_touched_obj) },
270+
{ MP_ROM_QSTR(MP_QSTR_set_touch_mode), MP_ROM_PTR(&microbit_pin_set_touch_mode_obj) },
271+
TOUCH_CONSTANTS,
253272
};
254273
STATIC MP_DEFINE_CONST_DICT(microbit_touch_only_pin_locals_dict, microbit_touch_only_pin_locals_dict_table);
255274

0 commit comments

Comments
 (0)