diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1ae04d9b..a0a383c0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,9 +41,9 @@ jobs: run: emmake make working-directory: '.' - name: Archive simulator build - working-directory: 'movement/make/build-sim' + working-directory: './build-sim' run: | - tar -czf movement.tar.gz index.html firmware.wasm firmware.js + tar -czf movement.tar.gz firmware.html firmware.wasm firmware.js - name: Upload simulator build uses: actions/upload-artifact@v4 with: diff --git a/.gitmodules b/.gitmodules index 365a85ef..875a0be3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,7 +6,7 @@ url = https://github.com/littlefs-project/littlefs.git [submodule "gossamer"] path = gossamer - url = git@github.com:joeycastillo/gossamer.git + url = https://github.com/joeycastillo/gossamer.git [submodule "utz"] path = utz - url = git@github.com:joeycastillo/utz.git + url = https://github.com/joeycastillo/utz.git diff --git a/movement/watch_faces/complication/day_one_face.c b/movement/watch_faces/complication/day_one_face.c index cdb6fc79..23152330 100644 --- a/movement/watch_faces/complication/day_one_face.c +++ b/movement/watch_faces/complication/day_one_face.c @@ -64,13 +64,11 @@ static void _day_one_face_increment(day_one_state_t *state) { state->birth_month = (state->birth_month % 12) + 1; break; case PAGE_DAY: - state->birth_day = state->birth_day + 1; + state->birth_day = (state->birth_day % watch_utility_days_in_month(state->birth_month, state->birth_year)) + 1; break; default: break; } - if (state->birth_day == 0 || state->birth_day > days_in_month(state->birth_month, state->birth_year)) - state->birth_day = 1; } void day_one_face_setup(uint8_t watch_face_index, void ** context_ptr) { diff --git a/movement/watch_faces/complication/deadline_face.c b/movement/watch_faces/complication/deadline_face.c index 113d118a..66d63784 100644 --- a/movement/watch_faces/complication/deadline_face.c +++ b/movement/watch_faces/complication/deadline_face.c @@ -269,15 +269,7 @@ static void _increment_date(deadline_state_t *state, watch_date_time_t date_time date_time.unit.month = (date_time.unit.month % 12) + 1; break; case 2: - date_time.unit.day = date_time.unit.day + 1; - - /* Check for leap years */ - int8_t days = days_in_month[date_time.unit.month - 1]; - if (date_time.unit.month == 2 && _is_leap(date_time.unit.year)) - days++; - - if (date_time.unit.day > days) - date_time.unit.day = 1; + date_time.unit.day = (date_time.unit.day % watch_utility_days_in_month(date_time.unit.month, date_time.unit.year + WATCH_RTC_REFERENCE_YEAR)) + 1; break; case 3: date_time.unit.hour = (date_time.unit.hour + 1) % 24; diff --git a/movement/watch_faces/complication/time_left_face.c b/movement/watch_faces/complication/time_left_face.c index 2780d472..29a76feb 100644 --- a/movement/watch_faces/complication/time_left_face.c +++ b/movement/watch_faces/complication/time_left_face.c @@ -168,7 +168,7 @@ static void _handle_alarm_button(time_left_state_t *state) { state->birth_date.bit.month = (state->birth_date.bit.month % 12) + 1; break; case TIME_LEFT_FACE_SETTINGS_STATE + 2: // birth day - state->birth_date.bit.day++; + state->birth_date.bit.day = (state->birth_date.bit.day % watch_utility_days_in_month(state->birth_date.bit.month, state->birth_date.bit.year)) + 1; break; case TIME_LEFT_FACE_SETTINGS_STATE + 3: // target year state->target_date.bit.year++; @@ -178,13 +178,9 @@ static void _handle_alarm_button(time_left_state_t *state) { state->target_date.bit.month = (state->target_date.bit.month % 12) + 1; break; case TIME_LEFT_FACE_SETTINGS_STATE + 5: // target day - state->target_date.bit.day++; + state->target_date.bit.day = (state->target_date.bit.day % watch_utility_days_in_month(state->target_date.bit.month, state->birth_date.bit.year)) + 1; break; } - if (state->birth_date.bit.day > days_in_month(state->birth_date.bit.month, state->birth_date.bit.year)) - state->birth_date.bit.day = 1; - if (state->target_date.bit.day > days_in_month(state->target_date.bit.month, state->birth_date.bit.year)) - state->target_date.bit.day = 1; } static void _initiate_setting(time_left_state_t *state) { diff --git a/movement/watch_faces/settings/set_time_hackwatch_face.c b/movement/watch_faces/settings/set_time_hackwatch_face.c index 94557be2..65510193 100644 --- a/movement/watch_faces/settings/set_time_hackwatch_face.c +++ b/movement/watch_faces/settings/set_time_hackwatch_face.c @@ -163,15 +163,13 @@ bool set_time_hackwatch_face_loop(movement_event_t event, void *context) { date_time_settings.unit.month = (date_time_settings.unit.month % 12) + 1; break; case 5: // day - date_time_settings.unit.day = date_time_settings.unit.day + 1; + date_time_settings.unit.day = (date_time_settings.unit.day % watch_utility_days_in_month(date_time_settings.unit.month, date_time_settings.unit.year + WATCH_RTC_REFERENCE_YEAR)) + 1; break; case 6: // time zone movement_set_timezone_index(movement_get_timezone_index() + 1); if (movement_get_timezone_index() >= NUM_ZONE_NAMES) movement_set_timezone_index(0); break; } - if (date_time_settings.unit.day > days_in_month(date_time_settings.unit.month, date_time_settings.unit.year + WATCH_RTC_REFERENCE_YEAR)) - date_time_settings.unit.day = 1; if (current_page != 2) // Do not set time when we are at seconds, it was already set previously watch_rtc_set_date_time(date_time_settings); //TODO: Do not update whole RTC, just what we are changing diff --git a/watch-faces/settings/set_time_face.c b/watch-faces/settings/set_time_face.c index 2c783b44..813d0b1a 100644 --- a/watch-faces/settings/set_time_face.c +++ b/watch-faces/settings/set_time_face.c @@ -51,7 +51,7 @@ static void _handle_alarm_button(watch_date_time_t date_time, uint8_t current_pa date_time.unit.month = (date_time.unit.month % 12) + 1; break; case 3: { // day - date_time.unit.day = date_time.unit.day + 1; + date_time.unit.day = (date_time.unit.day % watch_utility_days_in_month(date_time.unit.month, date_time.unit.year + WATCH_RTC_REFERENCE_YEAR)) + 1; break; case 4: // hour date_time.unit.hour = (date_time.unit.hour + 1) % 24; @@ -64,8 +64,6 @@ static void _handle_alarm_button(watch_date_time_t date_time, uint8_t current_pa break; } } - if (date_time.unit.day > days_in_month(date_time.unit.month, date_time.unit.year + WATCH_RTC_REFERENCE_YEAR)) - date_time.unit.day = 1; movement_set_local_date_time(date_time); } diff --git a/watch-library/shared/watch/watch_utility.c b/watch-library/shared/watch/watch_utility.c index 81211f6e..69cf95d9 100644 --- a/watch-library/shared/watch/watch_utility.c +++ b/watch-library/shared/watch/watch_utility.c @@ -320,3 +320,11 @@ uint32_t watch_utility_offset_timestamp(uint32_t now, int8_t hours, int8_t minut new += seconds; return new; } + +uint8_t watch_utility_days_in_month(uint8_t month, uint16_t year) { + static const uint8_t days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + uint8_t days = days_in_month[month - 1]; + if (month == 2 && is_leap(year)) + days += 1; + return days; +} diff --git a/watch-library/shared/watch/watch_utility.h b/watch-library/shared/watch/watch_utility.h index 169e573b..63f6a545 100644 --- a/watch-library/shared/watch/watch_utility.h +++ b/watch-library/shared/watch/watch_utility.h @@ -172,6 +172,6 @@ uint32_t watch_utility_offset_timestamp(uint32_t now, int8_t hours, int8_t minut * @param month The month of the date (1-12) * @param year The year of the date (ex. 2022) */ -uint8_t days_in_month(uint8_t month, uint16_t year); +uint8_t watch_utility_days_in_month(uint8_t month, uint16_t year); #endif diff --git a/watch-library/simulator/watch/watch_rtc.c b/watch-library/simulator/watch/watch_rtc.c index f99cb7bc..ebd41aed 100644 --- a/watch-library/simulator/watch/watch_rtc.c +++ b/watch-library/simulator/watch/watch_rtc.c @@ -45,6 +45,12 @@ bool _watch_rtc_is_enabled(void) { } void _watch_rtc_init(void) { + // Shifts the timezone so our local time is converted to UTC and set + int32_t time_zone_offset = EM_ASM_INT({ + return -new Date().getTimezoneOffset() * 60; + }); + watch_date_time_t date_time = watch_rtc_get_date_time(); + watch_rtc_set_date_time(watch_utility_date_time_convert_zone(date_time, time_zone_offset, 0)); } void watch_rtc_set_date_time(watch_date_time_t date_time) { @@ -62,9 +68,6 @@ void watch_rtc_set_date_time(watch_date_time_t date_time) { watch_date_time_t watch_rtc_get_date_time(void) { watch_date_time_t retval; - int32_t time_zone_offset = EM_ASM_INT({ - return -new Date().getTimezoneOffset() * 60; - }); retval.reg = EM_ASM_INT({ const date = new Date(Date.now() + $0); return date.getSeconds() | @@ -74,7 +77,6 @@ watch_date_time_t watch_rtc_get_date_time(void) { ((date.getMonth() + 1) << 22) | ((date.getFullYear() - 2020) << 26); }, time_offset); - retval = watch_utility_date_time_convert_zone(retval, time_zone_offset, 0); return retval; }