diff options
-rw-r--r-- | movement/watch_faces/complication/counter_face.c | 78 | ||||
-rw-r--r-- | movement/watch_faces/complication/counter_face.h | 1 |
2 files changed, 61 insertions, 18 deletions
diff --git a/movement/watch_faces/complication/counter_face.c b/movement/watch_faces/complication/counter_face.c index 14f68629..69ca1f73 100644 --- a/movement/watch_faces/complication/counter_face.c +++ b/movement/watch_faces/complication/counter_face.c @@ -33,12 +33,17 @@ void counter_face_setup(movement_settings_t *settings, uint8_t watch_face_index, if (*context_ptr == NULL) { *context_ptr = malloc(sizeof(counter_state_t)); memset(*context_ptr, 0, sizeof(counter_state_t)); + counter_state_t *state = (counter_state_t *)*context_ptr; + state->beep_on = true; } } void counter_face_activate(movement_settings_t *settings, void *context) { (void) settings; - (void) context; + counter_state_t *state = (counter_state_t *)context; + if (state->beep_on) { + watch_set_indicator(WATCH_INDICATOR_SIGNAL); + } } bool counter_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { @@ -48,12 +53,24 @@ bool counter_face_loop(movement_event_t event, movement_settings_t *settings, vo switch (event.event_type) { case EVENT_ALARM_BUTTON_UP: + watch_buzzer_abort_sequence(); //abort running buzzer sequence when counting fast state->counter_idx++; // increment counter index if (state->counter_idx>99) { //0-99 state->counter_idx=0;//reset counter index } print_counter(state); - beep_counter(state); + if (state->beep_on) { + beep_counter(state); + } + break; + case EVENT_LIGHT_LONG_PRESS: + watch_buzzer_abort_sequence(); + state->beep_on = !state->beep_on; + if (state->beep_on) { + watch_set_indicator(WATCH_INDICATOR_SIGNAL); + } else { + watch_clear_indicator(WATCH_INDICATOR_SIGNAL); + } break; case EVENT_ALARM_LONG_PRESS: state->counter_idx=0; // reset counter index @@ -75,22 +92,47 @@ bool counter_face_loop(movement_event_t event, movement_settings_t *settings, vo // beep counter index times void beep_counter(counter_state_t *state) { - - int low_count = state->counter_idx/5; - int high_count = state->counter_idx - low_count * 5; - - for (int i=0; i<low_count; i++) { - watch_buzzer_play_note(BUZZER_NOTE_A6, 50); - watch_buzzer_play_note(BUZZER_NOTE_REST, 100); - } - - //sleep between high and low - watch_buzzer_play_note(BUZZER_NOTE_REST, 200); - - for (int i=0; i<high_count; i++) { - watch_buzzer_play_note(BUZZER_NOTE_B6, 50); - watch_buzzer_play_note(BUZZER_NOTE_REST, 100); - } + int low_count = state->counter_idx/5; + int high_count = state->counter_idx - low_count * 5; + static int8_t sound_seq[15]; + memset(sound_seq, 0, 15); + int i = 0; + if (low_count > 0) { + sound_seq[i] = BUZZER_NOTE_A6; + i++; + sound_seq[i] = 3; + i++; + sound_seq[i] = BUZZER_NOTE_REST; + i++; + sound_seq[i] = 6; + i++; + if (low_count > 1) { + sound_seq[i] = -2; + i++; + sound_seq[i] = low_count-1; + i++; + } + sound_seq[i] = BUZZER_NOTE_REST; + i++; + sound_seq[i] = 6; + i++; + } + if (high_count > 0) { + sound_seq[i] = BUZZER_NOTE_B6; + i++; + sound_seq[i] = 3; + i++; + sound_seq[i] = BUZZER_NOTE_REST; + i++; + sound_seq[i] = 6; + i++; + } + if (high_count > 1) { + sound_seq[i] = -2; + i++; + sound_seq[i] = high_count-1; + } + watch_buzzer_play_sequence((int8_t *)sound_seq, NULL); } diff --git a/movement/watch_faces/complication/counter_face.h b/movement/watch_faces/complication/counter_face.h index 430f5a8e..85f203e9 100644 --- a/movement/watch_faces/complication/counter_face.h +++ b/movement/watch_faces/complication/counter_face.h @@ -30,6 +30,7 @@ // Counter face is designed to count the number of running laps during excercises. typedef struct { uint8_t counter_idx; + bool beep_on; } counter_state_t; |