From b8de35658ffd78ad8b22f91ccbbd3d63663afda9 Mon Sep 17 00:00:00 2001 From: Alexsander Akers Date: Tue, 25 Jan 2022 15:03:22 -0500 Subject: Sensor Watch Simulator (#35) * Put something on screen * Use the 32bit watch_date_time repr to pass from JS * Implement periodic callbacks * Clear display on enabling * Hook up watch_set_led_color() to SVG (green-only) * Make debug output full-width * Remove default Emscripten canvas * Implement sleep and button clicks * Fix time zone conversion bug in beats-time app * Clean up warnings * Fix pin levels * Set time zone to browser value (if available) * Add basic backup data saving * Silence format specifier warnings in both targets * Remove unnecessary, copied files * Use RTC pointer to clear callbacks (if available) * Use preprocessor define to avoid hardcoding MOVEMENT_NUM_FACES * Change each face to const preprocessor definition * Remove Intl.DateTimeFormat usage * Update shell.html title, header * Add touch start/end event handlers on SVG buttons * Update shell.html * Update folder structure (shared, simulator, hardware under watch-library) * Tease out shared components from watch_slcd * Clean up simulator watch_slcd.c inline JS calls * Fix missing newlines at end of file * Add simulator warnings (except format, unused-paremter) * Implement remaining watch_rtc functions * Fix button bug on mouse down then drag out * Implement remaining watch_slcd functions * Link keyboard events to buttons (for keys A, L, M) * Rewrite event handling (mouse, touch, keyboard) in C * Set explicit text UTF-8 charset in shell.html * Address PR comments * Remove unused directories from include paths --- movement/movement.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'movement/movement.c') diff --git a/movement/movement.c b/movement/movement.c index 3dc1c060..d15c349f 100644 --- a/movement/movement.c +++ b/movement/movement.c @@ -29,6 +29,10 @@ #include "movement.h" #include "movement_config.h" +#if __EMSCRIPTEN__ +#include +#endif + movement_state_t movement_state; void * watch_face_contexts[MOVEMENT_NUM_FACES]; watch_date_time scheduled_tasks[MOVEMENT_NUM_FACES]; @@ -149,7 +153,16 @@ static void _movement_handle_scheduled_tasks(void) { void movement_request_tick_frequency(uint8_t freq) { if (freq == 128) return; // Movement uses the 128 Hz tick internally - RTC->MODE2.INTENCLR.reg = 0xFE; // disable all callbacks except the 128 Hz one + + // disable all callbacks except the 128 Hz one +#if __EMSCRIPTEN__ + for (int i = 1; i < 128; i = i << 1) { + watch_rtc_disable_periodic_callback(i); + } +#else + RTC->MODE2.INTENCLR.reg = 0xFE; +#endif + movement_state.subsecond = 0; movement_state.tick_frequency = freq; if (freq) watch_rtc_register_periodic_callback(cb_tick, freq); @@ -215,6 +228,18 @@ void app_init(void) { movement_state.light_ticks = -1; movement_state.alarm_ticks = -1; _movement_reset_inactivity_countdown(); + +#if __EMSCRIPTEN__ + int32_t time_zone_offset = EM_ASM_INT({ + return -new Date().getTimezoneOffset(); + }); + for (int i = 0, count = sizeof(movement_timezone_offsets) / sizeof(movement_timezone_offsets[0]); i < count; i++) { + if (movement_timezone_offsets[i] == time_zone_offset) { + movement_state.settings.bit.time_zone = i; + break; + } + } +#endif } void app_wake_from_backup(void) { -- cgit v1.2.3