From 613f17fe3c6922d73a089303a5844e152fb62990 Mon Sep 17 00:00:00 2001 From: David Volovskiy Date: Tue, 10 Sep 2024 08:41:30 -0400 Subject: [PATCH] If the sunrise function does not run correctly, then don't chime --- movement/watch_faces/clock/clock_face.c | 20 ++++++++----------- .../clock/minute_repeater_decimal_face.c | 20 ++++++++----------- .../clock/repetition_minute_face.c | 20 ++++++++----------- .../clock/simple_clock_bin_led_face.c | 20 ++++++++----------- .../watch_faces/clock/simple_clock_face.c | 20 ++++++++----------- .../watch_faces/clock/weeknumber_clock_face.c | 20 ++++++++----------- 6 files changed, 48 insertions(+), 72 deletions(-) diff --git a/movement/watch_faces/clock/clock_face.c b/movement/watch_faces/clock/clock_face.c index 430ff71be..01d0e9fb8 100644 --- a/movement/watch_faces/clock/clock_face.c +++ b/movement/watch_faces/clock/clock_face.c @@ -53,11 +53,6 @@ typedef struct { bool battery_low; } clock_state_t; -static void _load_default_chime_times(uint8_t hourly_chime_start, uint8_t hourly_chime_end, uint8_t *start_hour, uint8_t *end_hour) { - *start_hour = Hourly_Chime_Start[hourly_chime_start]; - *end_hour = Hourly_Chime_End[hourly_chime_end]; -} - static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_end_of_hour) { time += hours_from_utc; uint8_t hour_to_start = (uint8_t)time; @@ -69,17 +64,18 @@ static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_ } static void _get_chime_times(watch_date_time date_time, movement_settings_t *settings, uint8_t *start_hour, uint8_t *end_hour) { + uint8_t init_val = 0xFF; uint8_t hourly_chime_start = settings->bit.hourly_chime_start; uint8_t hourly_chime_end = settings->bit.hourly_chime_end; + *start_hour = (hourly_chime_start == 3) ? init_val : Hourly_Chime_Start[hourly_chime_start]; + *end_hour = (hourly_chime_end == 3) ? init_val : Hourly_Chime_End[hourly_chime_end]; if (hourly_chime_start != 3 && hourly_chime_end != 3) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } int16_t tz = movement_timezone_offsets[settings->bit.time_zone]; watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC movement_location_t movement_location = (movement_location_t) watch_get_backup_data(1); if (movement_location.reg == 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } double rise, set; @@ -89,13 +85,14 @@ static void _get_chime_times(watch_date_time date_time, movement_settings_t *set double hours_from_utc = ((double)tz) / 60.0; uint8_t result = sun_rise_set(utc_now.unit.year + WATCH_RTC_REFERENCE_YEAR, utc_now.unit.month, utc_now.unit.day, lon, lat, &rise, &set); if (result != 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } rise_hour = _time_to_chime_hour(rise, hours_from_utc, true); set_hour = _time_to_chime_hour(set, hours_from_utc, false); - *start_hour = (hourly_chime_start == 3) ? rise_hour : Hourly_Chime_Start[hourly_chime_start]; - *end_hour = (hourly_chime_end == 3) ? set_hour : Hourly_Chime_End[hourly_chime_end]; + if (*start_hour == init_val) *start_hour = rise_hour; + if (*end_hour == init_val) *end_hour = set_hour; + if (*start_hour == 0) *start_hour = 24; + if (*end_hour == 0) *end_hour = 24; } static bool clock_is_in_24h_mode(movement_settings_t *settings) { @@ -335,8 +332,7 @@ bool clock_face_wants_background_task(movement_settings_t *settings, void *conte if (settings->bit.hourly_chime_always) return true; uint8_t chime_start, chime_end; _get_chime_times(date_time, settings, &chime_start, &chime_end); - if (chime_end == 0) chime_end = 24; - if (date_time.unit.hour < chime_start || date_time.unit.hour >= chime_end) return false; + if ((24 >= chime_start && date_time.unit.hour < chime_start) || (24 >= chime_end && date_time.unit.hour >= chime_end)) return false; return true; } diff --git a/movement/watch_faces/clock/minute_repeater_decimal_face.c b/movement/watch_faces/clock/minute_repeater_decimal_face.c index b12b4a3a2..e9f94a2b7 100644 --- a/movement/watch_faces/clock/minute_repeater_decimal_face.c +++ b/movement/watch_faces/clock/minute_repeater_decimal_face.c @@ -44,11 +44,6 @@ #include "watch_private_display.h" #include "sunriset.h" -static void _load_default_chime_times(uint8_t hourly_chime_start, uint8_t hourly_chime_end, uint8_t *start_hour, uint8_t *end_hour) { - *start_hour = Hourly_Chime_Start[hourly_chime_start]; - *end_hour = Hourly_Chime_End[hourly_chime_end]; -} - static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_end_of_hour) { time += hours_from_utc; uint8_t hour_to_start = (uint8_t)time; @@ -60,17 +55,18 @@ static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_ } static void _get_chime_times(watch_date_time date_time, movement_settings_t *settings, uint8_t *start_hour, uint8_t *end_hour) { + uint8_t init_val = 0xFF; uint8_t hourly_chime_start = settings->bit.hourly_chime_start; uint8_t hourly_chime_end = settings->bit.hourly_chime_end; + *start_hour = (hourly_chime_start == 3) ? init_val : Hourly_Chime_Start[hourly_chime_start]; + *end_hour = (hourly_chime_end == 3) ? init_val : Hourly_Chime_End[hourly_chime_end]; if (hourly_chime_start != 3 && hourly_chime_end != 3) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } int16_t tz = movement_timezone_offsets[settings->bit.time_zone]; watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC movement_location_t movement_location = (movement_location_t) watch_get_backup_data(1); if (movement_location.reg == 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } double rise, set; @@ -80,13 +76,14 @@ static void _get_chime_times(watch_date_time date_time, movement_settings_t *set double hours_from_utc = ((double)tz) / 60.0; uint8_t result = sun_rise_set(utc_now.unit.year + WATCH_RTC_REFERENCE_YEAR, utc_now.unit.month, utc_now.unit.day, lon, lat, &rise, &set); if (result != 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } rise_hour = _time_to_chime_hour(rise, hours_from_utc, true); set_hour = _time_to_chime_hour(set, hours_from_utc, false); - *start_hour = (hourly_chime_start == 3) ? rise_hour : Hourly_Chime_Start[hourly_chime_start]; - *end_hour = (hourly_chime_end == 3) ? set_hour : Hourly_Chime_End[hourly_chime_end]; + if (*start_hour == init_val) *start_hour = rise_hour; + if (*end_hour == init_val) *end_hour = set_hour; + if (*start_hour == 0) *start_hour = 24; + if (*end_hour == 0) *end_hour = 24; } void mrd_play_hour_chime(void) { @@ -283,8 +280,7 @@ bool minute_repeater_decimal_face_wants_background_task(movement_settings_t *set if (settings->bit.hourly_chime_always) return true; uint8_t chime_start, chime_end; _get_chime_times(date_time, settings, &chime_start, &chime_end); - if (chime_end == 0) chime_end = 24; - if (date_time.unit.hour < chime_start || date_time.unit.hour >= chime_end) return false; + if ((24 >= chime_start && date_time.unit.hour < chime_start) || (24 >= chime_end && date_time.unit.hour >= chime_end)) return false; return true; } diff --git a/movement/watch_faces/clock/repetition_minute_face.c b/movement/watch_faces/clock/repetition_minute_face.c index 76cc2930f..ff4ac8466 100644 --- a/movement/watch_faces/clock/repetition_minute_face.c +++ b/movement/watch_faces/clock/repetition_minute_face.c @@ -29,11 +29,6 @@ #include "watch_private_display.h" #include "sunriset.h" -static void _load_default_chime_times(uint8_t hourly_chime_start, uint8_t hourly_chime_end, uint8_t *start_hour, uint8_t *end_hour) { - *start_hour = Hourly_Chime_Start[hourly_chime_start]; - *end_hour = Hourly_Chime_End[hourly_chime_end]; -} - static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_end_of_hour) { time += hours_from_utc; uint8_t hour_to_start = (uint8_t)time; @@ -45,17 +40,18 @@ static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_ } static void _get_chime_times(watch_date_time date_time, movement_settings_t *settings, uint8_t *start_hour, uint8_t *end_hour) { + uint8_t init_val = 0xFF; uint8_t hourly_chime_start = settings->bit.hourly_chime_start; uint8_t hourly_chime_end = settings->bit.hourly_chime_end; + *start_hour = (hourly_chime_start == 3) ? init_val : Hourly_Chime_Start[hourly_chime_start]; + *end_hour = (hourly_chime_end == 3) ? init_val : Hourly_Chime_End[hourly_chime_end]; if (hourly_chime_start != 3 && hourly_chime_end != 3) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } int16_t tz = movement_timezone_offsets[settings->bit.time_zone]; watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC movement_location_t movement_location = (movement_location_t) watch_get_backup_data(1); if (movement_location.reg == 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } double rise, set; @@ -65,13 +61,14 @@ static void _get_chime_times(watch_date_time date_time, movement_settings_t *set double hours_from_utc = ((double)tz) / 60.0; uint8_t result = sun_rise_set(utc_now.unit.year + WATCH_RTC_REFERENCE_YEAR, utc_now.unit.month, utc_now.unit.day, lon, lat, &rise, &set); if (result != 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } rise_hour = _time_to_chime_hour(rise, hours_from_utc, true); set_hour = _time_to_chime_hour(set, hours_from_utc, false); - *start_hour = (hourly_chime_start == 3) ? rise_hour : Hourly_Chime_Start[hourly_chime_start]; - *end_hour = (hourly_chime_end == 3) ? set_hour : Hourly_Chime_End[hourly_chime_end]; + if (*start_hour == init_val) *start_hour = rise_hour; + if (*end_hour == init_val) *end_hour = set_hour; + if (*start_hour == 0) *start_hour = 24; + if (*end_hour == 0) *end_hour = 24; } void play_hour_chime(void) { @@ -266,8 +263,7 @@ bool repetition_minute_face_wants_background_task(movement_settings_t *settings, if (settings->bit.hourly_chime_always) return true; uint8_t chime_start, chime_end; _get_chime_times(date_time, settings, &chime_start, &chime_end); - if (chime_end == 0) chime_end = 24; - if (date_time.unit.hour < chime_start || date_time.unit.hour >= chime_end) return false; + if ((24 >= chime_start && date_time.unit.hour < chime_start) || (24 >= chime_end && date_time.unit.hour >= chime_end)) return false; return true; } diff --git a/movement/watch_faces/clock/simple_clock_bin_led_face.c b/movement/watch_faces/clock/simple_clock_bin_led_face.c index 495537442..c1f7d0fab 100644 --- a/movement/watch_faces/clock/simple_clock_bin_led_face.c +++ b/movement/watch_faces/clock/simple_clock_bin_led_face.c @@ -30,11 +30,6 @@ #include "watch_private_display.h" #include "sunriset.h" -static void _load_default_chime_times(uint8_t hourly_chime_start, uint8_t hourly_chime_end, uint8_t *start_hour, uint8_t *end_hour) { - *start_hour = Hourly_Chime_Start[hourly_chime_start]; - *end_hour = Hourly_Chime_End[hourly_chime_end]; -} - static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_end_of_hour) { time += hours_from_utc; uint8_t hour_to_start = (uint8_t)time; @@ -46,17 +41,18 @@ static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_ } static void _get_chime_times(watch_date_time date_time, movement_settings_t *settings, uint8_t *start_hour, uint8_t *end_hour) { + uint8_t init_val = 0xFF; uint8_t hourly_chime_start = settings->bit.hourly_chime_start; uint8_t hourly_chime_end = settings->bit.hourly_chime_end; + *start_hour = (hourly_chime_start == 3) ? init_val : Hourly_Chime_Start[hourly_chime_start]; + *end_hour = (hourly_chime_end == 3) ? init_val : Hourly_Chime_End[hourly_chime_end]; if (hourly_chime_start != 3 && hourly_chime_end != 3) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } int16_t tz = movement_timezone_offsets[settings->bit.time_zone]; watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC movement_location_t movement_location = (movement_location_t) watch_get_backup_data(1); if (movement_location.reg == 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } double rise, set; @@ -66,13 +62,14 @@ static void _get_chime_times(watch_date_time date_time, movement_settings_t *set double hours_from_utc = ((double)tz) / 60.0; uint8_t result = sun_rise_set(utc_now.unit.year + WATCH_RTC_REFERENCE_YEAR, utc_now.unit.month, utc_now.unit.day, lon, lat, &rise, &set); if (result != 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } rise_hour = _time_to_chime_hour(rise, hours_from_utc, true); set_hour = _time_to_chime_hour(set, hours_from_utc, false); - *start_hour = (hourly_chime_start == 3) ? rise_hour : Hourly_Chime_Start[hourly_chime_start]; - *end_hour = (hourly_chime_end == 3) ? set_hour : Hourly_Chime_End[hourly_chime_end]; + if (*start_hour == init_val) *start_hour = rise_hour; + if (*end_hour == init_val) *end_hour = set_hour; + if (*start_hour == 0) *start_hour = 24; + if (*end_hour == 0) *end_hour = 24; } static void _update_alarm_indicator(bool settings_alarm_enabled, simple_clock_bin_led_state_t *state) { @@ -267,8 +264,7 @@ bool simple_clock_bin_led_face_wants_background_task(movement_settings_t *settin if (settings->bit.hourly_chime_always) return true; uint8_t chime_start, chime_end; _get_chime_times(date_time, settings, &chime_start, &chime_end); - if (chime_end == 0) chime_end = 24; - if (date_time.unit.hour < chime_start || date_time.unit.hour >= chime_end) return false; + if ((24 >= chime_start && date_time.unit.hour < chime_start) || (24 >= chime_end && date_time.unit.hour >= chime_end)) return false; return true; } diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index d3e551571..b3dcd8a14 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -29,11 +29,6 @@ #include "watch_private_display.h" #include "sunriset.h" -static void _load_default_chime_times(uint8_t hourly_chime_start, uint8_t hourly_chime_end, uint8_t *start_hour, uint8_t *end_hour) { - *start_hour = Hourly_Chime_Start[hourly_chime_start]; - *end_hour = Hourly_Chime_End[hourly_chime_end]; -} - static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_end_of_hour) { time += hours_from_utc; uint8_t hour_to_start = (uint8_t)time; @@ -45,17 +40,18 @@ static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_ } static void _get_chime_times(watch_date_time date_time, movement_settings_t *settings, uint8_t *start_hour, uint8_t *end_hour) { + uint8_t init_val = 0xFF; uint8_t hourly_chime_start = settings->bit.hourly_chime_start; uint8_t hourly_chime_end = settings->bit.hourly_chime_end; + *start_hour = (hourly_chime_start == 3) ? init_val : Hourly_Chime_Start[hourly_chime_start]; + *end_hour = (hourly_chime_end == 3) ? init_val : Hourly_Chime_End[hourly_chime_end]; if (hourly_chime_start != 3 && hourly_chime_end != 3) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } int16_t tz = movement_timezone_offsets[settings->bit.time_zone]; watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC movement_location_t movement_location = (movement_location_t) watch_get_backup_data(1); if (movement_location.reg == 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } double rise, set; @@ -65,13 +61,14 @@ static void _get_chime_times(watch_date_time date_time, movement_settings_t *set double hours_from_utc = ((double)tz) / 60.0; uint8_t result = sun_rise_set(utc_now.unit.year + WATCH_RTC_REFERENCE_YEAR, utc_now.unit.month, utc_now.unit.day, lon, lat, &rise, &set); if (result != 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } rise_hour = _time_to_chime_hour(rise, hours_from_utc, true); set_hour = _time_to_chime_hour(set, hours_from_utc, false); - *start_hour = (hourly_chime_start == 3) ? rise_hour : Hourly_Chime_Start[hourly_chime_start]; - *end_hour = (hourly_chime_end == 3) ? set_hour : Hourly_Chime_End[hourly_chime_end]; + if (*start_hour == init_val) *start_hour = rise_hour; + if (*end_hour == init_val) *end_hour = set_hour; + if (*start_hour == 0) *start_hour = 24; + if (*end_hour == 0) *end_hour = 24; } static void _update_alarm_indicator(bool settings_alarm_enabled, simple_clock_state_t *state) { @@ -212,8 +209,7 @@ bool simple_clock_face_wants_background_task(movement_settings_t *settings, void if (settings->bit.hourly_chime_always) return true; uint8_t chime_start, chime_end; _get_chime_times(date_time, settings, &chime_start, &chime_end); - if (chime_end == 0) chime_end = 24; - if (date_time.unit.hour < chime_start || date_time.unit.hour >= chime_end) return false; + if ((24 >= chime_start && date_time.unit.hour < chime_start) || (24 >= chime_end && date_time.unit.hour >= chime_end)) return false; return true; } diff --git a/movement/watch_faces/clock/weeknumber_clock_face.c b/movement/watch_faces/clock/weeknumber_clock_face.c index a1a1dab3d..5c2162bb1 100644 --- a/movement/watch_faces/clock/weeknumber_clock_face.c +++ b/movement/watch_faces/clock/weeknumber_clock_face.c @@ -28,11 +28,6 @@ #include "watch_utility.h" #include "sunriset.h" -static void _load_default_chime_times(uint8_t hourly_chime_start, uint8_t hourly_chime_end, uint8_t *start_hour, uint8_t *end_hour) { - *start_hour = Hourly_Chime_Start[hourly_chime_start]; - *end_hour = Hourly_Chime_End[hourly_chime_end]; -} - static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_end_of_hour) { time += hours_from_utc; uint8_t hour_to_start = (uint8_t)time; @@ -44,17 +39,18 @@ static uint8_t _time_to_chime_hour(double time, double hours_from_utc, bool use_ } static void _get_chime_times(watch_date_time date_time, movement_settings_t *settings, uint8_t *start_hour, uint8_t *end_hour) { + uint8_t init_val = 0xFF; uint8_t hourly_chime_start = settings->bit.hourly_chime_start; uint8_t hourly_chime_end = settings->bit.hourly_chime_end; + *start_hour = (hourly_chime_start == 3) ? init_val : Hourly_Chime_Start[hourly_chime_start]; + *end_hour = (hourly_chime_end == 3) ? init_val : Hourly_Chime_End[hourly_chime_end]; if (hourly_chime_start != 3 && hourly_chime_end != 3) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } int16_t tz = movement_timezone_offsets[settings->bit.time_zone]; watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC movement_location_t movement_location = (movement_location_t) watch_get_backup_data(1); if (movement_location.reg == 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } double rise, set; @@ -64,13 +60,14 @@ static void _get_chime_times(watch_date_time date_time, movement_settings_t *set double hours_from_utc = ((double)tz) / 60.0; uint8_t result = sun_rise_set(utc_now.unit.year + WATCH_RTC_REFERENCE_YEAR, utc_now.unit.month, utc_now.unit.day, lon, lat, &rise, &set); if (result != 0) { - _load_default_chime_times(hourly_chime_start, hourly_chime_end, start_hour, end_hour); return; } rise_hour = _time_to_chime_hour(rise, hours_from_utc, true); set_hour = _time_to_chime_hour(set, hours_from_utc, false); - *start_hour = (hourly_chime_start == 3) ? rise_hour : Hourly_Chime_Start[hourly_chime_start]; - *end_hour = (hourly_chime_end == 3) ? set_hour : Hourly_Chime_End[hourly_chime_end]; + if (*start_hour == init_val) *start_hour = rise_hour; + if (*end_hour == init_val) *end_hour = set_hour; + if (*start_hour == 0) *start_hour = 24; + if (*end_hour == 0) *end_hour = 24; } static void _update_alarm_indicator(bool settings_alarm_enabled, weeknumber_clock_state_t *state) { @@ -201,8 +198,7 @@ bool weeknumber_clock_face_wants_background_task(movement_settings_t *settings, if (settings->bit.hourly_chime_always) return true; uint8_t chime_start, chime_end; _get_chime_times(date_time, settings, &chime_start, &chime_end); - if (chime_end == 0) chime_end = 24; - if (date_time.unit.hour < chime_start || date_time.unit.hour >= chime_end) return false; + if ((24 >= chime_start && date_time.unit.hour < chime_start) || (24 >= chime_end && date_time.unit.hour >= chime_end)) return false; return true; }