movement: reset tick to 1 Hz between watch faces (fixes #36)

This commit is contained in:
Joey Castillo 2022-01-19 11:16:10 -05:00
parent fb71be55ee
commit 138b3d0c5e
12 changed files with 8 additions and 17 deletions

View File

@ -17,7 +17,7 @@ You can implement a watch face using just four functions:
* `watch_face_loop` * `watch_face_loop`
* `watch_face_resign` * `watch_face_resign`
A fifth optional function, `watch_face_wants_background_task`, has not yet had its implementation ironed out, but it will be added to the guide at a later date. A fifth optional function, `watch_face_wants_background_task`, will be added to the guide at a later date. You may omit it.
To create a new watch face, you should create a new C header and source file in the watch-faces folder (i.e. for a watch face that displays moon phases: `moon_phase_face.h`, `moon_phase_face.c`), and implement these functions with your own unique prefix (i.e. `moon_phase_face_setup`). Then declare your watch face in your header file as follows: To create a new watch face, you should create a new C header and source file in the watch-faces folder (i.e. for a watch face that displays moon phases: `moon_phase_face.h`, `moon_phase_face.c`), and implement these functions with your own unique prefix (i.e. `moon_phase_face_setup`). Then declare your watch face in your header file as follows:
@ -61,7 +61,7 @@ You should set up a switch statement that handles, at the very least, the `EVENT
### watch_face_resign ### watch_face_resign
This function is called just before your watch face goes off screen. You should disable any peripherals you enabled in `watch_face_activate`. If you requested a tick frequency other than 1 Hz at any point in your code, **you must reset it to 1 Hz when you resign**. The watch_face_resign function is passed the same settings and context as the other functions. This function is called just before your watch face goes off screen. You should disable any peripherals you enabled in `watch_face_activate`. The watch_face_resign function is passed the same settings and context as the other functions.
Putting it into practice: the Pulsometer watch face Putting it into practice: the Pulsometer watch face
--------------------------------------------------- ---------------------------------------------------
@ -242,13 +242,12 @@ case EVENT_TIMEOUT:
#### Watch Face Resignation #### Watch Face Resignation
The resign function doesn't have to do much here; it just resets the tick frequency to 1 Hz. The resign function doesn't have anything to do; it just has to be there.
```c ```c
void pulsometer_face_resign(movement_settings_t *settings, void *context) { void pulsometer_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
movement_request_tick_frequency(1);
} }
``` ```

View File

@ -278,6 +278,7 @@ bool app_loop(void) {
watch_faces[movement_state.current_watch_face].resign(&movement_state.settings, watch_face_contexts[movement_state.current_watch_face]); watch_faces[movement_state.current_watch_face].resign(&movement_state.settings, watch_face_contexts[movement_state.current_watch_face]);
movement_state.current_watch_face = movement_state.next_watch_face; movement_state.current_watch_face = movement_state.next_watch_face;
watch_clear_display(); watch_clear_display();
movement_request_tick_frequency(1);
watch_faces[movement_state.current_watch_face].activate(&movement_state.settings, watch_face_contexts[movement_state.current_watch_face]); watch_faces[movement_state.current_watch_face].activate(&movement_state.settings, watch_face_contexts[movement_state.current_watch_face]);
event.subsecond = 0; event.subsecond = 0;
event.event_type = EVENT_ACTIVATE; event.event_type = EVENT_ACTIVATE;

View File

@ -208,5 +208,4 @@ bool world_clock_face_loop(movement_event_t event, movement_settings_t *settings
void world_clock_face_resign(movement_settings_t *settings, void *context) { void world_clock_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
movement_request_tick_frequency(1);
} }

View File

@ -76,7 +76,6 @@ bool beats_face_loop(movement_event_t event, movement_settings_t *settings, void
void beats_face_resign(movement_settings_t *settings, void *context) { void beats_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
movement_request_tick_frequency(1);
} }
uint32_t clock2beats(uint32_t hours, uint32_t minutes, uint32_t seconds, uint32_t subseconds, int16_t utc_offset) { uint32_t clock2beats(uint32_t hours, uint32_t minutes, uint32_t seconds, uint32_t subseconds, int16_t utc_offset) {

View File

@ -219,6 +219,8 @@ bool countdown_face_loop(movement_event_t event, movement_settings_t *settings,
void countdown_face_resign(movement_settings_t *settings, void *context) { void countdown_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; countdown_state_t *state = (countdown_state_t *)context;
movement_request_tick_frequency(1); if (state->mode == cd_setting) {
state->mode = cd_waiting;
}
} }

View File

@ -187,8 +187,6 @@ void day_one_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
day_one_state_t *state = (day_one_state_t *)context; day_one_state_t *state = (day_one_state_t *)context;
movement_request_tick_frequency(1);
// if the user changed their birth date, store it to the birth date register // if the user changed their birth date, store it to the birth date register
if (state->birthday_changed) { if (state->birthday_changed) {
day_one_state_t *state = (day_one_state_t *)context; day_one_state_t *state = (day_one_state_t *)context;

View File

@ -111,5 +111,4 @@ bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings,
void pulsometer_face_resign(movement_settings_t *settings, void *context) { void pulsometer_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
movement_request_tick_frequency(1);
} }

View File

@ -144,6 +144,4 @@ bool sunrise_sunset_face_loop(movement_event_t event, movement_settings_t *setti
void sunrise_sunset_face_resign(movement_settings_t *settings, void *context) { void sunrise_sunset_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
movement_request_tick_frequency(1);
} }

View File

@ -72,5 +72,4 @@ bool character_set_face_loop(movement_event_t event, movement_settings_t *settin
void character_set_face_resign(movement_settings_t *settings, void *context) { void character_set_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
movement_request_tick_frequency(1);
} }

View File

@ -138,5 +138,4 @@ bool demo_face_loop(movement_event_t event, movement_settings_t *settings, void
void demo_face_resign(movement_settings_t *settings, void *context) { void demo_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
movement_request_tick_frequency(1);
} }

View File

@ -189,6 +189,5 @@ void preferences_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
watch_set_led_off(); watch_set_led_off();
movement_request_tick_frequency(1);
watch_store_backup_data(settings->reg, 0); watch_store_backup_data(settings->reg, 0);
} }

View File

@ -147,6 +147,5 @@ void set_time_face_resign(movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
(void) context; (void) context;
watch_set_led_off(); watch_set_led_off();
movement_request_tick_frequency(1);
watch_store_backup_data(settings->reg, 0); watch_store_backup_data(settings->reg, 0);
} }