From 5163cf1fe1e8bf878bf8d4e54b1fa24dccb4e116 Mon Sep 17 00:00:00 2001 From: joeycastillo Date: Tue, 17 Jan 2023 08:52:01 -0600 Subject: Revert "never disable buzzer output" This reverts commit 851d047c818dacc30c86f4d87f33247dcfb0095c. --- movement/watch_faces/clock/simple_clock_face.c | 12 +++++++++++- movement/watch_faces/clock/weeknumber_clock_face.c | 12 +++++++++++- movement/watch_faces/complication/alarm_face.c | 10 +++++++++- watch-library/hardware/watch/watch_buzzer.c | 4 +--- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index 76055998..179b23d6 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -142,7 +142,17 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting case EVENT_BACKGROUND_TASK: // uncomment this line to snap back to the clock face when the hour signal sounds: // movement_move_to_face(state->watch_face_index); - movement_play_signal(); + if (watch_is_buzzer_or_led_enabled()) { + // if we are in the foreground, we can just beep. + movement_play_signal(); + } else { + // if we were in the background, we need to enable the buzzer peripheral first, + watch_enable_buzzer(); + // beep quickly (this call blocks for 275 ms), + movement_play_signal(); + // and then turn the buzzer peripheral off again. + watch_disable_buzzer(); + } break; default: break; diff --git a/movement/watch_faces/clock/weeknumber_clock_face.c b/movement/watch_faces/clock/weeknumber_clock_face.c index 45d751af..e49e5abf 100644 --- a/movement/watch_faces/clock/weeknumber_clock_face.c +++ b/movement/watch_faces/clock/weeknumber_clock_face.c @@ -136,7 +136,17 @@ bool weeknumber_clock_face_loop(movement_event_t event, movement_settings_t *set case EVENT_BACKGROUND_TASK: // uncomment this line to snap back to the clock face when the hour signal sounds: // movement_move_to_face(state->watch_face_index); - movement_play_signal(); + if (watch_is_buzzer_or_led_enabled()) { + // if we are in the foreground, we can just beep. + movement_play_signal(); + } else { + // if we were in the background, we need to enable the buzzer peripheral first, + watch_enable_buzzer(); + // beep quickly (this call blocks for 275 ms), + movement_play_signal(); + // and then turn the buzzer peripheral off again. + watch_disable_buzzer(); + } break; default: break; diff --git a/movement/watch_faces/complication/alarm_face.c b/movement/watch_faces/complication/alarm_face.c index 9acf5899..5ad3976c 100644 --- a/movement/watch_faces/complication/alarm_face.c +++ b/movement/watch_faces/complication/alarm_face.c @@ -417,7 +417,15 @@ bool alarm_face_loop(movement_event_t event, movement_settings_t *settings, void case EVENT_BACKGROUND_TASK: // play alarm if (state->alarm[state->alarm_playing_idx].beeps == 0) { - _alarm_play_short_beep(state->alarm[state->alarm_playing_idx].pitch); + // short beep + if (watch_is_buzzer_or_led_enabled()) { + _alarm_play_short_beep(state->alarm[state->alarm_playing_idx].pitch); + } else { + // enable, play beep and disable buzzer again + watch_enable_buzzer(); + _alarm_play_short_beep(state->alarm[state->alarm_playing_idx].pitch); + watch_disable_buzzer(); + } } else { // regular alarm beeps movement_play_alarm_beeps((state->alarm[state->alarm_playing_idx].beeps == (ALARM_MAX_BEEP_ROUNDS - 1) ? 20 : state->alarm[state->alarm_playing_idx].beeps), diff --git a/watch-library/hardware/watch/watch_buzzer.c b/watch-library/hardware/watch/watch_buzzer.c index b999397a..18fb4db0 100644 --- a/watch-library/hardware/watch/watch_buzzer.c +++ b/watch-library/hardware/watch/watch_buzzer.c @@ -147,7 +147,6 @@ inline void watch_enable_buzzer(void) { if (!hri_tcc_get_CTRLA_reg(TCC0, TCC_CTRLA_ENABLE)) { _watch_enable_tcc(); } - gpio_set_pin_direction(BUZZER, GPIO_DIRECTION_OUT); } inline void watch_set_buzzer_period(uint32_t period) { @@ -157,7 +156,6 @@ inline void watch_set_buzzer_period(uint32_t period) { void watch_disable_buzzer(void) { _watch_disable_tcc(); - watch_set_buzzer_off(); } inline void watch_set_buzzer_on(void) { @@ -166,8 +164,8 @@ inline void watch_set_buzzer_on(void) { } inline void watch_set_buzzer_off(void) { + gpio_set_pin_direction(BUZZER, GPIO_DIRECTION_OFF); gpio_set_pin_function(BUZZER, GPIO_PIN_FUNCTION_OFF); - gpio_set_pin_level(BUZZER, true); } void watch_buzzer_play_note(BuzzerNote note, uint16_t duration_ms) { -- cgit v1.2.3