mirror of
https://github.com/firewalkwithm3/Sensor-Watch.git
synced 2024-11-22 19:20:30 +08:00
Merge pull request #253 from Kistelini/counter
Counter face: change sound to non-blocking, add option to deactivate sound
This commit is contained in:
commit
07f150fbec
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue