TheOnePerson [Wed, 11 Jan 2023 20:31:53 +0000 (21:31 +0100)]
Interval timers face (#130)
* buzzer sequences: first draft, does not work on hardware yet (but in simulator)
* buzzer sequences: add changes to movement.c
* buzzer sequences: add demo face to Makefile
* buzzer sequences: fix problem of interrupted sounds. Add logic for repeating sub sequences. Tidy up (move logic to watch_buzzer files, remove buzzer_demo_face)
* buzzer sequences: tidy up even more
* buzzer sequences: disable registering a 32 Hz tick callback for watch faces, so it will be used exclusively by the buzzer sequences functionality
* buzzer sequences: add callback slot functionality to watch_rtc and make watch_buzzer use it. Switch internal buzzer sequences tick frequency to 64 Hz. Revert changes to movement.c
* interval face: add initial version
* interval face: fix theoretical problem in helper function
* buzzer sequences: fix parameter sanity check in watch_rtc code
* buzzer sequences/watch_rtc: optimize calling tick callbacks in RTC_Handler
* buzzer sequences/watch_rtc: fix error in calling callback functions
* buzzer sequences: revert changes to watch_rtc logic. Instead, use TC3 as the source for timing the sound sequences.
* buzzer sequences: fix frequency of callback
* buzzer sequences: integrate changes from PR #162 (set both CCBUF and PERFBUF for correct buzzer tone)
TheOnePerson [Wed, 11 Jan 2023 20:26:33 +0000 (21:26 +0100)]
Play sound sequences asynchronously (#122)
* buzzer sequences: first draft, does not work on hardware yet (but in simulator)
* buzzer sequences: add changes to movement.c
* buzzer sequences: add demo face to Makefile
* buzzer sequences: fix problem of interrupted sounds. Add logic for repeating sub sequences. Tidy up (move logic to watch_buzzer files, remove buzzer_demo_face)
* buzzer sequences: tidy up even more
* buzzer sequences: disable registering a 32 Hz tick callback for watch faces, so it will be used exclusively by the buzzer sequences functionality
* buzzer sequences: add callback slot functionality to watch_rtc and make watch_buzzer use it. Switch internal buzzer sequences tick frequency to 64 Hz. Revert changes to movement.c
* buzzer sequences: fix parameter sanity check in watch_rtc code
* buzzer sequences/watch_rtc: optimize calling tick callbacks in RTC_Handler
* buzzer sequences/watch_rtc: fix error in calling callback functions
* buzzer sequences: revert changes to watch_rtc logic. Instead, use TC3 as the source for timing the sound sequences.
* buzzer sequences: fix frequency of callback
* buzzer sequences: integrate changes from PR #162 (set both CCBUF and PERFBUF for correct buzzer tone)
First version where all functions are supposed to be working
* Fix math error in nanosec. File storage for location.
* Remove obsolete comments
* Missing page name on pages rotation - thanks to jeremy
* Delete file.diff
* Cleanup+tempchart
1) finetune must always reset last calibration time when doing non-0 time correction, even when you are not applying ppm correction.
2) Dithers over 31 periods not 10, more resolution with still no risk of overflow
3) Minute-boundery finetune fix. I also just got this 1-minute error after finetune...
4) Write frequency calibration value in 1 operation rather than 2. All RTC writes must be single operations to avoid partially correct data.
5) Some code cleanup
6) Tempchart face is added for temperature statistics
* Update set_time_hackwatch_face.c
* Math error in display code of finetune, allow to update correction time even without correction - by long alarm press
* Increase reliability of stopping & starting RTC timer
As it's quite dangerous operation
* hackwatch - days adjust down fix by long alarm
* unify style
* More comments & last style change
* Simulator support
RTC operations (watch_rtc_enable and watch_rtc_freqcorr_write) are in common libs.
* Unicode fix
* Crystal aging is now adjustable (AA page in nanosec - annual aging, ppm/year)
Aging is baked into fixed offset every time finetune is performed, as it relies on last adjustment time.
* Blink on non-0 page every minute in finetune to measure clock error
* Rolling back private changes
* Cleanup
* Cleanup
* Quality of life changes in nanosec
1. Does not calculate & apply ppm correction if less than 6 hours passed since previous adjustment (as it gives very high correction values which are unrealistic and unhelpful)
2. Idle timeout resets to face 0 only if no correction was made
* unify style
* Fix low-power errors in nanosec infrastructure, faster display in finetune
* Merge fix
* unify style
Co-authored-by: Jeremy O'Brien <neutral@fastmail.com> Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
TheOnePerson [Tue, 10 Jan 2023 21:31:32 +0000 (22:31 +0100)]
Add stock stopwatch face (#140)
* buzzer sequences: first draft, does not work on hardware yet (but in simulator)
* buzzer sequences: add changes to movement.c
* buzzer sequences: add demo face to Makefile
* buzzer sequences: fix problem of interrupted sounds. Add logic for repeating sub sequences. Tidy up (move logic to watch_buzzer files, remove buzzer_demo_face)
* buzzer sequences: tidy up even more
* buzzer sequences: disable registering a 32 Hz tick callback for watch faces, so it will be used exclusively by the buzzer sequences functionality
* buzzer sequences: add callback slot functionality to watch_rtc and make watch_buzzer use it. Switch internal buzzer sequences tick frequency to 64 Hz. Revert changes to movement.c
* buzzer sequences: fix parameter sanity check in watch_rtc code
* stock stopwatch: first fully functional implementation
* stock stopwatch: fix typo in comment
* stock stopwatch: handle resuming from deep sleep mode properly
* buzzer sequences/watch_rtc: optimize calling tick callbacks in RTC_Handler
* buzzer sequences/watch_rtc: fix error in calling callback functions
* stock stopwatch: implement workaround for sleep mode
* stock stopwatch: merge current main into stock-stopwatch
* stock stopwatch: use TC counters as source for callbacks
* stock-stopwatch: revert unnecessary changes to watch_buzzer
Tom Hodson [Tue, 22 Nov 2022 13:30:24 +0000 (14:30 +0100)]
WIP: Add support for bicolor led in the simulator
I noticed that the bicolor led isn't supported in the simulator. Here is a quick mockup of how I would add support for it.
I added an SVG filter to the #light rectangle in the SVG which lets us multiply the colours by a matrix in code. I then insert values so that the original green colour gets mixed into the combination of red and green requested by `watch_set_led_color`
# Testing
So far I've only tested this with the standard firmware build but it seems to work.
# Possible issues
I wasn't 100% sure what to do when red + green > 255, current behaviour is that it gets clamped to 255 in the simulator.
James Haggerty [Tue, 15 Nov 2022 09:32:53 +0000 (20:32 +1100)]
Set bell indicator on reactivating countdown/tomato faces
If you moved away and back to these faces, you'd lose the indicator. Not that the indicator here
seems very valuable, since it's not displayed on simple_clock_face, but at least
this makes things more consistent.
TheOnePerson [Sun, 30 Oct 2022 08:32:20 +0000 (09:32 +0100)]
alarm-face: make indicator show active alarms in 24h time range and implement UI tweak
- switch indicators: use signal indicator instead of bell indicator
- make indicator show up only when there is an active alarm in the next 24 h
- Implement "hidden" UI tweak: extra long press of the alarm button in normal mode jumps back to alarm no. 1
- update comments to reflect latest changes
James Haggerty [Sat, 29 Oct 2022 22:01:05 +0000 (09:01 +1100)]
Make countdown face reset to 0 (#90)
* Make countdown face reset to 0
It was annoying to have countdowns less than DEFAULT_MINUTES.
Admittedly, this does make DEFAULT_MINUTES fairly useless, since
we only ever see it the first time...
TheOnePerson [Wed, 26 Oct 2022 02:57:53 +0000 (04:57 +0200)]
Add an Alarm face to movement (#96)
* Add movement_play_alarm_beeps() to movement.c and make alarm sounds customizable. Add alarm indicator to simple watch face.
* Add alarm face
* alarm_face: fix problem with disabling alarms for 00:00.
* Fix typos in comments and get rid of of unused variable warning
* remove unnecessary constant
* simple_clock_face: fix disappearing chime indicator after face switch, enable alarm indicator updates in app loop (for one-time alarms).
movement: handle situations where watch is in sleep mode and chimes fire off at the same time as alarms properly.
* alarm_face: tweak process of displaying things on the lcd. Add extra long and extra short alarms. Increase number of alarm slots to 16.
* alarm face: fix alarms playing one beeping round more than set.
* alarm face: add proper quick cycling of hour and minute setting
* alarm-face: correct am/pm indication and some minor tweaks. Reset movement_config.h to current main branch. simple-watch-face: Remove unnecessary check and swap indicators (alarm / hourly chime)
* alarm-face: reverse commit parts from another branch (accidentially commited logic depending on movement firmware auto firing the long press event)
James Haggerty [Mon, 24 Oct 2022 22:24:54 +0000 (09:24 +1100)]
Fix Linux Makefile parallelism
Makefile != bourne shell, I think.
At least on my systems, this was causing a raw -j, which meant
that make had no restriction on its parallelism
(i.e. tried to build everything at once).