Merge pull request #253 from Kistelini/counter

Counter face: change sound to non-blocking, add option to deactivate sound
This commit is contained in:
Jose Castillo 2023-07-29 07:48:16 -04:00 committed by GitHub
commit 07f150fbec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 18 deletions

View File

@ -33,12 +33,17 @@ void counter_face_setup(movement_settings_t *settings, uint8_t watch_face_index,
if (*context_ptr == NULL) { if (*context_ptr == NULL) {
*context_ptr = malloc(sizeof(counter_state_t)); *context_ptr = malloc(sizeof(counter_state_t));
memset(*context_ptr, 0, 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 counter_face_activate(movement_settings_t *settings, void *context) {
(void) settings; (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) { 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) { switch (event.event_type) {
case EVENT_ALARM_BUTTON_UP: case EVENT_ALARM_BUTTON_UP:
watch_buzzer_abort_sequence(); //abort running buzzer sequence when counting fast
state->counter_idx++; // increment counter index state->counter_idx++; // increment counter index
if (state->counter_idx>99) { //0-99 if (state->counter_idx>99) { //0-99
state->counter_idx=0;//reset counter index state->counter_idx=0;//reset counter index
} }
print_counter(state); 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; break;
case EVENT_ALARM_LONG_PRESS: case EVENT_ALARM_LONG_PRESS:
state->counter_idx=0; // reset counter index 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 // beep counter index times
void beep_counter(counter_state_t *state) { void beep_counter(counter_state_t *state) {
int low_count = state->counter_idx/5;
int low_count = state->counter_idx/5; int high_count = state->counter_idx - low_count * 5;
int high_count = state->counter_idx - low_count * 5; static int8_t sound_seq[15];
memset(sound_seq, 0, 15);
for (int i=0; i<low_count; i++) { int i = 0;
watch_buzzer_play_note(BUZZER_NOTE_A6, 50); if (low_count > 0) {
watch_buzzer_play_note(BUZZER_NOTE_REST, 100); sound_seq[i] = BUZZER_NOTE_A6;
} i++;
sound_seq[i] = 3;
//sleep between high and low i++;
watch_buzzer_play_note(BUZZER_NOTE_REST, 200); sound_seq[i] = BUZZER_NOTE_REST;
i++;
for (int i=0; i<high_count; i++) { sound_seq[i] = 6;
watch_buzzer_play_note(BUZZER_NOTE_B6, 50); i++;
watch_buzzer_play_note(BUZZER_NOTE_REST, 100); 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);
} }

View File

@ -30,6 +30,7 @@
// Counter face is designed to count the number of running laps during excercises. // Counter face is designed to count the number of running laps during excercises.
typedef struct { typedef struct {
uint8_t counter_idx; uint8_t counter_idx;
bool beep_on;
} counter_state_t; } counter_state_t;