// time-oriented complication like a sunrise/sunset timer, and a simple locale preference could tell an
// altimeter to display feet or meters as easily as it tells a thermometer to display degrees in F or C.
bool clock_mode_24h : 1; // indicates whether clock should use 12 or 24 hour mode.
+ bool clock_24h_leading_zero : 1; // indicates whether clock should leading zero to indicate 24 hour mode.
bool use_imperial_units : 1; // indicates whether to use metric units (the default) or imperial.
bool alarm_enabled : 1; // indicates whether there is at least one alarm enabled.
- uint8_t reserved : 6; // room for more preferences if needed.
+ uint8_t reserved : 5; // room for more preferences if needed.
} bit;
uint32_t reg;
} movement_settings_t;
if (watch_tick_animation_is_running()) watch_stop_tick_animation();
- if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero) watch_set_indicator(WATCH_INDICATOR_24H);
// handle chime indicator
if (state->signal_enabled) watch_set_indicator(WATCH_INDICATOR_BELL);
// ...and set the LAP indicator if low.
if (state->battery_low) watch_set_indicator(WATCH_INDICATOR_LAP);
+ bool set_leading_zero = false;
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.
watch_display_character_lp_seconds('0' + date_time.unit.second / 10, 8);
}
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0) date_time.unit.hour = 12;
+ } else if (settings->bit.clock_24h_leading_zero && date_time.unit.hour < 10) {
+ set_leading_zero = true;
}
pos = 0;
if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
}
}
watch_display_string(buf, pos);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
// handle alarm indicator
if (state->alarm_enabled != settings->bit.alarm_enabled) _update_alarm_indicator(settings->bit.alarm_enabled, state);
break;
if (watch_tick_animation_is_running()) watch_stop_tick_animation();
- if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero) watch_set_indicator(WATCH_INDICATOR_24H);
// handle chime indicator
if (state->signal_enabled) watch_set_indicator(WATCH_INDICATOR_BELL);
// ...and set the LAP indicator if low.
if (state->battery_low) watch_set_indicator(WATCH_INDICATOR_LAP);
+ bool set_leading_zero = false;
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.
watch_display_character_lp_seconds('0' + date_time.unit.second / 10, 8);
}
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0) date_time.unit.hour = 12;
+ } else if (settings->bit.clock_24h_leading_zero && date_time.unit.hour < 10) {
+ set_leading_zero = true;
}
pos = 0;
if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
}
}
watch_display_string(buf, pos);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
// handle alarm indicator
if (state->alarm_enabled != settings->bit.alarm_enabled) _update_alarm_indicator(settings->bit.alarm_enabled, state);
}
if (watch_tick_animation_is_running()) watch_stop_tick_animation();
- if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero) watch_set_indicator(WATCH_INDICATOR_24H);
// handle chime indicator
if (state->signal_enabled) watch_set_indicator(WATCH_INDICATOR_BELL);
// ...and set the LAP indicator if low.
if (state->battery_low) watch_set_indicator(WATCH_INDICATOR_LAP);
+ bool set_leading_zero = false;
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.
watch_display_character_lp_seconds('0' + date_time.unit.second / 10, 8);
}
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0) date_time.unit.hour = 12;
+ } else if (settings->bit.clock_24h_leading_zero && date_time.unit.hour < 10) {
+ set_leading_zero = true;
}
pos = 0;
if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
}
}
watch_display_string(buf, pos);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
// handle alarm indicator
if (state->alarm_enabled != settings->bit.alarm_enabled) _update_alarm_indicator(settings->bit.alarm_enabled, state);
break;
if (watch_tick_animation_is_running()) watch_stop_tick_animation();
- if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero) watch_set_indicator(WATCH_INDICATOR_24H);
// handle chime indicator
if (state->signal_enabled) watch_set_indicator(WATCH_INDICATOR_BELL);
// ...and set the LAP indicator if low.
if (state->battery_low) watch_set_indicator(WATCH_INDICATOR_LAP);
+ bool set_leading_zero = false;
if ((date_time.reg >> 12) == (previous_date_time >> 12) && event.event_type != EVENT_LOW_ENERGY_UPDATE) {
// everything before minutes is the same.
pos = 6;
}
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0) date_time.unit.hour = 12;
+ } else if (settings->bit.clock_24h_leading_zero && date_time.unit.hour < 10) {
+ set_leading_zero = true;
}
pos = 0;
if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
}
}
watch_display_string(buf, pos);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
// handle alarm indicator
if (state->alarm_enabled != settings->bit.alarm_enabled) _update_alarm_indicator(settings->bit.alarm_enabled, state);
break;
if (refresh_face) {
watch_clear_indicator(WATCH_INDICATOR_SIGNAL);
watch_set_colon();
- if (settings->bit.clock_mode_24h)
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero)
watch_set_indicator(WATCH_INDICATOR_24H);
state->previous_date_time = REFRESH_TIME;
previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg;
+ bool set_leading_zero = false;
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;
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0)
date_time.unit.hour = 12;
- }
+ } else if (settings->bit.clock_24h_leading_zero && date_time.unit.hour < 10) {
+ set_leading_zero = true;
+ }
pos = 0;
if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
}
}
watch_display_string(buf, pos);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
break;
case EVENT_ALARM_BUTTON_UP:
state->current_zone = find_selected_zone(state, FORWARD);
watch_date_time date_time;
switch (event.event_type) {
case EVENT_ACTIVATE:
- if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero) watch_set_indicator(WATCH_INDICATOR_24H);
watch_set_colon();
state->previous_date_time = 0xFFFFFFFF;
// fall through
previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg;
+ bool set_leading_zero = false;
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;
}
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0) date_time.unit.hour = 12;
+ } else if (settings->bit.clock_24h_leading_zero && date_time.unit.hour < 10) {
+ set_leading_zero = true;
}
pos = 0;
if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
}
}
watch_display_string(buf, pos);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
break;
case EVENT_ALARM_LONG_PRESS:
movement_request_tick_frequency(4);
}
// Briefly, show time without seconds
else {
+ bool set_leading_zero = false;
watch_clear_indicator(WATCH_INDICATOR_LAP);
watch_date_time now = watch_rtc_get_date_time();
uint8_t hour = now.unit.hour;
watch_set_indicator(WATCH_INDICATOR_PM);
hour %= 12;
if (hour == 0) hour = 12;
- }
- else {
- watch_set_indicator(WATCH_INDICATOR_24H);
+ } else {
watch_clear_indicator(WATCH_INDICATOR_PM);
+ if (!settings->bit.clock_24h_leading_zero)
+ watch_set_indicator(WATCH_INDICATOR_24H);
+ else if (hour < 10)
+ set_leading_zero = true;
}
sprintf(activity_buf, "%2d%02d ", hour, now.unit.minute);
watch_set_colon();
watch_display_string(activity_buf, 4);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
}
}
i = state->alarm[state->alarm_idx].day + 1;
}
//handle am/pm for hour display
+ bool set_leading_zero = false;
uint8_t h = state->alarm[state->alarm_idx].hour;
if (!settings->bit.clock_mode_24h) {
if (h >= 12) {
watch_clear_indicator(WATCH_INDICATOR_PM);
}
if (h == 0) h = 12;
+ } else if (!settings->bit.clock_24h_leading_zero) {
+ watch_set_indicator(WATCH_INDICATOR_24H);
+ } else if (h < 10) {
+ set_leading_zero = true;
}
sprintf(buf, "%c%c%2d%2d%02d ",
_dow_strings[i][0], _dow_strings[i][1],
buf[_blink_idx[state->setting_state]] = buf[_blink_idx2[state->setting_state]] = ' ';
}
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
if (state->is_setting) {
// draw pitch level indicator
uint8_t weekday, planet, planetary_hour;
uint32_t current_hour_epoch;
watch_date_time scratch_time;
+ bool set_leading_zero = false;
// check if we have a location. If not, display error
if ( state->no_location ) {
return;
}
- if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero) watch_set_indicator(WATCH_INDICATOR_24H);
// roll over hour iterator
if ( state->hour < 0 ) state->hour = 23;
}
scratch_time.unit.hour %= 12;
if (scratch_time.unit.hour == 0) scratch_time.unit.hour = 12;
+ } else if (settings->bit.clock_24h_leading_zero && scratch_time.unit.hour < 10) {
+ set_leading_zero = true;
}
// planetary ruler of the hour
watch_set_colon();
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
if ( state->ruler == 2 ) _planetary_icon(planet);
}
double night_hour_count = 0.0;
uint8_t weekday, planet, planetary_hour;
double hour_duration, current_hour, current_minute, current_second;
+ bool set_leading_zero = false;
watch_set_colon();
return;
}
- if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero) watch_set_indicator(WATCH_INDICATOR_24H);
// PM for night hours, otherwise the night hours are counted from 13
if ( state->night ) {
state->scratch.unit.minute = floor(current_minute);
state->scratch.unit.second = (uint8_t)floor(current_second) % 60;
+ if (settings->bit.clock_mode_24h && settings->bit.clock_24h_leading_zero && state->scratch.unit.hour < 10)
+ set_leading_zero = true;
+
// what weekday is it (0 - 6)
weekday = watch_utility_get_iso8601_weekday_number(state->scratch.unit.year, state->scratch.unit.month, state->scratch.unit.day) - 1;
else sprintf(buf, "%s h%2d%02d%02d", ruler, state->scratch.unit.hour, state->scratch.unit.minute, state->scratch.unit.second);
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
if ( state->ruler == 2 ) _planetary_icon(planet);
}
watch_set_colon();
- if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
+ if (settings->bit.clock_mode_24h && !settings->bit.clock_24h_leading_zero) watch_set_indicator(WATCH_INDICATOR_24H);
rise += hours_from_utc;
set += hours_from_utc;
if (date_time.reg < scratch_time.reg || show_next_match) {
if (state->rise_index == 0 || show_next_match) {
+ bool set_leading_zero = false;
if (!settings->bit.clock_mode_24h) {
if (watch_utility_convert_to_12_hour(&scratch_time)) watch_set_indicator(WATCH_INDICATOR_PM);
else watch_clear_indicator(WATCH_INDICATOR_PM);
+ } else if (settings->bit.clock_24h_leading_zero && scratch_time.unit.hour < 10) {
+ set_leading_zero = true;
}
sprintf(buf, "rI%2d%2d%02d ", scratch_time.unit.day, scratch_time.unit.hour, scratch_time.unit.minute);
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
return;
} else {
show_next_match = true;
if (date_time.reg < scratch_time.reg || show_next_match) {
if (state->rise_index == 0 || show_next_match) {
+ bool set_leading_zero = false;
if (!settings->bit.clock_mode_24h) {
if (watch_utility_convert_to_12_hour(&scratch_time)) watch_set_indicator(WATCH_INDICATOR_PM);
else watch_clear_indicator(WATCH_INDICATOR_PM);
+ } else if (settings->bit.clock_24h_leading_zero && scratch_time.unit.hour < 10) {
+ set_leading_zero = true;
}
sprintf(buf, "SE%2d%2d%02d ", scratch_time.unit.day, scratch_time.unit.hour, scratch_time.unit.minute);
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
return;
} else {
show_next_match = true;
uint8_t hour = state->hour;
watch_clear_display();
- if ( settings->bit.clock_mode_24h )
- watch_set_indicator(WATCH_INDICATOR_24H);
- else {
+ bool set_leading_zero = false;
+ if ( !settings->bit.clock_mode_24h ) {
if ( hour >= 12 )
watch_set_indicator(WATCH_INDICATOR_PM);
hour = hour % 12 ? hour % 12 : 12;
+ } else if ( !settings->bit.clock_24h_leading_zero ) {
+ watch_set_indicator(WATCH_INDICATOR_24H);
+ } else if ( hour < 10 ) {
+ set_leading_zero = true;
}
if ( state->mode )
watch_set_colon();
watch_display_string(lcdbuf, 0);
+ if ( set_leading_zero )
+ watch_display_string("0", 4);
}
//
char time_indication_character;
int8_t pos;
watch_date_time date_time;
+ bool set_leading_zero = false;
if (logger_state->log_ticks) {
pos = (logger_state->data_points - 1 - logger_state->display_index) % LIS2DW_LOGGING_NUM_DATA_POINTS;
} else {
date_time = logger_state->data[pos].timestamp;
watch_set_colon();
- if (settings->bit.clock_mode_24h) {
- watch_set_indicator(WATCH_INDICATOR_24H);
- } else {
+ if (!settings->bit.clock_mode_24h) {
if (date_time.unit.hour > 11) watch_set_indicator(WATCH_INDICATOR_PM);
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0) date_time.unit.hour = 12;
+ } else if (!settings->bit.clock_24h_leading_zero) {
+ watch_set_indicator(WATCH_INDICATOR_24H);
+ } else if (date_time.unit.hour < 10) {
+ set_leading_zero = true;
}
switch (logger_state->axis_index) {
case 0:
logger_state->interrupts[2]);
}
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
}
static void _lis2dw_logging_face_log_data(lis2dw_logger_state_t *logger_state) {
thermistor_driver_disable();
}
-static void _thermistor_logging_face_update_display(thermistor_logger_state_t *logger_state, bool in_fahrenheit, bool clock_mode_24h) {
+static void _thermistor_logging_face_update_display(thermistor_logger_state_t *logger_state, bool in_fahrenheit, bool clock_mode_24h, bool clock_24h_leading_zero) {
int8_t pos = (logger_state->data_points - 1 - logger_state->display_index) % THERMISTOR_LOGGING_NUM_DATA_POINTS;
char buf[14];
+ bool set_leading_zero = false;
watch_clear_indicator(WATCH_INDICATOR_24H);
watch_clear_indicator(WATCH_INDICATOR_PM);
} else if (logger_state->ts_ticks) {
watch_date_time date_time = logger_state->data[pos].timestamp;
watch_set_colon();
- if (clock_mode_24h) {
- watch_set_indicator(WATCH_INDICATOR_24H);
- } else {
+ if (!clock_mode_24h) {
if (date_time.unit.hour > 11) watch_set_indicator(WATCH_INDICATOR_PM);
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0) date_time.unit.hour = 12;
+ } else if (!clock_24h_leading_zero) {
+ watch_set_indicator(WATCH_INDICATOR_24H);
+ } else if (date_time.unit.hour < 10) {
+ set_leading_zero = true;
}
sprintf(buf, "AT%2d%2d%02d%02d", date_time.unit.day, date_time.unit.hour, date_time.unit.minute, date_time.unit.second);
} else {
}
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
}
void thermistor_logging_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) {
break;
case EVENT_LIGHT_BUTTON_DOWN:
logger_state->ts_ticks = 2;
- _thermistor_logging_face_update_display(logger_state, settings->bit.use_imperial_units, settings->bit.clock_mode_24h);
+ _thermistor_logging_face_update_display(logger_state, settings->bit.use_imperial_units, settings->bit.clock_mode_24h, settings->bit.clock_24h_leading_zero);
break;
case EVENT_ALARM_BUTTON_DOWN:
logger_state->display_index = (logger_state->display_index + 1) % THERMISTOR_LOGGING_NUM_DATA_POINTS;
logger_state->ts_ticks = 0;
// fall through
case EVENT_ACTIVATE:
- _thermistor_logging_face_update_display(logger_state, settings->bit.use_imperial_units, settings->bit.clock_mode_24h);
+ _thermistor_logging_face_update_display(logger_state, settings->bit.use_imperial_units, settings->bit.clock_mode_24h, settings->bit.clock_24h_leading_zero);
break;
case EVENT_TICK:
if (logger_state->ts_ticks && --logger_state->ts_ticks == 0) {
- _thermistor_logging_face_update_display(logger_state, settings->bit.use_imperial_units, settings->bit.clock_mode_24h);
+ _thermistor_logging_face_update_display(logger_state, settings->bit.use_imperial_units, settings->bit.clock_mode_24h, settings->bit.clock_24h_leading_zero);
}
break;
case EVENT_BACKGROUND_TASK:
break;
}
break;
+ case EVENT_ALARM_LONG_PRESS:
+ switch (current_page) {
+ case 0:
+ if (settings->bit.clock_mode_24h)
+ settings->bit.clock_24h_leading_zero = !(settings->bit.clock_24h_leading_zero);
+ break;
+ }
+ break;
case EVENT_TIMEOUT:
movement_move_to_face(0);
break;
char buf[8];
switch (current_page) {
case 0:
- if (settings->bit.clock_mode_24h) watch_display_string("24h", 4);
- else watch_display_string("12h", 4);
+ if (settings->bit.clock_mode_24h) {
+ if (settings->bit.clock_24h_leading_zero) watch_display_string("024h", 4);
+ else 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);
}
char buf[11];
+ bool set_leading_zero = false;
if (current_page < 3) {
watch_set_colon();
if (settings->bit.clock_mode_24h) {
- watch_set_indicator(WATCH_INDICATOR_24H);
+ if (!settings->bit.clock_24h_leading_zero)
+ watch_set_indicator(WATCH_INDICATOR_24H);
+ else if (date_time.unit.hour < 10)
+ set_leading_zero = true;
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);
}
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
return true;
}
}
char buf[11];
+ bool set_leading_zero = false;
if (current_page < 3) {
watch_set_colon();
if (settings->bit.clock_mode_24h) {
- watch_set_indicator(WATCH_INDICATOR_24H);
+ if (!settings->bit.clock_24h_leading_zero)
+ watch_set_indicator(WATCH_INDICATOR_24H);
+ else if (date_time_settings.unit.hour < 10)
+ set_leading_zero = true;
sprintf(buf,
"%s %2d%02d%02d",
set_time_hackwatch_face_titles[current_page],
}
watch_display_string(buf, 0);
+ if (set_leading_zero)
+ watch_display_string("0", 4);
return true;
}