From 249bfc183c5d7c13d94ffecf5389a6b56a2d735d Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Tue, 25 Jan 2022 15:39:04 -0500 Subject: movement: move beat time to clock folder --- movement/make/Makefile | 2 +- movement/watch_faces/clock/beats_face.c | 91 +++++++++++++++++++++++++ movement/watch_faces/clock/beats_face.h | 25 +++++++ movement/watch_faces/complications/beats_face.c | 91 ------------------------- movement/watch_faces/complications/beats_face.h | 25 ------- 5 files changed, 117 insertions(+), 117 deletions(-) create mode 100644 movement/watch_faces/clock/beats_face.c create mode 100644 movement/watch_faces/clock/beats_face.h delete mode 100644 movement/watch_faces/complications/beats_face.c delete mode 100644 movement/watch_faces/complications/beats_face.h (limited to 'movement') diff --git a/movement/make/Makefile b/movement/make/Makefile index 9d6e6b00..e489a09a 100755 --- a/movement/make/Makefile +++ b/movement/make/Makefile @@ -32,6 +32,7 @@ SRCS += \ ../movement.c \ ../watch_faces/clock/simple_clock_face.c \ ../watch_faces/clock/world_clock_face.c \ + ../watch_faces/clock/beats_face.c \ ../watch_faces/settings/preferences_face.c \ ../watch_faces/settings/set_time_face.c \ ../watch_faces/complications/pulsometer_face.c \ @@ -43,7 +44,6 @@ SRCS += \ ../watch_faces/demos/lis2dh_logging_face.c \ ../watch_faces/demos/demo_face.c \ ../watch_faces/demos/hello_there_face.c \ - ../watch_faces/complications/beats_face.c \ ../watch_faces/complications/day_one_face.c \ ../watch_faces/complications/stopwatch_face.c \ ../watch_faces/complications/totp_face.c \ diff --git a/movement/watch_faces/clock/beats_face.c b/movement/watch_faces/clock/beats_face.c new file mode 100644 index 00000000..df31ad1c --- /dev/null +++ b/movement/watch_faces/clock/beats_face.c @@ -0,0 +1,91 @@ +#include +#include +#include "beats_face.h" +#include "watch.h" + +const uint8_t BEAT_REFRESH_FREQUENCY = 8; + +void beats_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) { + (void) settings; + (void) watch_face_index; + (void) context_ptr; + if (*context_ptr == NULL) { + *context_ptr = malloc(sizeof(beats_face_state_t)); + } +} + +void beats_face_activate(movement_settings_t *settings, void *context) { + (void) settings; + beats_face_state_t *state = (beats_face_state_t *)context; + state->next_subsecond_update = 0; + state->last_centibeat_displayed = 0; + movement_request_tick_frequency(BEAT_REFRESH_FREQUENCY); +} + +bool beats_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { + (void) settings; + beats_face_state_t *state = (beats_face_state_t *)context; + if (event.event_type == EVENT_TICK && event.subsecond != state->next_subsecond_update) { + return true; // math is hard, don't do it if we don't have to. + } + + char buf[16]; + uint32_t centibeats; + + watch_date_time date_time; + switch (event.event_type) { + case EVENT_ACTIVATE: + case EVENT_TICK: + date_time = watch_rtc_get_date_time(); + centibeats = clock2beats(date_time.unit.hour, date_time.unit.minute, date_time.unit.second, event.subsecond, movement_timezone_offsets[settings->bit.time_zone]); + if (centibeats == state->last_centibeat_displayed) { + // we missed this update, try again next subsecond + state->next_subsecond_update = (event.subsecond + 1) % BEAT_REFRESH_FREQUENCY; + } else { + state->next_subsecond_update = (event.subsecond + 1 + (BEAT_REFRESH_FREQUENCY * 2 / 3)) % BEAT_REFRESH_FREQUENCY; + state->last_centibeat_displayed = centibeats; + } + sprintf(buf, "bt %6lu", centibeats); + + watch_display_string(buf, 0); + break; + case EVENT_LOW_ENERGY_UPDATE: + if (!watch_tick_animation_is_running()) watch_start_tick_animation(432); + date_time = watch_rtc_get_date_time(); + centibeats = clock2beats(date_time.unit.hour, date_time.unit.minute, date_time.unit.second, event.subsecond, movement_timezone_offsets[settings->bit.time_zone]); + sprintf(buf, "bt %4lu ", centibeats / 100); + + watch_display_string(buf, 0); + break; + case EVENT_MODE_BUTTON_UP: + movement_move_to_next_face(); + break; + case EVENT_LIGHT_BUTTON_DOWN: + movement_illuminate_led(); + break; + case EVENT_ALARM_BUTTON_DOWN: + case EVENT_ALARM_BUTTON_UP: + case EVENT_ALARM_LONG_PRESS: + default: + break; + } + + return true; +} + +void beats_face_resign(movement_settings_t *settings, void *context) { + (void) settings; + (void) context; +} + +uint32_t clock2beats(uint32_t hours, uint32_t minutes, uint32_t seconds, uint32_t subseconds, int16_t utc_offset) { + uint32_t retval = seconds * 1000 + (subseconds * 1000) / (BEAT_REFRESH_FREQUENCY); + retval += 60 * minutes * 1000; + retval += hours * 60 * 60 * 1000; + retval -= (utc_offset - 60) * 60 * 1000; + + retval /= 864; // convert to centibeats + retval %= 100000; + + return retval; +} \ No newline at end of file diff --git a/movement/watch_faces/clock/beats_face.h b/movement/watch_faces/clock/beats_face.h new file mode 100644 index 00000000..2bbbc26d --- /dev/null +++ b/movement/watch_faces/clock/beats_face.h @@ -0,0 +1,25 @@ +#ifndef BEATS_FACE_H_ +#define BEATS_FACE_H_ + +#include "movement.h" + +typedef struct { + int8_t next_subsecond_update; + uint32_t last_centibeat_displayed; +} beats_face_state_t; + +uint32_t clock2beats(uint32_t hours, uint32_t minutes, uint32_t seconds, uint32_t subseconds, int16_t utc_offset); +void beats_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr); +void beats_face_activate(movement_settings_t *settings, void *context); +bool beats_face_loop(movement_event_t event, movement_settings_t *settings, void *context); +void beats_face_resign(movement_settings_t *settings, void *context); + +#define beats_face ((const watch_face_t){ \ + beats_face_setup, \ + beats_face_activate, \ + beats_face_loop, \ + beats_face_resign, \ + NULL, \ +}) + +#endif // BEATS_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/complications/beats_face.c b/movement/watch_faces/complications/beats_face.c deleted file mode 100644 index df31ad1c..00000000 --- a/movement/watch_faces/complications/beats_face.c +++ /dev/null @@ -1,91 +0,0 @@ -#include -#include -#include "beats_face.h" -#include "watch.h" - -const uint8_t BEAT_REFRESH_FREQUENCY = 8; - -void beats_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) { - (void) settings; - (void) watch_face_index; - (void) context_ptr; - if (*context_ptr == NULL) { - *context_ptr = malloc(sizeof(beats_face_state_t)); - } -} - -void beats_face_activate(movement_settings_t *settings, void *context) { - (void) settings; - beats_face_state_t *state = (beats_face_state_t *)context; - state->next_subsecond_update = 0; - state->last_centibeat_displayed = 0; - movement_request_tick_frequency(BEAT_REFRESH_FREQUENCY); -} - -bool beats_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { - (void) settings; - beats_face_state_t *state = (beats_face_state_t *)context; - if (event.event_type == EVENT_TICK && event.subsecond != state->next_subsecond_update) { - return true; // math is hard, don't do it if we don't have to. - } - - char buf[16]; - uint32_t centibeats; - - watch_date_time date_time; - switch (event.event_type) { - case EVENT_ACTIVATE: - case EVENT_TICK: - date_time = watch_rtc_get_date_time(); - centibeats = clock2beats(date_time.unit.hour, date_time.unit.minute, date_time.unit.second, event.subsecond, movement_timezone_offsets[settings->bit.time_zone]); - if (centibeats == state->last_centibeat_displayed) { - // we missed this update, try again next subsecond - state->next_subsecond_update = (event.subsecond + 1) % BEAT_REFRESH_FREQUENCY; - } else { - state->next_subsecond_update = (event.subsecond + 1 + (BEAT_REFRESH_FREQUENCY * 2 / 3)) % BEAT_REFRESH_FREQUENCY; - state->last_centibeat_displayed = centibeats; - } - sprintf(buf, "bt %6lu", centibeats); - - watch_display_string(buf, 0); - break; - case EVENT_LOW_ENERGY_UPDATE: - if (!watch_tick_animation_is_running()) watch_start_tick_animation(432); - date_time = watch_rtc_get_date_time(); - centibeats = clock2beats(date_time.unit.hour, date_time.unit.minute, date_time.unit.second, event.subsecond, movement_timezone_offsets[settings->bit.time_zone]); - sprintf(buf, "bt %4lu ", centibeats / 100); - - watch_display_string(buf, 0); - break; - case EVENT_MODE_BUTTON_UP: - movement_move_to_next_face(); - break; - case EVENT_LIGHT_BUTTON_DOWN: - movement_illuminate_led(); - break; - case EVENT_ALARM_BUTTON_DOWN: - case EVENT_ALARM_BUTTON_UP: - case EVENT_ALARM_LONG_PRESS: - default: - break; - } - - return true; -} - -void beats_face_resign(movement_settings_t *settings, void *context) { - (void) settings; - (void) context; -} - -uint32_t clock2beats(uint32_t hours, uint32_t minutes, uint32_t seconds, uint32_t subseconds, int16_t utc_offset) { - uint32_t retval = seconds * 1000 + (subseconds * 1000) / (BEAT_REFRESH_FREQUENCY); - retval += 60 * minutes * 1000; - retval += hours * 60 * 60 * 1000; - retval -= (utc_offset - 60) * 60 * 1000; - - retval /= 864; // convert to centibeats - retval %= 100000; - - return retval; -} \ No newline at end of file diff --git a/movement/watch_faces/complications/beats_face.h b/movement/watch_faces/complications/beats_face.h deleted file mode 100644 index 2bbbc26d..00000000 --- a/movement/watch_faces/complications/beats_face.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef BEATS_FACE_H_ -#define BEATS_FACE_H_ - -#include "movement.h" - -typedef struct { - int8_t next_subsecond_update; - uint32_t last_centibeat_displayed; -} beats_face_state_t; - -uint32_t clock2beats(uint32_t hours, uint32_t minutes, uint32_t seconds, uint32_t subseconds, int16_t utc_offset); -void beats_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr); -void beats_face_activate(movement_settings_t *settings, void *context); -bool beats_face_loop(movement_event_t event, movement_settings_t *settings, void *context); -void beats_face_resign(movement_settings_t *settings, void *context); - -#define beats_face ((const watch_face_t){ \ - beats_face_setup, \ - beats_face_activate, \ - beats_face_loop, \ - beats_face_resign, \ - NULL, \ -}) - -#endif // BEATS_FACE_H_ \ No newline at end of file -- cgit v1.2.3