0 // 40 AST + 1 = UTC
};
-const uint8_t movement_dst_inverse_jump_table[] = {
- 40, // 0
- 0, // 1
- 1, // 2
- 2, // 3
- 4, // 4
- 3, // 5
- 4, // 6
- 5, // 7
- 6, // 8
- 9, // 9
- 7, // 10
- 8, // 11
- 10, // 12
- 12, // 13
- 14, // 14
- 13, // 15
- 16, // 16
- 15, // 17
- 16, // 18
- 17, // 19
- 19, // 20
- 21, // 21
- 20, // 22
- 21, // 23
- 24, // 24
- 25, // 25
- 25, // 26
- 26, // 27
- 28, // 28
- 27, // 29
- 29, // 30
- 30, // 31
- 31, // 32
- 32, // 33
- 34, // 34
- 33, // 35
- 34, // 36
- 35, // 37
- 36, // 38
- 37, // 39
- 39 // 40
-};
-
const char movement_valid_position_0_chars[] = " AaBbCcDdEeFGgHhIiJKLMNnOoPQrSTtUuWXYZ-='+\\/0123456789";
const char movement_valid_position_1_chars[] = " ABCDEFHlJLNORTtUX-='01378";
extern const int16_t movement_timezone_offsets[];
extern const uint8_t movement_dst_jump_table[];
-extern const uint8_t movement_dst_inverse_jump_table[];
extern const char movement_valid_position_0_chars[];
extern const char movement_valid_position_1_chars[];
case EVENT_ACTIVATE:
case EVENT_TICK:
date_time = watch_rtc_get_date_time();
- centibeats = clock2beats(date_time.unit.hour, date_time.unit.minute, date_time.unit.second, event.subsecond, movement_timezone_offsets[settings->bit.time_zone]);
+ centibeats = clock2beats(date_time.unit.hour, date_time.unit.minute, date_time.unit.second, event.subsecond, get_timezone_offset(settings->bit.time_zone, date_time));
if (centibeats == state->last_centibeat_displayed) {
// we missed this update, try again next subsecond
state->next_subsecond_update = (event.subsecond + 1) % BEAT_REFRESH_FREQUENCY;
case EVENT_LOW_ENERGY_UPDATE:
if (!watch_tick_animation_is_running()) watch_start_tick_animation(432);
date_time = watch_rtc_get_date_time();
- centibeats = clock2beats(date_time.unit.hour, date_time.unit.minute, date_time.unit.second, event.subsecond, movement_timezone_offsets[settings->bit.time_zone]);
+ centibeats = clock2beats(date_time.unit.hour, date_time.unit.minute, date_time.unit.second, event.subsecond, get_timezone_offset(settings->bit.time_zone, date_time));
sprintf(buf, "bt %4lu ", centibeats / 100);
watch_display_string(buf, 0);
if (*context_ptr == NULL) {
*context_ptr = malloc(sizeof(day_night_percentage_state_t));
day_night_percentage_state_t *state = (day_night_percentage_state_t *)*context_ptr;
- watch_date_time utc_now = watch_utility_date_time_convert_zone(watch_rtc_get_date_time(), movement_timezone_offsets[settings->bit.time_zone] * 60, 0);
+ watch_date_time date_time = watch_rtc_get_date_time();
+ watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60, 0);
recalculate(utc_now, state);
}
}
char buf[12];
watch_date_time date_time = watch_rtc_get_date_time();
- watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60, 0);
+ watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60, 0);
switch (event.event_type) {
case EVENT_ACTIVATE:
static void _update(movement_settings_t *settings, mars_time_state_t *state) {
char buf[11];
watch_date_time date_time = watch_rtc_get_date_time();
- uint32_t now = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60);
+ uint32_t now = watch_utility_date_time_to_unix_time(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60);
// TODO: I'm skipping over some steps here.
// https://www.giss.nasa.gov/tools/mars24/help/algorithm.html
double jdut = 2440587.5 + ((double)now / 86400.0);
uint32_t timestamp;
uint32_t previous_date_time;
watch_date_time date_time;
+ int16_t tz;
switch (event.event_type) {
case EVENT_ACTIVATE:
/* Determine current time at time zone and store date/time */
date_time = watch_rtc_get_date_time();
- timestamp = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60);
- date_time = watch_utility_date_time_from_unix_time(timestamp, movement_timezone_offsets[state->current_zone] * 60);
+ tz = get_timezone_offset(settings->bit.time_zone, date_time);
+ timestamp = watch_utility_date_time_to_unix_time(date_time, tz * 60);
+ date_time = watch_utility_date_time_from_unix_time(timestamp, tz * 60);
previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg;
watch_clear_indicator(WATCH_INDICATOR_PM);
refresh_face = false;
}
- result = div(movement_timezone_offsets[state->current_zone], 60);
+ result = div(get_timezone_offset(state->current_zone, watch_rtc_get_date_time()), 60);
hours = result.quot;
minutes = result.rem;
static bool world_clock_face_do_display_mode(movement_event_t event, movement_settings_t *settings, world_clock_state_t *state) {
char buf[11];
uint8_t pos;
+ int16_t tz;
uint32_t timestamp;
uint32_t previous_date_time;
case EVENT_TICK:
case EVENT_LOW_ENERGY_UPDATE:
date_time = watch_rtc_get_date_time();
- timestamp = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60);
- date_time = watch_utility_date_time_from_unix_time(timestamp, movement_timezone_offsets[state->settings.bit.timezone_index] * 60);
+ tz = get_timezone_offset(settings->bit.time_zone, date_time);
+ timestamp = watch_utility_date_time_to_unix_time(date_time, tz * 60);
+ date_time = watch_utility_date_time_from_unix_time(timestamp, tz * 60);
previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg;
}
static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_settings_t *settings, world_clock_state_t *state) {
+ watch_date_time date_time;
+ int16_t tz;
switch (event.event_type) {
case EVENT_MODE_BUTTON_UP:
if (state->backup_register) watch_store_backup_data(state->settings.reg, state->backup_register);
}
char buf[13];
+ date_time = watch_rtc_get_date_time();
+ tz = get_timezone_offset(settings->bit.time_zone, date_time);
sprintf(buf, "%c%c %3d%02d ",
movement_valid_position_0_chars[state->settings.bit.char_0],
movement_valid_position_1_chars[state->settings.bit.char_1],
- (int8_t) (movement_timezone_offsets[state->settings.bit.timezone_index] / 60),
- (int8_t) (movement_timezone_offsets[state->settings.bit.timezone_index] % 60) * (movement_timezone_offsets[state->settings.bit.timezone_index] < 0 ? -1 : 1));
+ (int8_t) (tz / 60),
+ (int8_t) (tz % 60) * (tz < 0 ? -1 : 1));
watch_set_colon();
watch_clear_indicator(WATCH_INDICATOR_PM);
#endif
watch_date_time date_time = watch_rtc_get_date_time();
- uint32_t timestamp = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60);
+ uint32_t timestamp = watch_utility_date_time_to_unix_time(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60);
date_time = watch_utility_date_time_from_unix_time(timestamp, 0);
double jd = astro_convert_date_to_julian_date(date_time.unit.year + WATCH_RTC_REFERENCE_YEAR, date_time.unit.month, date_time.unit.day, date_time.unit.hour, date_time.unit.minute, date_time.unit.second);
}
}
-static inline int32_t get_tz_offset(movement_settings_t *settings) {
- return movement_timezone_offsets[settings->bit.time_zone] * 60;
+static inline int32_t get_tz_offset(movement_settings_t *settings, watch_date_time date_time) {
+ return get_timezone_offset(settings->bit.time_zone, date_time) * 60;
}
static inline void store_countdown(countdown_state_t *state) {
static void start(countdown_state_t *state, movement_settings_t *settings) {
watch_date_time now = watch_rtc_get_date_time();
+ int16_t tz = get_tz_offset(settings, now);
state->mode = cd_running;
- state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, tz);
state->target_ts = watch_utility_offset_timestamp(state->now_ts, state->hours, state->minutes, state->seconds);
- watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, get_tz_offset(settings));
+ watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, tz);
movement_schedule_background_task(target_dt);
watch_set_indicator(WATCH_INDICATOR_BELL);
}
countdown_state_t *state = (countdown_state_t *)context;
if(state->mode == cd_running) {
watch_date_time now = watch_rtc_get_date_time();
- state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings, now));
watch_set_indicator(WATCH_INDICATOR_BELL);
}
watch_set_colon();
(void)state;
char buf[11];
watch_date_time date_time = watch_rtc_get_date_time();
- uint32_t now = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60) + offset;
- date_time = watch_utility_date_time_from_unix_time(now, movement_timezone_offsets[settings->bit.time_zone] * 60);
+ int16_t tz = get_timezone_offset(settings->bit.time_zone, date_time);
+ uint32_t now = watch_utility_date_time_to_unix_time(date_time, tz * 60) + offset;
+ date_time = watch_utility_date_time_from_unix_time(now, tz * 60);
double currentfrac = fmod(now - FIRST_MOON, LUNAR_SECONDS) / LUNAR_SECONDS;
double currentday = currentfrac * LUNAR_DAYS;
uint8_t phase_index = 0;
static void _orrery_face_recalculate(movement_settings_t *settings, orrery_state_t *state) {
watch_date_time date_time = watch_rtc_get_date_time();
- uint32_t timestamp = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60);
+ uint32_t timestamp = watch_utility_date_time_to_unix_time(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60);
date_time = watch_utility_date_time_from_unix_time(timestamp, 0);
double jd = astro_convert_date_to_julian_date(date_time.unit.year + WATCH_RTC_REFERENCE_YEAR, date_time.unit.month, date_time.unit.day, date_time.unit.hour, date_time.unit.minute, date_time.unit.second);
double et = astro_convert_jd_to_julian_millenia_since_j2000(jd);
state->no_location = false;
watch_date_time date_time = watch_rtc_get_date_time(); // the current local date / time
- watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60, 0); // the current date / time in UTC
+ int16_t tz = get_timezone_offset(settings->bit.time_zone, date_time);
+ watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC
watch_date_time scratch_time; // scratchpad, contains different values at different times
watch_date_time midnight;
scratch_time.reg = midnight.reg = utc_now.reg;
double lon = (double)lon_centi / 100.0;
// save UTC offset
- state->utc_offset = ((double)movement_timezone_offsets[settings->bit.time_zone]) / 60.0;
+ state->utc_offset = ((double)tz) / 60.0;
// calculate sunrise and sunset of current day in decimal hours after midnight
sun_rise_set(scratch_time.unit.year + WATCH_RTC_REFERENCE_YEAR, scratch_time.unit.month, scratch_time.unit.day, lon, lat, &sunrise, &sunset);
// get current time
watch_date_time date_time = watch_rtc_get_date_time(); // the current local date / time
- watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60, 0); // the current date / time in UTC
+ watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60, 0); // the current date / time in UTC
current_hour_epoch = watch_utility_date_time_to_unix_time(utc_now, 0);
// set the current planetary hour as default screen
state->no_location = false;
watch_date_time date_time = watch_rtc_get_date_time(); // the current local date / time
- watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60, 0); // the current date / time in UTC
+ int16_t tz = get_timezone_offset(settings->bit.time_zone, date_time);
+ watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC
watch_date_time scratch_time; // scratchpad, contains different values at different times
watch_date_time midnight;
scratch_time.reg = midnight.reg = utc_now.reg;
double lon = (double)lon_centi / 100.0;
// save UTC offset
- state->utc_offset = ((double)movement_timezone_offsets[settings->bit.time_zone]) / 60.0;
+ state->utc_offset = ((double)tz) / 60.0;
// get UNIX epoch time
now_epoch = watch_utility_date_time_to_unix_time(utc_now, 0);
double night_hour_count = 0.0;
uint8_t weekday, planet, planetary_hour;
double hour_duration, current_hour, current_minute, current_second;
+ watch_date_time date_time = watch_rtc_get_date_time();
watch_set_colon();
// get current time and convert to UTC
- state->scratch = watch_utility_date_time_convert_zone(watch_rtc_get_date_time(), movement_timezone_offsets[settings->bit.time_zone] * 60, 0);
+ state->scratch = watch_utility_date_time_convert_zone(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60, 0);
// when current phase ends calculate the next phase
if ( watch_utility_date_time_to_unix_time(state->scratch, 0) >= state->phase_end ) {
#define sl_SELECTIONS 6
#define DEFAULT_MINUTES { 5,4,1,0,0,0 }
-static inline int32_t get_tz_offset(movement_settings_t *settings) {
- return movement_timezone_offsets[settings->bit.time_zone] * 60;
+static inline int32_t get_tz_offset(movement_settings_t *settings, watch_date_time date_time) {
+ return get_timezone_offset(settings->bit.time_zone, date_time) * 60;
}
static int lap = 0;
return;
}
state->nextbeep_ts = state->target_ts - beepseconds[beepflag+1];
- watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->nextbeep_ts, get_tz_offset(settings));
+ watch_date_time now = watch_rtc_get_date_time();
+ watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->nextbeep_ts, get_tz_offset(settings, now));
movement_schedule_background_task_for_face(state->watch_face_index, target_dt);
//background task is set, now we have time to play the tune. If this is cancelled accidentally, the next alarm will still ring. Sound is implemented non-blocking, so that neither buttons nor display output are compromised.
for (int i = 0; i < 5; i++) {
}
if (state->index > 5 || state->minutes[state->index] == 0) {
watch_date_time now = watch_rtc_get_date_time();
- state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings, now));
state->target_ts = state->now_ts;
if (alarmflag != 0){
watch_buzzer_play_sequence(long_beep, NULL);
movement_request_tick_frequency(1); //synchronises tick with the moment the button was pressed. Solves 1s offset between sound and display, solves up to +-0.5s offset between button action and display.
state->mode = sl_running;
watch_date_time now = watch_rtc_get_date_time();
- state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings, now));
state->target_ts = watch_utility_offset_timestamp(state->now_ts, 0, state->minutes[state->index], 0);
ring(state, settings);
}
sailing_state_t *state = (sailing_state_t *)context;
if(state->mode == sl_running) {
watch_date_time now = watch_rtc_get_date_time();
- state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings, now));
}
if(state->mode == sl_counting) {
watch_date_time now = watch_rtc_get_date_time();
- state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings, now));
watch_set_indicator(WATCH_INDICATOR_LAP);
}
switch (alarmflag) {
}
static void calculate_datetimes(solstice_state_t *state, movement_settings_t *settings) {
+ watch_date_time date_time = watch_rtc_get_date_time();
for (int i = 0; i < 4; i++) {
// TODO: handle DST changes
- state->datetimes[i] = jde_to_date_time(calculate_solstice_equinox(2020 + state->year, i) + (movement_timezone_offsets[settings->bit.time_zone] / (60.0*24.0)));
+ state->datetimes[i] = jde_to_date_time(calculate_solstice_equinox(2020 + state->year, i) + (get_timezone_offset(settings->bit.time_zone, date_time) / (60.0*24.0)));
}
}
}
watch_date_time date_time = watch_rtc_get_date_time(); // the current local date / time
- watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60, 0); // the current date / time in UTC
+ int16_t tz = get_timezone_offset(settings->bit.time_zone, date_time);
+ watch_date_time utc_now = watch_utility_date_time_convert_zone(date_time, tz * 60, 0); // the current date / time in UTC
watch_date_time scratch_time; // scratchpad, contains different values at different times
scratch_time.reg = utc_now.reg;
// sunriset returns the rise/set times as signed decimal hours in UTC.
// this can mean hours below 0 or above 31, which won't fit into a watch_date_time struct.
// to deal with this, we set aside the offset in hours, and add it back before converting it to a watch_date_time.
- double hours_from_utc = ((double)movement_timezone_offsets[settings->bit.time_zone]) / 60.0;
+ double hours_from_utc = ((double)tz) / 60.0;
// we loop twice because if it's after sunset today, we need to recalculate to display values for tomorrow.
for(int i = 0; i < 2; i++) {
static uint8_t _beeps_to_play; // temporary counter for ring signals playing
-static inline int32_t _get_tz_offset(movement_settings_t *settings) {
- return movement_timezone_offsets[settings->bit.time_zone] * 60;
+static inline int32_t _get_tz_offset(movement_settings_t *settings, watch_date_time date_time) {
+ return get_timezone_offset(settings->bit.time_zone, date_time) * 60;
}
static void _signal_callback() {
static void _start(timer_state_t *state, movement_settings_t *settings, bool with_beep) {
if (state->timers[state->current_timer].value == 0) return;
watch_date_time now = watch_rtc_get_date_time();
- state->now_ts = watch_utility_date_time_to_unix_time(now, _get_tz_offset(settings));
+ int32_t tz = _get_tz_offset(settings, now);
+ state->now_ts = watch_utility_date_time_to_unix_time(now, tz);
if (state->mode == pausing)
state->target_ts = state->now_ts + state->paused_left;
else
state->timers[state->current_timer].unit.hours,
state->timers[state->current_timer].unit.minutes,
state->timers[state->current_timer].unit.seconds);
- watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, _get_tz_offset(settings));
+ watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, tz);
state->mode = running;
movement_schedule_background_task_for_face(state->watch_face_index, target_dt);
watch_set_indicator(WATCH_INDICATOR_BELL);
watch_set_colon();
if(state->mode == running) {
watch_date_time now = watch_rtc_get_date_time();
- state->now_ts = watch_utility_date_time_to_unix_time(now, _get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, _get_tz_offset(settings, now));
watch_set_indicator(WATCH_INDICATOR_BELL);
} else {
state->pausing_seconds = 1;
static uint8_t focus_min = 25;
static uint8_t break_min = 5;
-static inline int32_t get_tz_offset(movement_settings_t *settings) {
- return movement_timezone_offsets[settings->bit.time_zone] * 60;
+static inline int32_t get_tz_offset(movement_settings_t *settings, watch_date_time date_time) {
+ return get_timezone_offset(settings->bit.time_zone, date_time) * 60;
}
static uint8_t get_length(tomato_state_t *state) {
static void tomato_start(tomato_state_t *state, movement_settings_t *settings) {
watch_date_time now = watch_rtc_get_date_time();
+ int32_t tz = get_tz_offset(settings, now);
int8_t length = (int8_t) get_length(state);
state->mode = tomato_run;
- state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, tz);
state->target_ts = watch_utility_offset_timestamp(state->now_ts, 0, length, 0);
- watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, get_tz_offset(settings));
+ watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, tz);
movement_schedule_background_task(target_dt);
watch_set_indicator(WATCH_INDICATOR_BELL);
}
tomato_state_t *state = (tomato_state_t *)context;
if (state->mode == tomato_run) {
watch_date_time now = watch_rtc_get_date_time();
- state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings));
+ state->now_ts = watch_utility_date_time_to_unix_time(now, get_tz_offset(settings, now));
watch_set_indicator(WATCH_INDICATOR_BELL);
}
watch_set_colon();
totp_display(totp_state);
}
-static inline uint32_t totp_compute_base_timestamp(movement_settings_t *settings) {
- return watch_utility_date_time_to_unix_time(watch_rtc_get_date_time(), movement_timezone_offsets[settings->bit.time_zone] * 60);
+static uint32_t totp_compute_base_timestamp(movement_settings_t *settings) {
+ watch_date_time date_time = watch_rtc_get_date_time();
+ return watch_utility_date_time_to_unix_time(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60);
}
void totp_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) {
}
#endif
- totp_state->timestamp = watch_utility_date_time_to_unix_time(watch_rtc_get_date_time(), movement_timezone_offsets[settings->bit.time_zone] * 60);
+ watch_date_time date_time = watch_rtc_get_date_time();
+ totp_state->timestamp = watch_utility_date_time_to_unix_time(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60);
totp_face_set_record(totp_state, 0);
}
accelerometer_data_acquisition_record_t record;
watch_date_time date_time = watch_rtc_get_date_time();
- state->starting_timestamp = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60);
+ state->starting_timestamp = watch_utility_date_time_to_unix_time(date_time, get_timezone_offset(settings->bit.time_zone, date_time) * 60);
record.header.info.record_type = ACCELEROMETER_DATA_ACQUISITION_HEADER;
record.header.info.range = ACCELEROMETER_RANGE;
record.header.info.temperature = lis2dw_get_temperature();
watch_clear_colon();
sprintf(buf, "%s ", set_time_hackwatch_face_titles[current_page]);
} else {
+ int16_t tz = get_timezone_offset(settings->bit.time_zone, date_time_settings);
watch_set_colon();
sprintf(buf,
"%s %3d%02d ",
set_time_hackwatch_face_titles[current_page],
- (int8_t)(movement_timezone_offsets[settings->bit.time_zone] / 60),
- (int8_t)(movement_timezone_offsets[settings->bit.time_zone] % 60) * (movement_timezone_offsets[settings->bit.time_zone] < 0 ? -1 : 1));
+ (int8_t)(tz / 60),
+ (int8_t)(tz % 60) * (tz < 0 ? -1 : 1));
}
}