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
This commit is contained in:
@@ -22,13 +22,13 @@ A fifth optional function, `watch_face_wants_background_task`, will be added to
|
||||
To create a new watch face, you should create a new C header and source file in the watch-faces folder (i.e. for a watch face that displays moon phases: `moon_phase_face.h`, `moon_phase_face.c`), and implement these functions with your own unique prefix (i.e. `moon_phase_face_setup`). Then declare your watch face in your header file as follows:
|
||||
|
||||
```c
|
||||
static const watch_face_t moon_phase_face = {
|
||||
moon_phase_face_setup,
|
||||
moon_phase_face_activate,
|
||||
moon_phase_face_loop,
|
||||
moon_phase_face_resign,
|
||||
NULL // or moon_phase_face_wants_background_task, if you implemented this function
|
||||
};
|
||||
#define moon_phase_face ((const watch_face_t){ \
|
||||
moon_phase_face_setup, \
|
||||
moon_phase_face_activate, \
|
||||
moon_phase_face_loop, \
|
||||
moon_phase_face_resign, \
|
||||
NULL, /* or moon_phase_face_wants_background_task, if you implemented this function */ \
|
||||
})
|
||||
```
|
||||
|
||||
This section will go over how each function works. The section headings use the watch_face prefix, but know that you should implement each function with your own prefix as described above.
|
||||
@@ -96,13 +96,13 @@ void pulsometer_face_activate(movement_settings_t *settings, void *context);
|
||||
bool pulsometer_face_loop(movement_event_t event, movement_settings_t *settings, void *context);
|
||||
void pulsometer_face_resign(movement_settings_t *settings, void *context);
|
||||
|
||||
static const watch_face_t pulsometer_face = {
|
||||
pulsometer_face_setup,
|
||||
pulsometer_face_activate,
|
||||
pulsometer_face_loop,
|
||||
pulsometer_face_resign,
|
||||
NULL
|
||||
};
|
||||
#define pulsometer_face ((const watch_face_t){ \
|
||||
pulsometer_face_setup, \
|
||||
pulsometer_face_activate, \
|
||||
pulsometer_face_loop, \
|
||||
pulsometer_face_resign, \
|
||||
NULL, \
|
||||
})
|
||||
```
|
||||
|
||||
### pulsometer_face.c
|
||||
|
||||
Reference in New Issue
Block a user