Skip to content

Commit b19fbde

Browse files
committed
codal_port/microbit_microphone: Add set_sensitivity method and consts.
Signed-off-by: Damien George <damien@micropython.org>
1 parent 7ba6c03 commit b19fbde

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/codal_port/microbit_microphone.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
8895
static 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
}
239246
static 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+
241265
static 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
};
254285
static MP_DEFINE_CONST_DICT(microbit_microphone_locals_dict, microbit_microphone_locals_dict_table);
255286

0 commit comments

Comments
 (0)