From bfde84f01df2a6a524783c6755654f10940a39fb Mon Sep 17 00:00:00 2001 From: Jeremy O'Brien Date: Fri, 22 Sep 2023 07:29:04 -0400 Subject: [PATCH 1/3] fix signal tunes not firing in background, and split out foreground/background chime functions --- movement/movement.c | 18 ++++++++++++++++++ movement/movement.h | 3 +++ .../watch_faces/clock/repetition_minute_face.c | 10 +--------- .../clock/simple_clock_bin_led_face.c | 8 +------- movement/watch_faces/clock/simple_clock_face.c | 10 ++-------- .../watch_faces/clock/weeknumber_clock_face.c | 8 +------- 6 files changed, 26 insertions(+), 31 deletions(-) diff --git a/movement/movement.c b/movement/movement.c index 0c6ed319..f2292e5f 100644 --- a/movement/movement.c +++ b/movement/movement.c @@ -294,9 +294,27 @@ void movement_request_wake() { } void movement_play_signal(void) { + watch_buzzer_play_note(BUZZER_NOTE_C8, 75); + watch_buzzer_play_note(BUZZER_NOTE_REST, 100); + watch_buzzer_play_note(BUZZER_NOTE_C8, 100); +} + +void movement_play_signal_background(void) { + watch_enable_buzzer(); + movement_play_signal(); + watch_disable_buzzer(); +} + +void movement_play_tune(void) { watch_buzzer_play_sequence(signal_tune, NULL); } +/* Special version of movement_play_tune meant for use during LE mode */ +void movement_play_tune_background(void) { + watch_enable_buzzer(); + watch_buzzer_play_sequence(signal_tune, watch_disable_buzzer); +} + void movement_play_alarm(void) { movement_play_alarm_beeps(5, BUZZER_NOTE_C8); } diff --git a/movement/movement.h b/movement/movement.h index 66bf6af4..c6380cec 100644 --- a/movement/movement.h +++ b/movement/movement.h @@ -307,6 +307,9 @@ void movement_cancel_background_task_for_face(uint8_t watch_face_index); void movement_request_wake(void); void movement_play_signal(void); +void movement_play_signal_background(void); +void movement_play_tune(void); +void movement_play_tune_background(void); void movement_play_alarm(void); void movement_play_alarm_beeps(uint8_t rounds, BuzzerNote alarm_note); diff --git a/movement/watch_faces/clock/repetition_minute_face.c b/movement/watch_faces/clock/repetition_minute_face.c index a0fbe077..917c5715 100644 --- a/movement/watch_faces/clock/repetition_minute_face.c +++ b/movement/watch_faces/clock/repetition_minute_face.c @@ -151,18 +151,10 @@ bool repetition_minute_face_loop(movement_event_t event, movement_settings_t *se else watch_clear_indicator(WATCH_INDICATOR_BELL); break; 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); 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(); + movement_play_signal_background(); } break; case EVENT_LIGHT_LONG_UP: diff --git a/movement/watch_faces/clock/simple_clock_bin_led_face.c b/movement/watch_faces/clock/simple_clock_bin_led_face.c index 640f0d77..09c8457b 100644 --- a/movement/watch_faces/clock/simple_clock_bin_led_face.c +++ b/movement/watch_faces/clock/simple_clock_bin_led_face.c @@ -181,15 +181,9 @@ bool simple_clock_bin_led_face_loop(movement_event_t event, movement_settings_t // uncomment this line to snap back to the clock face when the hour signal sounds: // movement_move_to_face(state->watch_face_index); 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(); + movement_play_signal_background(); } break; case EVENT_LIGHT_LONG_PRESS: diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index 91400b6c..ebe7542f 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -137,15 +137,9 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting // uncomment this line to snap back to the clock face when the hour signal sounds: // movement_move_to_face(state->watch_face_index); if (watch_is_buzzer_or_led_enabled()) { - // if we are in the foreground, we can just beep. - movement_play_signal(); + movement_play_tune(); } 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(); + movement_play_tune_background(); } break; default: diff --git a/movement/watch_faces/clock/weeknumber_clock_face.c b/movement/watch_faces/clock/weeknumber_clock_face.c index 4e40ebdc..b4514bf1 100644 --- a/movement/watch_faces/clock/weeknumber_clock_face.c +++ b/movement/watch_faces/clock/weeknumber_clock_face.c @@ -131,15 +131,9 @@ bool weeknumber_clock_face_loop(movement_event_t event, movement_settings_t *set // uncomment this line to snap back to the clock face when the hour signal sounds: // movement_move_to_face(state->watch_face_index); 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(); + movement_play_signal_background(); } break; default: From 45f402b4ecbf40c4d33f0945ce05c83db46a3972 Mon Sep 17 00:00:00 2001 From: Jeremy O'Brien Date: Sat, 23 Sep 2023 10:54:49 -0400 Subject: [PATCH 2/3] move buzzer enabled detection logic into movement for movement_play_signal/tune this way watch faces don't have to disable/enable the buzzer themselves before calling movement_play_signal() and movement_play_tune() --- movement/movement.c | 26 +++++++++---------- movement/movement.h | 2 -- .../clock/repetition_minute_face.c | 6 +---- .../clock/simple_clock_bin_led_face.c | 6 +---- .../watch_faces/clock/simple_clock_face.c | 6 +---- .../watch_faces/clock/weeknumber_clock_face.c | 6 +---- 6 files changed, 17 insertions(+), 35 deletions(-) diff --git a/movement/movement.c b/movement/movement.c index f2292e5f..f0868416 100644 --- a/movement/movement.c +++ b/movement/movement.c @@ -294,25 +294,25 @@ void movement_request_wake() { } void movement_play_signal(void) { + bool buzzer_enabled = watch_is_buzzer_or_led_enabled(); + if (!buzzer_enabled) { + watch_enable_buzzer(); + } watch_buzzer_play_note(BUZZER_NOTE_C8, 75); watch_buzzer_play_note(BUZZER_NOTE_REST, 100); watch_buzzer_play_note(BUZZER_NOTE_C8, 100); -} - -void movement_play_signal_background(void) { - watch_enable_buzzer(); - movement_play_signal(); - watch_disable_buzzer(); + if (!buzzer_enabled) { + watch_disable_buzzer(); + } } void movement_play_tune(void) { - watch_buzzer_play_sequence(signal_tune, NULL); -} - -/* Special version of movement_play_tune meant for use during LE mode */ -void movement_play_tune_background(void) { - watch_enable_buzzer(); - watch_buzzer_play_sequence(signal_tune, watch_disable_buzzer); + if (!watch_is_buzzer_or_led_enabled()) { + watch_enable_buzzer(); + watch_buzzer_play_sequence(signal_tune, watch_disable_buzzer); + } else { + watch_buzzer_play_sequence(signal_tune, NULL); + } } void movement_play_alarm(void) { diff --git a/movement/movement.h b/movement/movement.h index c6380cec..5f30dfb8 100644 --- a/movement/movement.h +++ b/movement/movement.h @@ -307,9 +307,7 @@ void movement_cancel_background_task_for_face(uint8_t watch_face_index); void movement_request_wake(void); void movement_play_signal(void); -void movement_play_signal_background(void); void movement_play_tune(void); -void movement_play_tune_background(void); void movement_play_alarm(void); void movement_play_alarm_beeps(uint8_t rounds, BuzzerNote alarm_note); diff --git a/movement/watch_faces/clock/repetition_minute_face.c b/movement/watch_faces/clock/repetition_minute_face.c index 917c5715..fc78b2d8 100644 --- a/movement/watch_faces/clock/repetition_minute_face.c +++ b/movement/watch_faces/clock/repetition_minute_face.c @@ -151,11 +151,7 @@ bool repetition_minute_face_loop(movement_event_t event, movement_settings_t *se else watch_clear_indicator(WATCH_INDICATOR_BELL); break; case EVENT_BACKGROUND_TASK: - if (watch_is_buzzer_or_led_enabled()) { - movement_play_signal(); - } else { - movement_play_signal_background(); - } + movement_play_signal(); break; case EVENT_LIGHT_LONG_UP: /* diff --git a/movement/watch_faces/clock/simple_clock_bin_led_face.c b/movement/watch_faces/clock/simple_clock_bin_led_face.c index 09c8457b..cf39c188 100644 --- a/movement/watch_faces/clock/simple_clock_bin_led_face.c +++ b/movement/watch_faces/clock/simple_clock_bin_led_face.c @@ -180,11 +180,7 @@ bool simple_clock_bin_led_face_loop(movement_event_t event, movement_settings_t 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); - if (watch_is_buzzer_or_led_enabled()) { - movement_play_signal(); - } else { - movement_play_signal_background(); - } + movement_play_signal(); break; case EVENT_LIGHT_LONG_PRESS: if (state->flashing_state == 0) { diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index ebe7542f..63f49234 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -136,11 +136,7 @@ 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); - if (watch_is_buzzer_or_led_enabled()) { - movement_play_tune(); - } else { - movement_play_tune_background(); - } + movement_play_tune(); break; default: return movement_default_loop_handler(event, settings); diff --git a/movement/watch_faces/clock/weeknumber_clock_face.c b/movement/watch_faces/clock/weeknumber_clock_face.c index b4514bf1..81df5847 100644 --- a/movement/watch_faces/clock/weeknumber_clock_face.c +++ b/movement/watch_faces/clock/weeknumber_clock_face.c @@ -130,11 +130,7 @@ 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); - if (watch_is_buzzer_or_led_enabled()) { - movement_play_signal(); - } else { - movement_play_signal_background(); - } + movement_play_signal(); break; default: movement_default_loop_handler(event, settings); From b162dc0663883ed2253af6d0d3c2506f286b95f9 Mon Sep 17 00:00:00 2001 From: joeycastillo Date: Sun, 24 Sep 2023 12:41:18 -0400 Subject: [PATCH 3/3] use movement_play_signal for default tune (fixes background signal) --- movement/watch_faces/clock/simple_clock_face.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index 63f49234..ac9a97b2 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -136,7 +136,11 @@ 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); + #ifdef SIGNAL_TUNE_DEFAULT + movement_play_signal(); + #else movement_play_tune(); + #endif break; default: return movement_default_loop_handler(event, settings);