@@ -49,7 +49,7 @@ const microbit_pin_obj_t microbit_p19_obj = {{µbit_dig_pin_type}, 19, MICR
4949const microbit_pin_obj_t microbit_p20_obj = {{& microbit_dig_pin_type }, 20 , MICROBIT_HAL_PIN_P20 , MODE_I2C };
5050
5151const microbit_pin_obj_t microbit_pin_logo_obj = {{& microbit_touch_only_pin_type }, 30 , MICROBIT_HAL_PIN_FACE , MODE_UNUSED };
52- const microbit_pin_obj_t microbit_pin_speaker_obj = {{& microbit_dig_pin_type }, 31 , MICROBIT_HAL_PIN_SPEAKER , MODE_UNUSED };
52+ const microbit_pin_obj_t microbit_pin_speaker_obj = {{& microbit_speaker_pin_type }, 31 , MICROBIT_HAL_PIN_SPEAKER , MODE_UNUSED };
5353
5454static mp_obj_t microbit_pin_get_mode_func (mp_obj_t self_in ) {
5555 microbit_pin_obj_t * self = (microbit_pin_obj_t * )self_in ;
@@ -166,6 +166,20 @@ mp_obj_t microbit_pin_is_touched(mp_obj_t self_in) {
166166}
167167MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_is_touched_obj , microbit_pin_is_touched );
168168
169+ STATIC mp_obj_t microbit_pin_speaker_disable (mp_obj_t self_in ) {
170+ (void )self_in ;
171+ microbit_pin_audio_speaker_enable (false);
172+ return mp_const_none ;
173+ }
174+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_speaker_disable_obj , microbit_pin_speaker_disable );
175+
176+ STATIC mp_obj_t microbit_pin_speaker_enable (mp_obj_t self_in ) {
177+ (void )self_in ;
178+ microbit_pin_audio_speaker_enable (true);
179+ return mp_const_none ;
180+ }
181+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (microbit_pin_speaker_enable_obj , microbit_pin_speaker_enable );
182+
169183#define PULL_CONSTANTS \
170184 { MP_ROM_QSTR(MP_QSTR_PULL_UP), MP_ROM_INT(MICROBIT_HAL_PIN_PULL_UP) }, \
171185 { MP_ROM_QSTR(MP_QSTR_PULL_DOWN), MP_ROM_INT(MICROBIT_HAL_PIN_PULL_DOWN) }, \
@@ -245,9 +259,26 @@ const mp_obj_type_t microbit_touch_only_pin_type = {
245259 .locals_dict = (mp_obj_dict_t * )& microbit_touch_only_pin_locals_dict ,
246260};
247261
262+ STATIC const mp_rom_map_elem_t microbit_speaker_pin_locals_dict_table [] = {
263+ { MP_ROM_QSTR (MP_QSTR_write_digital ), MP_ROM_PTR (& microbit_pin_write_digital_obj ) },
264+ { MP_ROM_QSTR (MP_QSTR_write_analog ), MP_ROM_PTR (& microbit_pin_write_analog_obj ) },
265+ { MP_ROM_QSTR (MP_QSTR_set_analog_period ), MP_ROM_PTR (& microbit_pin_set_analog_period_obj ) },
266+ { MP_ROM_QSTR (MP_QSTR_set_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_set_analog_period_microseconds_obj ) },
267+ { MP_ROM_QSTR (MP_QSTR_get_analog_period_microseconds ), MP_ROM_PTR (& microbit_pin_get_analog_period_microseconds_obj ) },
268+ { MP_ROM_QSTR (MP_QSTR_disable ), MP_ROM_PTR (& microbit_pin_speaker_disable_obj ) },
269+ { MP_ROM_QSTR (MP_QSTR_enable ), MP_ROM_PTR (& microbit_pin_speaker_enable_obj ) },
270+ };
271+ STATIC MP_DEFINE_CONST_DICT (microbit_speaker_pin_locals_dict , microbit_speaker_pin_locals_dict_table );
272+
273+ const mp_obj_type_t microbit_speaker_pin_type = {
274+ { & mp_type_type },
275+ .name = MP_QSTR_MicroBitSpeakerPin ,
276+ .locals_dict = (mp_obj_dict_t * )& microbit_speaker_pin_locals_dict ,
277+ };
278+
248279const microbit_pin_obj_t * microbit_obj_get_pin (mp_obj_t o ) {
249280 const mp_obj_type_t * type = mp_obj_get_type (o );
250- if (type == & microbit_touch_pin_type || type == & microbit_ad_pin_type || type == & microbit_dig_pin_type ) {
281+ if (type == & microbit_touch_pin_type || type == & microbit_ad_pin_type || type == & microbit_dig_pin_type || type == & microbit_speaker_pin_type ) {
251282 return (microbit_pin_obj_t * )o ;
252283 } else {
253284 mp_raise_TypeError ("expecting a pin" );
0 commit comments