From d5ac4cb71b4e328a27e26843cfdc6719b152ac7d Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sat, 16 Oct 2021 13:14:52 -0400 Subject: widgets are now watch faces --- movement/watch_faces/clock/simple_clock_face.c | 92 ++++++++++++++++ movement/watch_faces/clock/simple_clock_face.h | 20 ++++ .../watch_faces/complications/pulseometer_face.c | 87 +++++++++++++++ .../watch_faces/complications/pulseometer_face.h | 24 +++++ movement/watch_faces/settings/preferences_face.c | 120 +++++++++++++++++++++ movement/watch_faces/settings/preferences_face.h | 18 ++++ movement/watch_faces/settings/set_time_face.c | 109 +++++++++++++++++++ movement/watch_faces/settings/set_time_face.h | 18 ++++ 8 files changed, 488 insertions(+) create mode 100644 movement/watch_faces/clock/simple_clock_face.c create mode 100644 movement/watch_faces/clock/simple_clock_face.h create mode 100644 movement/watch_faces/complications/pulseometer_face.c create mode 100644 movement/watch_faces/complications/pulseometer_face.h create mode 100644 movement/watch_faces/settings/preferences_face.c create mode 100644 movement/watch_faces/settings/preferences_face.h create mode 100644 movement/watch_faces/settings/set_time_face.c create mode 100644 movement/watch_faces/settings/set_time_face.h (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c new file mode 100644 index 00000000..97067b0f --- /dev/null +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -0,0 +1,92 @@ +#include +#include "simple_clock_face.h" +#include "watch.h" + +void simple_clock_face_setup(LauncherSettings *settings, void ** context_ptr) { + (void) settings; + // the only context we need is the timestamp of the previous tick. + if (*context_ptr == NULL) *context_ptr = malloc(sizeof(uint32_t)); +} + +void simple_clock_face_activate(LauncherSettings *settings, void *context) { + if (settings->bit.clock_mode_24h) { + watch_set_indicator(WATCH_INDICATOR_24H); + } + watch_set_colon(); + // this ensures that none of the timestamp fields will match, so we can re-render them all. + *((uint32_t *)context) = 0xFFFFFFFF; +} + +bool simple_clock_face_loop(LauncherEvent event, LauncherSettings *settings, void *context) { + printf("simple_clock_face_loop\n"); + const char weekdays[7][3] = {"SA", "SU", "MO", "TU", "WE", "TH", "FR"}; + char buf[11]; + uint8_t pos; + + watch_date_time date_time; + uint32_t previous_date_time; + switch (event.event_type) { + case EVENT_ACTIVATE: + case EVENT_TICK: + case EVENT_SCREENSAVER: + date_time = watch_rtc_get_date_time(); + previous_date_time = *((uint32_t *)context); + *((uint32_t *)context) = date_time.reg; + + if (date_time.reg >> 6 == previous_date_time >> 6 && event.event_type != EVENT_SCREENSAVER) { + // everything before seconds is the same, don't waste cycles setting those segments. + pos = 8; + sprintf(buf, "%02d", date_time.unit.second); + } else if (date_time.reg >> 12 == previous_date_time >> 12 && event.event_type != EVENT_SCREENSAVER) { + // everything before minutes is the same. + pos = 6; + sprintf(buf, "%02d%02d", date_time.unit.minute, date_time.unit.second); + } else { + // other stuff changed; let's do it all. + if (!settings->bit.clock_mode_24h) { + // if we are in 12 hour mode, do some cleanup. + if (date_time.unit.hour < 12) { + watch_clear_indicator(WATCH_INDICATOR_PM); + } else { + watch_set_indicator(WATCH_INDICATOR_PM); + } + date_time.unit.hour %= 12; + if (date_time.unit.hour == 0) date_time.unit.hour = 12; + } + pos = 0; + if (event.event_type == EVENT_SCREENSAVER) { + sprintf(buf, "%s%2d%2d%02d ", weekdays[simple_clock_face_get_weekday(date_time.unit.year, date_time.unit.month, date_time.unit.day)], date_time.unit.day, date_time.unit.hour, date_time.unit.minute); + } else { + sprintf(buf, "%s%2d%2d%02d%02d", weekdays[simple_clock_face_get_weekday(date_time.unit.year, date_time.unit.month, date_time.unit.day)], date_time.unit.day, date_time.unit.hour, date_time.unit.minute, date_time.unit.second); + } + } + watch_display_string(buf, pos); + break; + case EVENT_MODE_BUTTON_UP: + movement_move_to_next_face(); + return false; + case EVENT_LIGHT_BUTTON_UP: + movement_illuminate_led(); + break; + case EVENT_ALARM_BUTTON_UP: + break; + default: + break; + } + + return true; +} + +void simple_clock_face_resign(LauncherSettings *settings, void *context) { + (void) settings; + (void) context; +} + +uint8_t simple_clock_face_get_weekday(uint16_t year, uint16_t month, uint16_t day) { + year += 20; + if (month <= 2) { + month += 12; + year--; + } + return (day + 13 * (month + 1) / 5 + year + year / 4 + 525) % 7; +} diff --git a/movement/watch_faces/clock/simple_clock_face.h b/movement/watch_faces/clock/simple_clock_face.h new file mode 100644 index 00000000..59201a1f --- /dev/null +++ b/movement/watch_faces/clock/simple_clock_face.h @@ -0,0 +1,20 @@ +#ifndef SIMPLE_CLOCK_FACE_H_ +#define SIMPLE_CLOCK_FACE_H_ + +#include "movement.h" + +void simple_clock_face_setup(LauncherSettings *settings, void ** context_ptr); +void simple_clock_face_activate(LauncherSettings *settings, void *context); +bool simple_clock_face_loop(LauncherEvent event, LauncherSettings *settings, void *context); +void simple_clock_face_resign(LauncherSettings *settings, void *context); + +uint8_t simple_clock_face_get_weekday(uint16_t day, uint16_t month, uint16_t year); + +#define simple_clock_face { \ + simple_clock_face_setup, \ + simple_clock_face_activate, \ + simple_clock_face_loop, \ + simple_clock_face_resign, \ +} + +#endif // FAKE_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/complications/pulseometer_face.c b/movement/watch_faces/complications/pulseometer_face.c new file mode 100644 index 00000000..e38153d6 --- /dev/null +++ b/movement/watch_faces/complications/pulseometer_face.c @@ -0,0 +1,87 @@ +#include +#include +#include "pulseometer_face.h" +#include "watch.h" + +#define PULSOMETER_FACE_FREQUENCY_FACTOR (4ul) // refresh rate will be 2 to this power Hz (0 for 1 Hz, 2 for 4 Hz, etc.) +#define PULSOMETER_FACE_FREQUENCY (1 << PULSOMETER_FACE_FREQUENCY_FACTOR) + +void pulseometer_face_setup(LauncherSettings *settings, void ** context_ptr) { + (void) settings; + if (*context_ptr == NULL) *context_ptr = malloc(sizeof(PulsometerState)); +} + +void pulseometer_face_activate(LauncherSettings *settings, void *context) { + (void) settings; + memset(context, 0, sizeof(PulsometerState)); +} + +bool pulseometer_face_loop(LauncherEvent event, LauncherSettings *settings, void *context) { + printf("pulseometer_face_loop\n"); + (void) settings; + PulsometerState *pulsometer_state = (PulsometerState *)context; + char buf[14]; + switch (event.event_type) { + case EVENT_TICK: + if (pulsometer_state->pulse == 0 && !pulsometer_state->measuring) { + switch (pulsometer_state->ticks % 5) { + case 0: + watch_display_string(" Hold ", 2); + break; + case 1: + watch_display_string(" Alarn", 4); + break; + case 2: + watch_display_string("+ Count ", 0); + break; + case 3: + watch_display_string(" 30Beats ", 0); + break; + case 4: + watch_clear_display(); + break; + } + pulsometer_state->ticks = (pulsometer_state->ticks + 1) % 5; + } else { + if (pulsometer_state->measuring && pulsometer_state->ticks) { + pulsometer_state->pulse = (int16_t)((30.0 * ((float)(60 << PULSOMETER_FACE_FREQUENCY_FACTOR) / (float)pulsometer_state->ticks)) + 0.5); + } + if (pulsometer_state->pulse > 240) { + watch_display_string(" Hi", 0); + } else if (pulsometer_state->pulse < 40) { + watch_display_string(" Lo", 0); + } else { + sprintf(buf, " %-3dbpn", pulsometer_state->pulse); + watch_display_string(buf, 0); + } + if (pulsometer_state->measuring) pulsometer_state->ticks++; + } + return false; + case EVENT_MODE_BUTTON_UP: + movement_move_to_next_face(); + return false; + case EVENT_LIGHT_BUTTON_UP: + movement_illuminate_led(); + break; + case EVENT_ALARM_BUTTON_DOWN: + pulsometer_state->ticks = 0; + pulsometer_state->pulse = 0xFFFF; + pulsometer_state->measuring = true; + movement_request_tick_frequency(PULSOMETER_FACE_FREQUENCY); + break; + case EVENT_ALARM_BUTTON_UP: + case EVENT_ALARM_LONG_PRESS: + pulsometer_state->measuring = false; + movement_request_tick_frequency(1); + break; + default: + break; + } + + return true; +} + +void pulseometer_face_resign(LauncherSettings *settings, void *context) { + (void) settings; + (void) context; +} diff --git a/movement/watch_faces/complications/pulseometer_face.h b/movement/watch_faces/complications/pulseometer_face.h new file mode 100644 index 00000000..7b96259c --- /dev/null +++ b/movement/watch_faces/complications/pulseometer_face.h @@ -0,0 +1,24 @@ +#ifndef PULSEOMETER_FACE_H_ +#define PULSEOMETER_FACE_H_ + +#include "movement.h" + +typedef struct { + bool measuring; + int16_t pulse; + int16_t ticks; +} PulsometerState; + +void pulseometer_face_setup(LauncherSettings *settings, void ** context_ptr); +void pulseometer_face_activate(LauncherSettings *settings, void *context); +bool pulseometer_face_loop(LauncherEvent event, LauncherSettings *settings, void *context); +void pulseometer_face_resign(LauncherSettings *settings, void *context); + +#define pulseometer_face { \ + pulseometer_face_setup, \ + pulseometer_face_activate, \ + pulseometer_face_loop, \ + pulseometer_face_resign, \ +} + +#endif // PULSEOMETER_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/settings/preferences_face.c b/movement/watch_faces/settings/preferences_face.c new file mode 100644 index 00000000..f499e36f --- /dev/null +++ b/movement/watch_faces/settings/preferences_face.c @@ -0,0 +1,120 @@ +#include +#include "preferences_face.h" +#include "watch.h" + +#define PREFERENCES_FACE_NUM_PREFEFENCES (5) +const char preferences_face_titles[PREFERENCES_FACE_NUM_PREFEFENCES][11] = {"CL ", "Bt Beep ", "SC ", "Lt grn ", "Lt red "}; + +void preferences_face_setup(LauncherSettings *settings, void ** context_ptr) { + (void) settings; + if (*context_ptr == NULL) *context_ptr = malloc(sizeof(uint8_t)); +} + +void preferences_face_activate(LauncherSettings *settings, void *context) { + (void) settings; + *((uint8_t *)context) = 0; + movement_request_tick_frequency(4); // we need to manually blink some pixels +} + +bool preferences_face_loop(LauncherEvent event, LauncherSettings *settings, void *context) { + printf("preferences_face_loop\n"); + uint8_t current_page = *((uint8_t *)context); + switch (event.event_type) { + case EVENT_MODE_BUTTON_UP: + watch_set_led_off(); + movement_move_to_next_face(); + return false; + case EVENT_LIGHT_BUTTON_UP: + current_page = (current_page + 1) % PREFERENCES_FACE_NUM_PREFEFENCES; + *((uint8_t *)context) = current_page; + break; + case EVENT_ALARM_BUTTON_UP: + switch (current_page) { + case 0: + settings->bit.clock_mode_24h = !(settings->bit.clock_mode_24h); + break; + case 1: + settings->bit.button_should_sound = !(settings->bit.button_should_sound); + break; + case 2: + settings->bit.screensaver_interval = settings->bit.screensaver_interval + 1; + break; + case 3: + settings->bit.led_green_color = settings->bit.led_green_color + 1; + break; + case 4: + settings->bit.led_red_color = settings->bit.led_red_color + 1; + break; + } + break; + default: + break; + } + + watch_display_string((char *)preferences_face_titles[current_page], 0); + + if (event.subsecond % 2) return current_page <= 2; + char buf[3]; + switch (current_page) { + case 0: + if (settings->bit.clock_mode_24h) watch_display_string("24h", 4); + else watch_display_string("12h", 4); + break; + case 1: + if (settings->bit.button_should_sound) watch_display_string("y", 9); + else watch_display_string("n", 9); + break; + case 2: + switch (settings->bit.screensaver_interval) { + case 0: + watch_display_string(" never", 4); + break; + case 1: + watch_display_string("1 hour", 4); + break; + case 2: + watch_display_string("2 hour", 4); + break; + case 3: + watch_display_string("6 hour", 4); + break; + case 4: + watch_display_string("12 hr", 4); + break; + case 5: + watch_display_string(" 1 day", 4); + break; + case 6: + watch_display_string(" 2 day", 4); + break; + case 7: + watch_display_string(" 7 day", 4); + break; + } + break; + case 3: + sprintf(buf, "%2d", settings->bit.led_green_color); + watch_display_string(buf, 8); + break; + case 4: + sprintf(buf, "%2d", settings->bit.led_red_color); + watch_display_string(buf, 8); + break; + } + + if (current_page > 2) { + watch_set_led_color(settings->bit.led_red_color ? (0xF | settings->bit.led_red_color << 4) : 0, + settings->bit.led_green_color ? (0xF | settings->bit.led_green_color << 4) : 0); + return false; + } + + watch_set_led_off(); + return true; +} + +void preferences_face_resign(LauncherSettings *settings, void *context) { + (void) settings; + (void) context; + watch_set_led_off(); + movement_request_tick_frequency(1); +} diff --git a/movement/watch_faces/settings/preferences_face.h b/movement/watch_faces/settings/preferences_face.h new file mode 100644 index 00000000..218f99c2 --- /dev/null +++ b/movement/watch_faces/settings/preferences_face.h @@ -0,0 +1,18 @@ +#ifndef PREFERENCES_FACE_H_ +#define PREFERENCES_FACE_H_ + +#include "movement.h" + +void preferences_face_setup(LauncherSettings *settings, void ** context_ptr); +void preferences_face_activate(LauncherSettings *settings, void *context); +bool preferences_face_loop(LauncherEvent event, LauncherSettings *settings, void *context); +void preferences_face_resign(LauncherSettings *settings, void *context); + +#define preferences_face { \ + preferences_face_setup, \ + preferences_face_activate, \ + preferences_face_loop, \ + preferences_face_resign, \ +} + +#endif // PREFERENCES_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/settings/set_time_face.c b/movement/watch_faces/settings/set_time_face.c new file mode 100644 index 00000000..36498611 --- /dev/null +++ b/movement/watch_faces/settings/set_time_face.c @@ -0,0 +1,109 @@ +#include +#include "set_time_face.h" +#include "watch.h" + +#define SET_TIME_FACE_NUM_SETTINGS (6) +const char set_time_face_titles[SET_TIME_FACE_NUM_SETTINGS][3] = {"HR", "MN", "SE", "YR", "MO", "DA"}; + +void set_time_face_setup(LauncherSettings *settings, void ** context_ptr) { + (void) settings; + if (*context_ptr == NULL) *context_ptr = malloc(sizeof(uint8_t)); +} + +void set_time_face_activate(LauncherSettings *settings, void *context) { + (void) settings; + *((uint8_t *)context) = 0; + movement_request_tick_frequency(4); +} + +bool set_time_face_loop(LauncherEvent event, LauncherSettings *settings, void *context) { + uint8_t current_page = *((uint8_t *)context); + const uint8_t days_in_month[12] = {31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31}; + watch_date_time date_time = watch_rtc_get_date_time(); + + switch (event.event_type) { + case EVENT_MODE_BUTTON_UP: + movement_move_to_next_face(); + return false; + case EVENT_LIGHT_BUTTON_UP: + current_page = (current_page + 1) % SET_TIME_FACE_NUM_SETTINGS; + *((uint8_t *)context) = current_page; + break; + case EVENT_ALARM_BUTTON_UP: + switch (current_page) { + case 0: // hour + date_time.unit.hour = (date_time.unit.hour + 1) % 24; + break; + case 1: // minute + date_time.unit.minute = (date_time.unit.minute + 1) % 60; + break; + case 2: // second + date_time.unit.second = 0; + break; + case 3: // year + // only allow 2021-2030. fix this sometime next decade + date_time.unit.year = ((date_time.unit.year % 10) + 1); + break; + case 4: // month + date_time.unit.month = (date_time.unit.month % 12) + 1; + break; + case 5: // day + date_time.unit.day = date_time.unit.day + 1; + // can't set to the 29th on a leap year. if it's february 29, set to 11:59 on the 28th. + // and it should roll over. + if (date_time.unit.day > days_in_month[date_time.unit.month - 1]) { + date_time.unit.day = 1; + } + break; + } + watch_rtc_set_date_time(date_time); + break; + default: + break; + } + + char buf[11]; + if (current_page < 3) { + watch_set_colon(); + if (settings->bit.clock_mode_24h) { + watch_set_indicator(WATCH_INDICATOR_24H); + sprintf(buf, "%s %2d%02d%02d", set_time_face_titles[current_page], date_time.unit.hour, date_time.unit.minute, date_time.unit.second); + } else { + sprintf(buf, "%s %2d%02d%02d", set_time_face_titles[current_page], (date_time.unit.hour % 12) ? (date_time.unit.hour % 12) : 12, date_time.unit.minute, date_time.unit.second); + if (date_time.unit.hour > 12) watch_set_indicator(WATCH_INDICATOR_PM); + else watch_clear_indicator(WATCH_INDICATOR_PM); + } + } else { + watch_clear_colon(); + watch_clear_indicator(WATCH_INDICATOR_24H); + watch_clear_indicator(WATCH_INDICATOR_PM); + sprintf(buf, "%s %2d%02d%02d", set_time_face_titles[current_page], date_time.unit.year + 20, date_time.unit.month, date_time.unit.day); + } + if (event.subsecond % 2) { + switch (current_page) { + case 0: + case 3: + buf[4] = buf[5] = ' '; + break; + case 1: + case 4: + buf[6] = buf[7] = ' '; + break; + case 2: + case 5: + buf[8] = buf[9] = ' '; + break; + } + } + + watch_display_string(buf, 0); + + return true; +} + +void set_time_face_resign(LauncherSettings *settings, void *context) { + (void) settings; + (void) context; + watch_set_led_off(); + movement_request_tick_frequency(1); +} diff --git a/movement/watch_faces/settings/set_time_face.h b/movement/watch_faces/settings/set_time_face.h new file mode 100644 index 00000000..0c34d6b2 --- /dev/null +++ b/movement/watch_faces/settings/set_time_face.h @@ -0,0 +1,18 @@ +#ifndef SET_TIME_FACE_H_ +#define SET_TIME_FACE_H_ + +#include "movement.h" + +void set_time_face_setup(LauncherSettings *settings, void ** context_ptr); +void set_time_face_activate(LauncherSettings *settings, void *context); +bool set_time_face_loop(LauncherEvent event, LauncherSettings *settings, void *context); +void set_time_face_resign(LauncherSettings *settings, void *context); + +#define set_time_face { \ + set_time_face_setup, \ + set_time_face_activate, \ + set_time_face_loop, \ + set_time_face_resign, \ +} + +#endif // SET_TIME_FACE_H_ -- cgit v1.2.3 From d36331ce4e79d275e0ef09414a1a1a1a8949b0ea Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sat, 16 Oct 2021 13:23:23 -0400 Subject: rename types to be more c-like --- movement/watch_faces/clock/simple_clock_face.c | 8 ++++---- movement/watch_faces/clock/simple_clock_face.h | 8 ++++---- movement/watch_faces/complications/pulseometer_face.c | 8 ++++---- movement/watch_faces/complications/pulseometer_face.h | 8 ++++---- movement/watch_faces/settings/preferences_face.c | 8 ++++---- movement/watch_faces/settings/preferences_face.h | 8 ++++---- movement/watch_faces/settings/set_time_face.c | 8 ++++---- movement/watch_faces/settings/set_time_face.h | 8 ++++---- 8 files changed, 32 insertions(+), 32 deletions(-) (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index 97067b0f..bdee7dec 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -2,13 +2,13 @@ #include "simple_clock_face.h" #include "watch.h" -void simple_clock_face_setup(LauncherSettings *settings, void ** context_ptr) { +void simple_clock_face_setup(movement_settings_t *settings, void ** context_ptr) { (void) settings; // the only context we need is the timestamp of the previous tick. if (*context_ptr == NULL) *context_ptr = malloc(sizeof(uint32_t)); } -void simple_clock_face_activate(LauncherSettings *settings, void *context) { +void simple_clock_face_activate(movement_settings_t *settings, void *context) { if (settings->bit.clock_mode_24h) { watch_set_indicator(WATCH_INDICATOR_24H); } @@ -17,7 +17,7 @@ void simple_clock_face_activate(LauncherSettings *settings, void *context) { *((uint32_t *)context) = 0xFFFFFFFF; } -bool simple_clock_face_loop(LauncherEvent event, LauncherSettings *settings, void *context) { +bool simple_clock_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { printf("simple_clock_face_loop\n"); const char weekdays[7][3] = {"SA", "SU", "MO", "TU", "WE", "TH", "FR"}; char buf[11]; @@ -77,7 +77,7 @@ bool simple_clock_face_loop(LauncherEvent event, LauncherSettings *settings, voi return true; } -void simple_clock_face_resign(LauncherSettings *settings, void *context) { +void simple_clock_face_resign(movement_settings_t *settings, void *context) { (void) settings; (void) context; } diff --git a/movement/watch_faces/clock/simple_clock_face.h b/movement/watch_faces/clock/simple_clock_face.h index 59201a1f..3cdc09e8 100644 --- a/movement/watch_faces/clock/simple_clock_face.h +++ b/movement/watch_faces/clock/simple_clock_face.h @@ -3,10 +3,10 @@ #include "movement.h" -void simple_clock_face_setup(LauncherSettings *settings, void ** context_ptr); -void simple_clock_face_activate(LauncherSettings *settings, void *context); -bool simple_clock_face_loop(LauncherEvent event, LauncherSettings *settings, void *context); -void simple_clock_face_resign(LauncherSettings *settings, void *context); +void simple_clock_face_setup(movement_settings_t *settings, void ** context_ptr); +void simple_clock_face_activate(movement_settings_t *settings, void *context); +bool simple_clock_face_loop(movement_event_t event, movement_settings_t *settings, void *context); +void simple_clock_face_resign(movement_settings_t *settings, void *context); uint8_t simple_clock_face_get_weekday(uint16_t day, uint16_t month, uint16_t year); diff --git a/movement/watch_faces/complications/pulseometer_face.c b/movement/watch_faces/complications/pulseometer_face.c index e38153d6..7c524b8d 100644 --- a/movement/watch_faces/complications/pulseometer_face.c +++ b/movement/watch_faces/complications/pulseometer_face.c @@ -6,17 +6,17 @@ #define PULSOMETER_FACE_FREQUENCY_FACTOR (4ul) // refresh rate will be 2 to this power Hz (0 for 1 Hz, 2 for 4 Hz, etc.) #define PULSOMETER_FACE_FREQUENCY (1 << PULSOMETER_FACE_FREQUENCY_FACTOR) -void pulseometer_face_setup(LauncherSettings *settings, void ** context_ptr) { +void pulseometer_face_setup(movement_settings_t *settings, void ** context_ptr) { (void) settings; if (*context_ptr == NULL) *context_ptr = malloc(sizeof(PulsometerState)); } -void pulseometer_face_activate(LauncherSettings *settings, void *context) { +void pulseometer_face_activate(movement_settings_t *settings, void *context) { (void) settings; memset(context, 0, sizeof(PulsometerState)); } -bool pulseometer_face_loop(LauncherEvent event, LauncherSettings *settings, void *context) { +bool pulseometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { printf("pulseometer_face_loop\n"); (void) settings; PulsometerState *pulsometer_state = (PulsometerState *)context; @@ -81,7 +81,7 @@ bool pulseometer_face_loop(LauncherEvent event, LauncherSettings *settings, void return true; } -void pulseometer_face_resign(LauncherSettings *settings, void *context) { +void pulseometer_face_resign(movement_settings_t *settings, void *context) { (void) settings; (void) context; } diff --git a/movement/watch_faces/complications/pulseometer_face.h b/movement/watch_faces/complications/pulseometer_face.h index 7b96259c..f8e69d27 100644 --- a/movement/watch_faces/complications/pulseometer_face.h +++ b/movement/watch_faces/complications/pulseometer_face.h @@ -9,10 +9,10 @@ typedef struct { int16_t ticks; } PulsometerState; -void pulseometer_face_setup(LauncherSettings *settings, void ** context_ptr); -void pulseometer_face_activate(LauncherSettings *settings, void *context); -bool pulseometer_face_loop(LauncherEvent event, LauncherSettings *settings, void *context); -void pulseometer_face_resign(LauncherSettings *settings, void *context); +void pulseometer_face_setup(movement_settings_t *settings, void ** context_ptr); +void pulseometer_face_activate(movement_settings_t *settings, void *context); +bool pulseometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context); +void pulseometer_face_resign(movement_settings_t *settings, void *context); #define pulseometer_face { \ pulseometer_face_setup, \ diff --git a/movement/watch_faces/settings/preferences_face.c b/movement/watch_faces/settings/preferences_face.c index f499e36f..18dff6cd 100644 --- a/movement/watch_faces/settings/preferences_face.c +++ b/movement/watch_faces/settings/preferences_face.c @@ -5,18 +5,18 @@ #define PREFERENCES_FACE_NUM_PREFEFENCES (5) const char preferences_face_titles[PREFERENCES_FACE_NUM_PREFEFENCES][11] = {"CL ", "Bt Beep ", "SC ", "Lt grn ", "Lt red "}; -void preferences_face_setup(LauncherSettings *settings, void ** context_ptr) { +void preferences_face_setup(movement_settings_t *settings, void ** context_ptr) { (void) settings; if (*context_ptr == NULL) *context_ptr = malloc(sizeof(uint8_t)); } -void preferences_face_activate(LauncherSettings *settings, void *context) { +void preferences_face_activate(movement_settings_t *settings, void *context) { (void) settings; *((uint8_t *)context) = 0; movement_request_tick_frequency(4); // we need to manually blink some pixels } -bool preferences_face_loop(LauncherEvent event, LauncherSettings *settings, void *context) { +bool preferences_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { printf("preferences_face_loop\n"); uint8_t current_page = *((uint8_t *)context); switch (event.event_type) { @@ -112,7 +112,7 @@ bool preferences_face_loop(LauncherEvent event, LauncherSettings *settings, void return true; } -void preferences_face_resign(LauncherSettings *settings, void *context) { +void preferences_face_resign(movement_settings_t *settings, void *context) { (void) settings; (void) context; watch_set_led_off(); diff --git a/movement/watch_faces/settings/preferences_face.h b/movement/watch_faces/settings/preferences_face.h index 218f99c2..c8f1a14e 100644 --- a/movement/watch_faces/settings/preferences_face.h +++ b/movement/watch_faces/settings/preferences_face.h @@ -3,10 +3,10 @@ #include "movement.h" -void preferences_face_setup(LauncherSettings *settings, void ** context_ptr); -void preferences_face_activate(LauncherSettings *settings, void *context); -bool preferences_face_loop(LauncherEvent event, LauncherSettings *settings, void *context); -void preferences_face_resign(LauncherSettings *settings, void *context); +void preferences_face_setup(movement_settings_t *settings, void ** context_ptr); +void preferences_face_activate(movement_settings_t *settings, void *context); +bool preferences_face_loop(movement_event_t event, movement_settings_t *settings, void *context); +void preferences_face_resign(movement_settings_t *settings, void *context); #define preferences_face { \ preferences_face_setup, \ diff --git a/movement/watch_faces/settings/set_time_face.c b/movement/watch_faces/settings/set_time_face.c index 36498611..7bb63d0b 100644 --- a/movement/watch_faces/settings/set_time_face.c +++ b/movement/watch_faces/settings/set_time_face.c @@ -5,18 +5,18 @@ #define SET_TIME_FACE_NUM_SETTINGS (6) const char set_time_face_titles[SET_TIME_FACE_NUM_SETTINGS][3] = {"HR", "MN", "SE", "YR", "MO", "DA"}; -void set_time_face_setup(LauncherSettings *settings, void ** context_ptr) { +void set_time_face_setup(movement_settings_t *settings, void ** context_ptr) { (void) settings; if (*context_ptr == NULL) *context_ptr = malloc(sizeof(uint8_t)); } -void set_time_face_activate(LauncherSettings *settings, void *context) { +void set_time_face_activate(movement_settings_t *settings, void *context) { (void) settings; *((uint8_t *)context) = 0; movement_request_tick_frequency(4); } -bool set_time_face_loop(LauncherEvent event, LauncherSettings *settings, void *context) { +bool set_time_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { uint8_t current_page = *((uint8_t *)context); const uint8_t days_in_month[12] = {31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31}; watch_date_time date_time = watch_rtc_get_date_time(); @@ -101,7 +101,7 @@ bool set_time_face_loop(LauncherEvent event, LauncherSettings *settings, void *c return true; } -void set_time_face_resign(LauncherSettings *settings, void *context) { +void set_time_face_resign(movement_settings_t *settings, void *context) { (void) settings; (void) context; watch_set_led_off(); diff --git a/movement/watch_faces/settings/set_time_face.h b/movement/watch_faces/settings/set_time_face.h index 0c34d6b2..b330d852 100644 --- a/movement/watch_faces/settings/set_time_face.h +++ b/movement/watch_faces/settings/set_time_face.h @@ -3,10 +3,10 @@ #include "movement.h" -void set_time_face_setup(LauncherSettings *settings, void ** context_ptr); -void set_time_face_activate(LauncherSettings *settings, void *context); -bool set_time_face_loop(LauncherEvent event, LauncherSettings *settings, void *context); -void set_time_face_resign(LauncherSettings *settings, void *context); +void set_time_face_setup(movement_settings_t *settings, void ** context_ptr); +void set_time_face_activate(movement_settings_t *settings, void *context); +bool set_time_face_loop(movement_event_t event, movement_settings_t *settings, void *context); +void set_time_face_resign(movement_settings_t *settings, void *context); #define set_time_face { \ set_time_face_setup, \ -- cgit v1.2.3 From 3e539a9e6362841b9cd5924f0d309ec15b2698b1 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sat, 16 Oct 2021 13:40:17 -0400 Subject: screensaver mode is now low energy mode --- movement/watch_faces/clock/simple_clock_face.c | 8 ++++---- movement/watch_faces/settings/preferences_face.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index bdee7dec..6e58313a 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -28,16 +28,16 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting switch (event.event_type) { case EVENT_ACTIVATE: case EVENT_TICK: - case EVENT_SCREENSAVER: + case EVENT_LOW_POWER_TICK: date_time = watch_rtc_get_date_time(); previous_date_time = *((uint32_t *)context); *((uint32_t *)context) = date_time.reg; - if (date_time.reg >> 6 == previous_date_time >> 6 && event.event_type != EVENT_SCREENSAVER) { + if (date_time.reg >> 6 == previous_date_time >> 6 && event.event_type != EVENT_LOW_POWER_TICK) { // everything before seconds is the same, don't waste cycles setting those segments. pos = 8; sprintf(buf, "%02d", date_time.unit.second); - } else if (date_time.reg >> 12 == previous_date_time >> 12 && event.event_type != EVENT_SCREENSAVER) { + } else if (date_time.reg >> 12 == previous_date_time >> 12 && event.event_type != EVENT_LOW_POWER_TICK) { // everything before minutes is the same. pos = 6; sprintf(buf, "%02d%02d", date_time.unit.minute, date_time.unit.second); @@ -54,7 +54,7 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting if (date_time.unit.hour == 0) date_time.unit.hour = 12; } pos = 0; - if (event.event_type == EVENT_SCREENSAVER) { + if (event.event_type == EVENT_LOW_POWER_TICK) { sprintf(buf, "%s%2d%2d%02d ", weekdays[simple_clock_face_get_weekday(date_time.unit.year, date_time.unit.month, date_time.unit.day)], date_time.unit.day, date_time.unit.hour, date_time.unit.minute); } else { sprintf(buf, "%s%2d%2d%02d%02d", weekdays[simple_clock_face_get_weekday(date_time.unit.year, date_time.unit.month, date_time.unit.day)], date_time.unit.day, date_time.unit.hour, date_time.unit.minute, date_time.unit.second); diff --git a/movement/watch_faces/settings/preferences_face.c b/movement/watch_faces/settings/preferences_face.c index 18dff6cd..c3b7663c 100644 --- a/movement/watch_faces/settings/preferences_face.c +++ b/movement/watch_faces/settings/preferences_face.c @@ -37,7 +37,7 @@ bool preferences_face_loop(movement_event_t event, movement_settings_t *settings settings->bit.button_should_sound = !(settings->bit.button_should_sound); break; case 2: - settings->bit.screensaver_interval = settings->bit.screensaver_interval + 1; + settings->bit.le_inactivity_interval = settings->bit.le_inactivity_interval + 1; break; case 3: settings->bit.led_green_color = settings->bit.led_green_color + 1; @@ -65,7 +65,7 @@ bool preferences_face_loop(movement_event_t event, movement_settings_t *settings else watch_display_string("n", 9); break; case 2: - switch (settings->bit.screensaver_interval) { + switch (settings->bit.le_inactivity_interval) { case 0: watch_display_string(" never", 4); break; -- cgit v1.2.3 From 0cfb37c6716326dea78a8dca512d286e6484e509 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sat, 16 Oct 2021 16:03:27 -0400 Subject: early work on background tasks, documentation --- movement/watch_faces/clock/simple_clock_face.c | 8 ++++---- movement/watch_faces/clock/simple_clock_face.h | 1 + movement/watch_faces/complications/pulseometer_face.h | 1 + movement/watch_faces/settings/preferences_face.h | 1 + movement/watch_faces/settings/set_time_face.h | 1 + 5 files changed, 8 insertions(+), 4 deletions(-) (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index 6e58313a..351c7ebc 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -28,16 +28,16 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting switch (event.event_type) { case EVENT_ACTIVATE: case EVENT_TICK: - case EVENT_LOW_POWER_TICK: + case EVENT_LOW_ENERGY_UPDATE: date_time = watch_rtc_get_date_time(); previous_date_time = *((uint32_t *)context); *((uint32_t *)context) = date_time.reg; - if (date_time.reg >> 6 == previous_date_time >> 6 && event.event_type != EVENT_LOW_POWER_TICK) { + if (date_time.reg >> 6 == previous_date_time >> 6 && event.event_type != EVENT_LOW_ENERGY_UPDATE) { // everything before seconds is the same, don't waste cycles setting those segments. pos = 8; sprintf(buf, "%02d", date_time.unit.second); - } else if (date_time.reg >> 12 == previous_date_time >> 12 && event.event_type != EVENT_LOW_POWER_TICK) { + } else if (date_time.reg >> 12 == previous_date_time >> 12 && event.event_type != EVENT_LOW_ENERGY_UPDATE) { // everything before minutes is the same. pos = 6; sprintf(buf, "%02d%02d", date_time.unit.minute, date_time.unit.second); @@ -54,7 +54,7 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting if (date_time.unit.hour == 0) date_time.unit.hour = 12; } pos = 0; - if (event.event_type == EVENT_LOW_POWER_TICK) { + if (event.event_type == EVENT_LOW_ENERGY_UPDATE) { sprintf(buf, "%s%2d%2d%02d ", weekdays[simple_clock_face_get_weekday(date_time.unit.year, date_time.unit.month, date_time.unit.day)], date_time.unit.day, date_time.unit.hour, date_time.unit.minute); } else { sprintf(buf, "%s%2d%2d%02d%02d", weekdays[simple_clock_face_get_weekday(date_time.unit.year, date_time.unit.month, date_time.unit.day)], date_time.unit.day, date_time.unit.hour, date_time.unit.minute, date_time.unit.second); diff --git a/movement/watch_faces/clock/simple_clock_face.h b/movement/watch_faces/clock/simple_clock_face.h index 3cdc09e8..7daaba3e 100644 --- a/movement/watch_faces/clock/simple_clock_face.h +++ b/movement/watch_faces/clock/simple_clock_face.h @@ -15,6 +15,7 @@ uint8_t simple_clock_face_get_weekday(uint16_t day, uint16_t month, uint16_t yea simple_clock_face_activate, \ simple_clock_face_loop, \ simple_clock_face_resign, \ + NULL, \ } #endif // FAKE_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/complications/pulseometer_face.h b/movement/watch_faces/complications/pulseometer_face.h index f8e69d27..5a9c66b0 100644 --- a/movement/watch_faces/complications/pulseometer_face.h +++ b/movement/watch_faces/complications/pulseometer_face.h @@ -19,6 +19,7 @@ void pulseometer_face_resign(movement_settings_t *settings, void *context); pulseometer_face_activate, \ pulseometer_face_loop, \ pulseometer_face_resign, \ + NULL, \ } #endif // PULSEOMETER_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/settings/preferences_face.h b/movement/watch_faces/settings/preferences_face.h index c8f1a14e..5b735db9 100644 --- a/movement/watch_faces/settings/preferences_face.h +++ b/movement/watch_faces/settings/preferences_face.h @@ -13,6 +13,7 @@ void preferences_face_resign(movement_settings_t *settings, void *context); preferences_face_activate, \ preferences_face_loop, \ preferences_face_resign, \ + NULL, \ } #endif // PREFERENCES_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/settings/set_time_face.h b/movement/watch_faces/settings/set_time_face.h index b330d852..06dbe2ce 100644 --- a/movement/watch_faces/settings/set_time_face.h +++ b/movement/watch_faces/settings/set_time_face.h @@ -13,6 +13,7 @@ void set_time_face_resign(movement_settings_t *settings, void *context); set_time_face_activate, \ set_time_face_loop, \ set_time_face_resign, \ + NULL, \ } #endif // SET_TIME_FACE_H_ -- cgit v1.2.3 From 05fe055f99b9b950086b1e38a9c795d7e076c5b2 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sat, 16 Oct 2021 16:25:30 -0400 Subject: automatically determine number of watch faces --- movement/watch_faces/clock/simple_clock_face.h | 16 ++++++++-------- movement/watch_faces/complications/pulseometer_face.h | 14 +++++++------- movement/watch_faces/settings/preferences_face.h | 14 +++++++------- movement/watch_faces/settings/set_time_face.h | 14 +++++++------- 4 files changed, 29 insertions(+), 29 deletions(-) (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/clock/simple_clock_face.h b/movement/watch_faces/clock/simple_clock_face.h index 7daaba3e..3db894d2 100644 --- a/movement/watch_faces/clock/simple_clock_face.h +++ b/movement/watch_faces/clock/simple_clock_face.h @@ -10,12 +10,12 @@ void simple_clock_face_resign(movement_settings_t *settings, void *context); uint8_t simple_clock_face_get_weekday(uint16_t day, uint16_t month, uint16_t year); -#define simple_clock_face { \ - simple_clock_face_setup, \ - simple_clock_face_activate, \ - simple_clock_face_loop, \ - simple_clock_face_resign, \ - NULL, \ -} +static const watch_face_t simple_clock_face = { + simple_clock_face_setup, + simple_clock_face_activate, + simple_clock_face_loop, + simple_clock_face_resign, + NULL +}; -#endif // FAKE_FACE_H_ \ No newline at end of file +#endif // SIMPLE_CLOCK_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/complications/pulseometer_face.h b/movement/watch_faces/complications/pulseometer_face.h index 5a9c66b0..52bccf24 100644 --- a/movement/watch_faces/complications/pulseometer_face.h +++ b/movement/watch_faces/complications/pulseometer_face.h @@ -14,12 +14,12 @@ void pulseometer_face_activate(movement_settings_t *settings, void *context); bool pulseometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context); void pulseometer_face_resign(movement_settings_t *settings, void *context); -#define pulseometer_face { \ - pulseometer_face_setup, \ - pulseometer_face_activate, \ - pulseometer_face_loop, \ - pulseometer_face_resign, \ - NULL, \ -} +static const watch_face_t pulseometer_face = { + pulseometer_face_setup, + pulseometer_face_activate, + pulseometer_face_loop, + pulseometer_face_resign, + NULL +}; #endif // PULSEOMETER_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/settings/preferences_face.h b/movement/watch_faces/settings/preferences_face.h index 5b735db9..af628ba3 100644 --- a/movement/watch_faces/settings/preferences_face.h +++ b/movement/watch_faces/settings/preferences_face.h @@ -8,12 +8,12 @@ void preferences_face_activate(movement_settings_t *settings, void *context); bool preferences_face_loop(movement_event_t event, movement_settings_t *settings, void *context); void preferences_face_resign(movement_settings_t *settings, void *context); -#define preferences_face { \ - preferences_face_setup, \ - preferences_face_activate, \ - preferences_face_loop, \ - preferences_face_resign, \ - NULL, \ -} +static const watch_face_t preferences_face = { + preferences_face_setup, + preferences_face_activate, + preferences_face_loop, + preferences_face_resign, + NULL +}; #endif // PREFERENCES_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/settings/set_time_face.h b/movement/watch_faces/settings/set_time_face.h index 06dbe2ce..21fb1e44 100644 --- a/movement/watch_faces/settings/set_time_face.h +++ b/movement/watch_faces/settings/set_time_face.h @@ -8,12 +8,12 @@ void set_time_face_activate(movement_settings_t *settings, void *context); bool set_time_face_loop(movement_event_t event, movement_settings_t *settings, void *context); void set_time_face_resign(movement_settings_t *settings, void *context); -#define set_time_face { \ - set_time_face_setup, \ - set_time_face_activate, \ - set_time_face_loop, \ - set_time_face_resign, \ - NULL, \ -} +static const watch_face_t set_time_face = { + set_time_face_setup, + set_time_face_activate, + set_time_face_loop, + set_time_face_resign, + NULL +}; #endif // SET_TIME_FACE_H_ -- cgit v1.2.3 From c27dbc779b252c32370e2cd34a22f51d120d0f38 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sat, 16 Oct 2021 16:51:36 -0400 Subject: fix misspelling of pulsometer --- .../watch_faces/complications/pulseometer_face.c | 87 ---------------------- .../watch_faces/complications/pulseometer_face.h | 25 ------- .../watch_faces/complications/pulsometer_face.c | 87 ++++++++++++++++++++++ .../watch_faces/complications/pulsometer_face.h | 25 +++++++ 4 files changed, 112 insertions(+), 112 deletions(-) delete mode 100644 movement/watch_faces/complications/pulseometer_face.c delete mode 100644 movement/watch_faces/complications/pulseometer_face.h create mode 100644 movement/watch_faces/complications/pulsometer_face.c create mode 100644 movement/watch_faces/complications/pulsometer_face.h (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/complications/pulseometer_face.c b/movement/watch_faces/complications/pulseometer_face.c deleted file mode 100644 index 7c524b8d..00000000 --- a/movement/watch_faces/complications/pulseometer_face.c +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include -#include "pulseometer_face.h" -#include "watch.h" - -#define PULSOMETER_FACE_FREQUENCY_FACTOR (4ul) // refresh rate will be 2 to this power Hz (0 for 1 Hz, 2 for 4 Hz, etc.) -#define PULSOMETER_FACE_FREQUENCY (1 << PULSOMETER_FACE_FREQUENCY_FACTOR) - -void pulseometer_face_setup(movement_settings_t *settings, void ** context_ptr) { - (void) settings; - if (*context_ptr == NULL) *context_ptr = malloc(sizeof(PulsometerState)); -} - -void pulseometer_face_activate(movement_settings_t *settings, void *context) { - (void) settings; - memset(context, 0, sizeof(PulsometerState)); -} - -bool pulseometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { - printf("pulseometer_face_loop\n"); - (void) settings; - PulsometerState *pulsometer_state = (PulsometerState *)context; - char buf[14]; - switch (event.event_type) { - case EVENT_TICK: - if (pulsometer_state->pulse == 0 && !pulsometer_state->measuring) { - switch (pulsometer_state->ticks % 5) { - case 0: - watch_display_string(" Hold ", 2); - break; - case 1: - watch_display_string(" Alarn", 4); - break; - case 2: - watch_display_string("+ Count ", 0); - break; - case 3: - watch_display_string(" 30Beats ", 0); - break; - case 4: - watch_clear_display(); - break; - } - pulsometer_state->ticks = (pulsometer_state->ticks + 1) % 5; - } else { - if (pulsometer_state->measuring && pulsometer_state->ticks) { - pulsometer_state->pulse = (int16_t)((30.0 * ((float)(60 << PULSOMETER_FACE_FREQUENCY_FACTOR) / (float)pulsometer_state->ticks)) + 0.5); - } - if (pulsometer_state->pulse > 240) { - watch_display_string(" Hi", 0); - } else if (pulsometer_state->pulse < 40) { - watch_display_string(" Lo", 0); - } else { - sprintf(buf, " %-3dbpn", pulsometer_state->pulse); - watch_display_string(buf, 0); - } - if (pulsometer_state->measuring) pulsometer_state->ticks++; - } - return false; - case EVENT_MODE_BUTTON_UP: - movement_move_to_next_face(); - return false; - case EVENT_LIGHT_BUTTON_UP: - movement_illuminate_led(); - break; - case EVENT_ALARM_BUTTON_DOWN: - pulsometer_state->ticks = 0; - pulsometer_state->pulse = 0xFFFF; - pulsometer_state->measuring = true; - movement_request_tick_frequency(PULSOMETER_FACE_FREQUENCY); - break; - case EVENT_ALARM_BUTTON_UP: - case EVENT_ALARM_LONG_PRESS: - pulsometer_state->measuring = false; - movement_request_tick_frequency(1); - break; - default: - break; - } - - return true; -} - -void pulseometer_face_resign(movement_settings_t *settings, void *context) { - (void) settings; - (void) context; -} diff --git a/movement/watch_faces/complications/pulseometer_face.h b/movement/watch_faces/complications/pulseometer_face.h deleted file mode 100644 index 52bccf24..00000000 --- a/movement/watch_faces/complications/pulseometer_face.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef PULSEOMETER_FACE_H_ -#define PULSEOMETER_FACE_H_ - -#include "movement.h" - -typedef struct { - bool measuring; - int16_t pulse; - int16_t ticks; -} PulsometerState; - -void pulseometer_face_setup(movement_settings_t *settings, void ** context_ptr); -void pulseometer_face_activate(movement_settings_t *settings, void *context); -bool pulseometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context); -void pulseometer_face_resign(movement_settings_t *settings, void *context); - -static const watch_face_t pulseometer_face = { - pulseometer_face_setup, - pulseometer_face_activate, - pulseometer_face_loop, - pulseometer_face_resign, - NULL -}; - -#endif // PULSEOMETER_FACE_H_ \ No newline at end of file diff --git a/movement/watch_faces/complications/pulsometer_face.c b/movement/watch_faces/complications/pulsometer_face.c new file mode 100644 index 00000000..dffdcd35 --- /dev/null +++ b/movement/watch_faces/complications/pulsometer_face.c @@ -0,0 +1,87 @@ +#include +#include +#include "pulsometer_face.h" +#include "watch.h" + +#define PULSOMETER_FACE_FREQUENCY_FACTOR (4ul) // refresh rate will be 2 to this power Hz (0 for 1 Hz, 2 for 4 Hz, etc.) +#define PULSOMETER_FACE_FREQUENCY (1 << PULSOMETER_FACE_FREQUENCY_FACTOR) + +void pulsometer_face_setup(movement_settings_t *settings, void ** context_ptr) { + (void) settings; + if (*context_ptr == NULL) *context_ptr = malloc(sizeof(PulsometerState)); +} + +void pulsometer_face_activate(movement_settings_t *settings, void *context) { + (void) settings; + memset(context, 0, sizeof(PulsometerState)); +} + +bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { + printf("pulsometer_face_loop\n"); + (void) settings; + PulsometerState *pulsometer_state = (PulsometerState *)context; + char buf[14]; + switch (event.event_type) { + case EVENT_TICK: + if (pulsometer_state->pulse == 0 && !pulsometer_state->measuring) { + switch (pulsometer_state->ticks % 5) { + case 0: + watch_display_string(" Hold ", 2); + break; + case 1: + watch_display_string(" Alarn", 4); + break; + case 2: + watch_display_string("+ Count ", 0); + break; + case 3: + watch_display_string(" 30Beats ", 0); + break; + case 4: + watch_clear_display(); + break; + } + pulsometer_state->ticks = (pulsometer_state->ticks + 1) % 5; + } else { + if (pulsometer_state->measuring && pulsometer_state->ticks) { + pulsometer_state->pulse = (int16_t)((30.0 * ((float)(60 << PULSOMETER_FACE_FREQUENCY_FACTOR) / (float)pulsometer_state->ticks)) + 0.5); + } + if (pulsometer_state->pulse > 240) { + watch_display_string(" Hi", 0); + } else if (pulsometer_state->pulse < 40) { + watch_display_string(" Lo", 0); + } else { + sprintf(buf, " %-3dbpn", pulsometer_state->pulse); + watch_display_string(buf, 0); + } + if (pulsometer_state->measuring) pulsometer_state->ticks++; + } + return false; + case EVENT_MODE_BUTTON_UP: + movement_move_to_next_face(); + return false; + case EVENT_LIGHT_BUTTON_UP: + movement_illuminate_led(); + break; + case EVENT_ALARM_BUTTON_DOWN: + pulsometer_state->ticks = 0; + pulsometer_state->pulse = 0xFFFF; + pulsometer_state->measuring = true; + movement_request_tick_frequency(PULSOMETER_FACE_FREQUENCY); + break; + case EVENT_ALARM_BUTTON_UP: + case EVENT_ALARM_LONG_PRESS: + pulsometer_state->measuring = false; + movement_request_tick_frequency(1); + break; + default: + break; + } + + return true; +} + +void pulsometer_face_resign(movement_settings_t *settings, void *context) { + (void) settings; + (void) context; +} diff --git a/movement/watch_faces/complications/pulsometer_face.h b/movement/watch_faces/complications/pulsometer_face.h new file mode 100644 index 00000000..76af8257 --- /dev/null +++ b/movement/watch_faces/complications/pulsometer_face.h @@ -0,0 +1,25 @@ +#ifndef PULSOMETER_FACE_H_ +#define PULSOMETER_FACE_H_ + +#include "movement.h" + +typedef struct { + bool measuring; + int16_t pulse; + int16_t ticks; +} PulsometerState; + +void pulsometer_face_setup(movement_settings_t *settings, void ** context_ptr); +void pulsometer_face_activate(movement_settings_t *settings, void *context); +bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context); +void pulsometer_face_resign(movement_settings_t *settings, void *context); + +static const watch_face_t pulsometer_face = { + pulsometer_face_setup, + pulsometer_face_activate, + pulsometer_face_loop, + pulsometer_face_resign, + NULL +}; + +#endif // PULSOMETER_FACE_H_ \ No newline at end of file -- cgit v1.2.3 From b4d4f62ba8ec4f5983a639ddd0e0089cebe380e4 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Mon, 18 Oct 2021 11:15:45 -0400 Subject: pulsometer: reset tick in resign function --- movement/watch_faces/complications/pulsometer_face.c | 1 + 1 file changed, 1 insertion(+) (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/complications/pulsometer_face.c b/movement/watch_faces/complications/pulsometer_face.c index dffdcd35..396ac0dd 100644 --- a/movement/watch_faces/complications/pulsometer_face.c +++ b/movement/watch_faces/complications/pulsometer_face.c @@ -84,4 +84,5 @@ bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, void pulsometer_face_resign(movement_settings_t *settings, void *context) { (void) settings; (void) context; + movement_request_tick_frequency(1); } -- cgit v1.2.3 From 8dbbe92a9bad950219c4bc1a46871f44dda5fef3 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Mon, 18 Oct 2021 11:27:36 -0400 Subject: pulsometer: make type more c-like --- movement/watch_faces/complications/pulsometer_face.c | 6 +++--- movement/watch_faces/complications/pulsometer_face.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/complications/pulsometer_face.c b/movement/watch_faces/complications/pulsometer_face.c index 396ac0dd..db5c5d0e 100644 --- a/movement/watch_faces/complications/pulsometer_face.c +++ b/movement/watch_faces/complications/pulsometer_face.c @@ -8,18 +8,18 @@ void pulsometer_face_setup(movement_settings_t *settings, void ** context_ptr) { (void) settings; - if (*context_ptr == NULL) *context_ptr = malloc(sizeof(PulsometerState)); + if (*context_ptr == NULL) *context_ptr = malloc(sizeof(pulsometer_state_t)); } void pulsometer_face_activate(movement_settings_t *settings, void *context) { (void) settings; - memset(context, 0, sizeof(PulsometerState)); + memset(context, 0, sizeof(pulsometer_state_t)); } bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { printf("pulsometer_face_loop\n"); (void) settings; - PulsometerState *pulsometer_state = (PulsometerState *)context; + pulsometer_state_t *pulsometer_state = (pulsometer_state_t *)context; char buf[14]; switch (event.event_type) { case EVENT_TICK: diff --git a/movement/watch_faces/complications/pulsometer_face.h b/movement/watch_faces/complications/pulsometer_face.h index 76af8257..cdb5b977 100644 --- a/movement/watch_faces/complications/pulsometer_face.h +++ b/movement/watch_faces/complications/pulsometer_face.h @@ -7,7 +7,7 @@ typedef struct { bool measuring; int16_t pulse; int16_t ticks; -} PulsometerState; +} pulsometer_state_t; void pulsometer_face_setup(movement_settings_t *settings, void ** context_ptr); void pulsometer_face_activate(movement_settings_t *settings, void *context); -- cgit v1.2.3 From 93624f0b692648eac415a3df5689de6dee06c2db Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Mon, 18 Oct 2021 12:15:57 -0400 Subject: add timeout event to give faces a chance to resign --- movement/watch_faces/clock/simple_clock_face.c | 2 +- movement/watch_faces/complications/pulsometer_face.c | 4 +++- movement/watch_faces/settings/preferences_face.c | 4 +++- movement/watch_faces/settings/set_time_face.c | 3 +++ 4 files changed, 10 insertions(+), 3 deletions(-) (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index 351c7ebc..95db3901 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -18,7 +18,6 @@ void simple_clock_face_activate(movement_settings_t *settings, void *context) { } bool simple_clock_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { - printf("simple_clock_face_loop\n"); const char weekdays[7][3] = {"SA", "SU", "MO", "TU", "WE", "TH", "FR"}; char buf[11]; uint8_t pos; @@ -28,6 +27,7 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting switch (event.event_type) { case EVENT_ACTIVATE: case EVENT_TICK: + case EVENT_TIMEOUT: case EVENT_LOW_ENERGY_UPDATE: date_time = watch_rtc_get_date_time(); previous_date_time = *((uint32_t *)context); diff --git a/movement/watch_faces/complications/pulsometer_face.c b/movement/watch_faces/complications/pulsometer_face.c index db5c5d0e..e54b4551 100644 --- a/movement/watch_faces/complications/pulsometer_face.c +++ b/movement/watch_faces/complications/pulsometer_face.c @@ -17,7 +17,6 @@ void pulsometer_face_activate(movement_settings_t *settings, void *context) { } bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { - printf("pulsometer_face_loop\n"); (void) settings; pulsometer_state_t *pulsometer_state = (pulsometer_state_t *)context; char buf[14]; @@ -74,6 +73,9 @@ bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, pulsometer_state->measuring = false; movement_request_tick_frequency(1); break; + case EVENT_TIMEOUT: + movement_move_to_face(0); + break; default: break; } diff --git a/movement/watch_faces/settings/preferences_face.c b/movement/watch_faces/settings/preferences_face.c index c3b7663c..98a2372d 100644 --- a/movement/watch_faces/settings/preferences_face.c +++ b/movement/watch_faces/settings/preferences_face.c @@ -17,7 +17,6 @@ void preferences_face_activate(movement_settings_t *settings, void *context) { } bool preferences_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { - printf("preferences_face_loop\n"); uint8_t current_page = *((uint8_t *)context); switch (event.event_type) { case EVENT_MODE_BUTTON_UP: @@ -47,6 +46,9 @@ bool preferences_face_loop(movement_event_t event, movement_settings_t *settings break; } break; + case EVENT_TIMEOUT: + movement_move_to_face(0); + break; default: break; } diff --git a/movement/watch_faces/settings/set_time_face.c b/movement/watch_faces/settings/set_time_face.c index 7bb63d0b..6b82c68b 100644 --- a/movement/watch_faces/settings/set_time_face.c +++ b/movement/watch_faces/settings/set_time_face.c @@ -58,6 +58,9 @@ bool set_time_face_loop(movement_event_t event, movement_settings_t *settings, v } watch_rtc_set_date_time(date_time); break; + case EVENT_TIMEOUT: + movement_move_to_face(0); + break; default: break; } -- cgit v1.2.3 From 1db9e18b927a45b6f93279ee6b9929679f0a9cc5 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Mon, 18 Oct 2021 12:31:44 -0400 Subject: pulsometer: rearrange switch for clarity --- .../watch_faces/complications/pulsometer_face.c | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'movement/watch_faces') diff --git a/movement/watch_faces/complications/pulsometer_face.c b/movement/watch_faces/complications/pulsometer_face.c index e54b4551..abe002fb 100644 --- a/movement/watch_faces/complications/pulsometer_face.c +++ b/movement/watch_faces/complications/pulsometer_face.c @@ -21,6 +21,23 @@ bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, pulsometer_state_t *pulsometer_state = (pulsometer_state_t *)context; char buf[14]; switch (event.event_type) { + case EVENT_MODE_BUTTON_UP: + movement_move_to_next_face(); + break; + case EVENT_LIGHT_BUTTON_UP: + movement_illuminate_led(); + break; + case EVENT_ALARM_BUTTON_DOWN: + pulsometer_state->measuring = true; + pulsometer_state->pulse = 0xFFFF; + pulsometer_state->ticks = 0; + movement_request_tick_frequency(PULSOMETER_FACE_FREQUENCY); + break; + case EVENT_ALARM_BUTTON_UP: + case EVENT_ALARM_LONG_PRESS: + pulsometer_state->measuring = false; + movement_request_tick_frequency(1); + break; case EVENT_TICK: if (pulsometer_state->pulse == 0 && !pulsometer_state->measuring) { switch (pulsometer_state->ticks % 5) { @@ -55,23 +72,6 @@ bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, } if (pulsometer_state->measuring) pulsometer_state->ticks++; } - return false; - case EVENT_MODE_BUTTON_UP: - movement_move_to_next_face(); - return false; - case EVENT_LIGHT_BUTTON_UP: - movement_illuminate_led(); - break; - case EVENT_ALARM_BUTTON_DOWN: - pulsometer_state->ticks = 0; - pulsometer_state->pulse = 0xFFFF; - pulsometer_state->measuring = true; - movement_request_tick_frequency(PULSOMETER_FACE_FREQUENCY); - break; - case EVENT_ALARM_BUTTON_UP: - case EVENT_ALARM_LONG_PRESS: - pulsometer_state->measuring = false; - movement_request_tick_frequency(1); break; case EVENT_TIMEOUT: movement_move_to_face(0); -- cgit v1.2.3