Update the copyrights to include full name attribution to all
who contributed to the clock watch face, including myself.
Also add an SPDX license identifier header comment to the files.
This allows the user to easily copy the base32 encoded secrets
into the TOTP record initializers. They will be decoded once
at runtime when the face is being set up by the movement framework.
Also rename the array of TOTP records to credentials. Much better.
Simplifies the code by defining dedicated functions
and separating the case from the main ones.
Also use the snprintf function since the buffer size is known.
Simplifies the code and makes it use the correct indicator.
For some reason it had been switched with the alarm indicator.
WATCH_INDICATOR_BELL
The small bell indicating that an alarm is set.
WATCH_INDICATOR_SIGNAL
The hourly signal indicator.
Also useful for indicating that sensors are on.
Deduplicates state in the clock state and movement settings.
Makes the code simpler.
Also makes it use the correct indicator.
For some reason it had been switched
with the hourly chime indicator.
WATCH_INDICATOR_BELL
The small bell indicating that an alarm is set.
WATCH_INDICATOR_SIGNAL
The hourly signal indicator.
Also useful for indicating that sensors are on.
Instances of the clock state structure
are only passed to the clock face itself
and only via the opaque context pointer.
No other code uses it.
Thus there is no need to expose it in a header file.
So make it an implementation detail of the watch face
by localizing it inside the translation unit.
Instances of the pulsometer state structure are only passed
to the pulsometer itself and only via the opaque context pointer.
No other code uses it. There is no need to expose it in a header file
so make it an implementation detail of the watch face.
Update the copyrights to include full name attribution to all
who contributed to the pulsometer watch face, including myself.
Also add an SPDX license identifier header comment to the files.
Implements an advanced pulsometer that can be recalibrated by the user.
The main clock face now displays the measured pulses per minute.
The day of month digits now display the pulsometer calibration.
The light button now cycles through integer graduations
which now range from 1 to 39 pulses per minute.
Long presses of the light button cycle by 10 instead of 1.
The watch face's responsiveness to input has been carefully optimized.
The code has been reorganized and generally improved.
Update the copyrights to include full name attribution
to all who contributed to this watch face, including myself.
Also add an SPDX license identifier header comment to the files.
https://spdx.org/licenses/MIT.html
Using the new structured TOTP record data structure
allows the TOTP watch face to statically and implicitly
compute the total number of defined TOTP records.
Users can now simply add new keys and records in the designated area
and the watch face will compile and automatically use them with no need
to maintain a separate array size variable. Less chance of mistakes.
I like to use the ten minute timeout on my watch and there are other
people who have similar interests in a lower deadline. The two day
deadline had to go to still accommodate the change within the three
bit index.
The default setting is still the one hour timeout.
This makes movement_play_signal synchronous when in LE mode, despite
using the underlying asynchronous API. It's a bit of a hack, but it
should work well enough for now.
This also moves the enabling/disabling of the buzzer into the
movement_play_signal function, so that watch faces no longer have to do
it.
* Move from .c to .h as needed for consistency.
* When missing from both, copy from pull request or wiki.
* When missing entirely, infer functionality from source code.
This allows the alarm button to be held down in the date settings and
quickly cycle through the dates instead of having to push for each
single increment like in other faces.
This illuminates the LED only for the time that the button is pressed,
and turns it off as soon as it's released, which is the behaviour of the
original watch.
I chose a led_duration of zero to represent "instant" and all bits set
to represent "no LED", which is arbitrary but seemed more sensible to
me.
You can enter and monitor up to four different deadlines by providing their respective date and time. The watch face displays the remaining time at matching granularity, ranging from years to seconds.
* Update movement_faces.h
adding decimal_time_face.h to build
* Decimal Time, a new clock face
This face presents the current time as hours and hundredths of an hour.
* add decimal time to Makefile
* initial wyoscan commit
* initial attempt at animation
* kinda working
* visually working but running out of memory
* slower
* little fixes
* add hardware watch blink function
* refine number animation
* remove movement from config for merging
* silence warnings
---------
Co-authored-by: Willy Hardy <whardy@redhat.com>
* initial commit, added opt3001 light meter test app
* tested working light meter board, i2c communication still has issues
* fixed i2c; rudimentary lightmeter works!
* added aperture priority ui
* added aperture priority ui
* added README
* adjusted cal
* fixed bugs (HI shutter speed, lux mode toggle)
* made it possible to advance to the next face
* initialized lux variable
* lowered tolerance for HI and LO
* Changed EV display from always showing EV100 to showing EV[iso setting]
* dont display old ev when ISO changes
* changed mode and light behavior
* updated readme
* fixed indentation
* made lightmeter display logic more consistent
* made lightmeter display logic more consistent
* reverted rules.mk (for merge into upstream)
* reverted rules.mk (for merge into upstream)
* removed OPT3001 PCB model
* made lux mode default, corrected timeout behavior
---------
Co-authored-by: Christian Chapman <user@debian>
* time left face: initial commit, fully functional
* time left face: typos
* time left face: correct even more typos in documentation
---------
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* Implementation of alternative world clock.
* Fixed two minor bugs
- Only start in settings mode on first activation
- Fixed typo in time zone names
---------
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* invaders face: Initial commit, fully functional so far
* invaders face: silence compiler warning
* invaders face: prevent involuntary restarts when the game is over and save some bytes on flags
---------
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* chirpy demo face; activity face stub
* activity face WIP: can log, pause and clear
* activity face and chirpy demo: ready to flash to watch
* activity face tweaks
* hour display for hours < 10
* fix: added rogue paused seconds when stopping activity
* LE mode; lower power with 1Hz tick
* fix: midnight is 12
* Documentation in code comments
* fixes from code review by @neutralinsomniac
* chirpy_demo_face option to chirp out nanosec.ini + auto-format
* UI tweaks
* remove erroneously added file (content revoked)
* UI tweaks: return from LE mode; time display vs LAP
* add default loop handler (will enable long-mode-to-first-face)
* reset watch faces to match main branch
* timer face: initial commit, fully functional
* timer face: show slot number in normal mode
---------
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* discgolf_face initial commit
* Comment on wrong line
* updated drawing method and added beeps
* Put description in appropriate file, added license
* fixed for loops that didn't cover whole array, long mode press snaps back to default face
---------
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* Update sailing_face.c
Modified sailing_face.
Added features, some of which @niclashoyer already suggested in his initial PR:
- stopwatch-like counter after start signal
- lap counter after start signal
- optional additional sounds at every minute, 30s, 10s countdown
- sound options (no sound, start only, signals only, all)
- maximum starting time up to 10min (instead of 9)
- improved timing, display is no longer delayed by sound
* Update sailing_face.h
Modified sailing_face.
Added features, some of which @niclashoyer already suggested in his initial PR:
- stopwatch-like counter after start signal
- lap counter after start signal
- optional additional sounds at every minute, 30s, 10s countdown
- sound options (no sound, start only, signals only, all)
- maximum starting time up to 10min (instead of 9)
- improved timing, display is no longer delayed by sound
With this small change you can also count down to a important upcoming event!
This is my first time coding in C, so please double check everything! But in the emulator this seemed to work!
watch faces that handle EVENT_LIGHT_BUTTON_UP but not EVENT_LIGHT_BUTTON_DOWN
probably don't want the default EVENT_LIGHT_BUTTON_DOWN LED activation behavior
* minor enhancements for the countdown face
* Changed usage of countdown timer.
- Long button presses have been removed.
- The light button is used to restore the last countdown as well as enter setting mode when pressed again.
- The visual state has been removed from the display.
- The internal states have been renamed to reflect the new logic.
* restore time when countdown finished.
* support for fast forward on long press (untested).
* support for beeps similar to stop watch
* fixed bug wiht display when fast forwarding
* totp : rework and add SHA256/512
* totp : comment code
* totp : fix SHA224/SHA384 and examples
* totp : fix bug in totp_face_lfs
* totp : init_totp_record to SHA1
* totp : move TOTP-MCU to TOTP, update README and example
* totp : SHAX, use size_t n instead of harcoded 8
* clarify what to put in TOTP face
Co-authored-by: Emilien <Emilien>
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* 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)
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* set time face: add quick cycling through hours, minutes, etc. and handle February 29th properly
* set time face: add failsafe for "hanging" quick cycle mode
* set time face: get rid of compiler warning
* set time face: Fix typo and indentation errors
* Add tally face
* Fix copyright block to reflect real author
* Fix indentation
* More style editing, edited comments
* silence warning in tally_face
Co-authored-by: Andrew Mike <andrew@7thmagic.net>
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* Intermediate changes
* Databank working
* Main commit for precision timing
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>
* Create template for tachymeter
* Basic working tachymeter
* Improve UI for running and results
* Allow editing distance
* Alarm long-press to enter and exit editing mode
* Improve light button behaviour
* Set distance digit wise.
* Use 250ms resolution for total time
* Improve comments
* Bugfix: Show distance when running and face becomes active
* Update `%d` to `%lu` in `sprintf` call for `uint32_t`
* Ignore Alarm button (Up and Long-press) when showing results
* Improve GUI when running and face gets activated
* Change speed indicator from `/H` to `/h`
* silence warnings in tachymeter face
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* 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
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* Calculator face with guess a number
* Add more functions, cleanup, and blinking
* Display operations better in the first location
* Clean up stack behaviour
Add empty stack behaviour, check stack bounds, add stack operations.
Also, make 'mode' always work to switch through faces on entering calculator
(i.e. by defaulting to OPERATION rather than NUMBER).
Some edge cases.
* Tweak negative rounding behaviour; add basic doco
* Add copyright name.
* Flip ordering of binary operations
* Fix compiler warnings
* Remove watch_private_display hackery and give face a better name
Also, slightly clearer documentation and a dupe function.
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.
- 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
* 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...
* Undo accidental change to movement_config.h
* 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)
Co-authored-by: joeycastillo <joeycastillo@utexas.edu>
* Initial work on probability watch face
* Complete probability watch face
* Restore default movement_config
* PR feedback: PR watch face title, use arc4random, clean up warnings
* Use rand instead of arc4random when building on emulator
* Accidentally overwrote movement_config