Skip to content

Commit

Permalink
If the sunrise function does not run correctly, then don't chime
Browse files Browse the repository at this point in the history
  • Loading branch information
voloved committed Sep 10, 2024
1 parent 1ff9954 commit 613f17f
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 72 deletions.
20 changes: 8 additions & 12 deletions movement/watch_faces/clock/clock_face.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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;
}
20 changes: 8 additions & 12 deletions movement/watch_faces/clock/minute_repeater_decimal_face.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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;
}
20 changes: 8 additions & 12 deletions movement/watch_faces/clock/repetition_minute_face.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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;
}
20 changes: 8 additions & 12 deletions movement/watch_faces/clock/simple_clock_bin_led_face.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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;
}
20 changes: 8 additions & 12 deletions movement/watch_faces/clock/simple_clock_face.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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;
}
20 changes: 8 additions & 12 deletions movement/watch_faces/clock/weeknumber_clock_face.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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;
}

0 comments on commit 613f17f

Please sign in to comment.