@@ -85,6 +85,13 @@ static uint8_t sound_event_from_obj(mp_obj_t sound) {
8585 mp_raise_ValueError (MP_ERROR_TEXT ("invalid sound" ));
8686}
8787
88+ static mp_obj_t microbit_microphone_set_sensitivity (mp_obj_t self_in , mp_obj_t value_in ) {
89+ (void )self_in ;
90+ microbit_hal_microphone_set_sensitivity (mp_obj_get_float (value_in ));
91+ return mp_const_none ;
92+ }
93+ static MP_DEFINE_CONST_FUN_OBJ_2 (microbit_microphone_set_sensitivity_obj , microbit_microphone_set_sensitivity ) ;
94+
8895static mp_obj_t microbit_microphone_set_threshold (mp_obj_t self_in , mp_obj_t sound_in , mp_obj_t value_in ) {
8996 (void )self_in ;
9097 uint8_t sound = sound_event_from_obj (sound_in );
@@ -238,7 +245,26 @@ static mp_obj_t microbit_microphone_stop_recording(mp_obj_t self_in) {
238245}
239246static MP_DEFINE_CONST_FUN_OBJ_1 (microbit_microphone_stop_recording_obj , microbit_microphone_stop_recording ) ;
240247
248+ #if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_A || MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_B
249+
250+ // The way float objects are defined depends on the object representation. Here we only
251+ // support representation A and B which use the following struct for float objects.
252+ // This is defined in py/objfloat.c and not exposed publicly, so must be defined here.
253+
254+ typedef struct _mp_obj_float_t {
255+ mp_obj_base_t base ;
256+ mp_float_t value ;
257+ } mp_obj_float_t ;
258+
259+ static const mp_obj_float_t microbit_microphone_sensitivity_low_obj = {{& mp_type_float }, (mp_float_t )0.079 };
260+ static const mp_obj_float_t microbit_microphone_sensitivity_medium_obj = {{& mp_type_float }, (mp_float_t )0.2 };
261+ static const mp_obj_float_t microbit_microphone_sensitivity_high_obj = {{& mp_type_float }, (mp_float_t )1.0 };
262+
263+ #endif
264+
241265static const mp_rom_map_elem_t microbit_microphone_locals_dict_table [] = {
266+ // Methods.
267+ { MP_ROM_QSTR (MP_QSTR_set_sensitivity ), MP_ROM_PTR (& microbit_microphone_set_sensitivity_obj ) },
242268 { MP_ROM_QSTR (MP_QSTR_set_threshold ), MP_ROM_PTR (& microbit_microphone_set_threshold_obj ) },
243269 { MP_ROM_QSTR (MP_QSTR_sound_level ), MP_ROM_PTR (& microbit_microphone_sound_level_obj ) },
244270 { MP_ROM_QSTR (MP_QSTR_sound_level_db ), MP_ROM_PTR (& microbit_microphone_sound_level_db_obj ) },
@@ -250,6 +276,11 @@ static const mp_rom_map_elem_t microbit_microphone_locals_dict_table[] = {
250276 { MP_ROM_QSTR (MP_QSTR_record_into ), MP_ROM_PTR (& microbit_microphone_record_into_obj ) },
251277 { MP_ROM_QSTR (MP_QSTR_is_recording ), MP_ROM_PTR (& microbit_microphone_is_recording_obj ) },
252278 { MP_ROM_QSTR (MP_QSTR_stop_recording ), MP_ROM_PTR (& microbit_microphone_stop_recording_obj ) },
279+
280+ // Constants.
281+ { MP_ROM_QSTR (MP_QSTR_SENSITIVITY_LOW ), MP_ROM_PTR (& microbit_microphone_sensitivity_low_obj ) },
282+ { MP_ROM_QSTR (MP_QSTR_SENSITIVITY_MEDIUM ), MP_ROM_PTR (& microbit_microphone_sensitivity_medium_obj ) },
283+ { MP_ROM_QSTR (MP_QSTR_SENSITIVITY_HIGH ), MP_ROM_PTR (& microbit_microphone_sensitivity_high_obj ) },
253284};
254285static MP_DEFINE_CONST_DICT (microbit_microphone_locals_dict , microbit_microphone_locals_dict_table ) ;
255286
0 commit comments