Merge PR #470 - fixes world_clock2 face

The new DST changes caused problems in one specific face - world_clock2.
An incorrect variable was used due to a confusing name.
It has been revised to fix the problems that were caused.

Closes #475.

Reported-by: CarpeNoctem <cryptomax@pm.me>
Fixed-by: David Volovskiy <devolov@gmail.com>
Tested-by: CarpeNoctem <cryptomax@pm.me>
Tested-on-hardware-by: CarpeNoctem <cryptomax@pm.me>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/470
GitHub-Issue: https://github.com/joeycastillo/Sensor-Watch/issues/475
This commit is contained in:
Matheus Afonso Martins Moreira 2024-09-15 20:45:33 -03:00
commit 3c86a42aa8
4 changed files with 19 additions and 10 deletions

View file

@ -184,8 +184,8 @@ static bool mode_display(movement_event_t event, movement_settings_t *settings,
/* Determine current time at time zone and store date/time */ /* Determine current time at time zone and store date/time */
date_time = watch_rtc_get_date_time(); date_time = watch_rtc_get_date_time();
timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60); timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60);
date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz * 60); date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz_curr * 60);
previous_date_time = state->previous_date_time; previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg; state->previous_date_time = date_time.reg;
@ -239,14 +239,16 @@ static bool mode_display(movement_event_t event, movement_settings_t *settings,
break; break;
case EVENT_ALARM_BUTTON_UP: case EVENT_ALARM_BUTTON_UP:
state->current_zone = find_selected_zone(state, FORWARD); state->current_zone = find_selected_zone(state, FORWARD);
state->previous_date_time = REFRESH_TIME; state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
state->previous_date_time = REFRESH_TIME;
break; break;
case EVENT_LIGHT_BUTTON_DOWN: case EVENT_LIGHT_BUTTON_DOWN:
/* Do nothing. */ /* Do nothing. */
break; break;
case EVENT_LIGHT_BUTTON_UP: case EVENT_LIGHT_BUTTON_UP:
state->current_zone = find_selected_zone(state, BACKWARD); state->current_zone = find_selected_zone(state, BACKWARD);
state->previous_date_time = REFRESH_TIME; state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
state->previous_date_time = REFRESH_TIME;
break; break;
case EVENT_LIGHT_LONG_PRESS: case EVENT_LIGHT_LONG_PRESS:
movement_illuminate_led(); movement_illuminate_led();
@ -290,7 +292,7 @@ static bool mode_settings(movement_event_t event, movement_settings_t *settings,
watch_clear_indicator(WATCH_INDICATOR_PM); watch_clear_indicator(WATCH_INDICATOR_PM);
refresh_face = false; refresh_face = false;
} }
result = div(state->tz, 60); result = div(state->tz_curr, 60);
hours = result.quot; hours = result.quot;
minutes = result.rem; minutes = result.rem;
@ -319,17 +321,21 @@ static bool mode_settings(movement_event_t event, movement_settings_t *settings,
break; break;
case EVENT_ALARM_BUTTON_UP: case EVENT_ALARM_BUTTON_UP:
state->current_zone = mod(state->current_zone + FORWARD, NUM_TIME_ZONES); state->current_zone = mod(state->current_zone + FORWARD, NUM_TIME_ZONES);
state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
break; break;
case EVENT_LIGHT_BUTTON_UP: case EVENT_LIGHT_BUTTON_UP:
state->current_zone = mod(state->current_zone + BACKWARD, NUM_TIME_ZONES); state->current_zone = mod(state->current_zone + BACKWARD, NUM_TIME_ZONES);
state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
break; break;
case EVENT_LIGHT_BUTTON_DOWN: case EVENT_LIGHT_BUTTON_DOWN:
/* Do nothing */ /* Do nothing */
break; break;
case EVENT_ALARM_LONG_PRESS: case EVENT_ALARM_LONG_PRESS:
/* Find next selected zone */ /* Find next selected zone */
if (!state->zones[state->current_zone].selected) if (!state->zones[state->current_zone].selected) {
state->current_zone = find_selected_zone(state, FORWARD); state->current_zone = find_selected_zone(state, FORWARD);
state->tz_curr = get_timezone_offset(state->current_zone, watch_rtc_get_date_time());
}
/* Switch to display mode */ /* Switch to display mode */
state->current_mode = WORLD_CLOCK2_MODE_DISPLAY; state->current_mode = WORLD_CLOCK2_MODE_DISPLAY;

View file

@ -105,6 +105,7 @@ typedef struct {
uint8_t current_zone; uint8_t current_zone;
uint32_t previous_date_time; uint32_t previous_date_time;
int16_t tz; int16_t tz;
int16_t tz_curr;
} world_clock2_state_t; } world_clock2_state_t;
void world_clock2_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void **context_ptr); void world_clock2_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void **context_ptr);

View file

@ -69,7 +69,7 @@ static bool world_clock_face_do_display_mode(movement_event_t event, movement_se
case EVENT_LOW_ENERGY_UPDATE: case EVENT_LOW_ENERGY_UPDATE:
date_time = watch_rtc_get_date_time(); date_time = watch_rtc_get_date_time();
timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60); timestamp = watch_utility_date_time_to_unix_time(date_time, state->tz * 60);
date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz * 60); date_time = watch_utility_date_time_from_unix_time(timestamp, state->tz_curr * 60);
previous_date_time = state->previous_date_time; previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg; state->previous_date_time = date_time.reg;
@ -163,6 +163,7 @@ static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_
case 3: case 3:
state->settings.bit.timezone_index++; state->settings.bit.timezone_index++;
if (state->settings.bit.timezone_index > 40) state->settings.bit.timezone_index = 0; if (state->settings.bit.timezone_index > 40) state->settings.bit.timezone_index = 0;
state->tz_curr = get_timezone_offset(state->settings.bit.timezone_index, watch_rtc_get_date_time());
break; break;
} }
break; break;
@ -177,8 +178,8 @@ static bool _world_clock_face_do_settings_mode(movement_event_t event, movement_
sprintf(buf, "%c%c %3d%02d ", sprintf(buf, "%c%c %3d%02d ",
movement_valid_position_0_chars[state->settings.bit.char_0], movement_valid_position_0_chars[state->settings.bit.char_0],
movement_valid_position_1_chars[state->settings.bit.char_1], movement_valid_position_1_chars[state->settings.bit.char_1],
(int8_t) (state->tz / 60), (int8_t) (state->tz_curr / 60),
(int8_t) (state->tz % 60) * (state->tz < 0 ? -1 : 1)); (int8_t) (state->tz_curr % 60) * (state->tz_curr < 0 ? -1 : 1));
watch_set_colon(); watch_set_colon();
watch_clear_indicator(WATCH_INDICATOR_PM); watch_clear_indicator(WATCH_INDICATOR_PM);

View file

@ -63,6 +63,7 @@ typedef struct {
uint8_t current_screen; uint8_t current_screen;
uint32_t previous_date_time; uint32_t previous_date_time;
int16_t tz; int16_t tz;
int16_t tz_curr;
} world_clock_state_t; } world_clock_state_t;
void world_clock_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr); void world_clock_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr);