Commit graph

703 commits

Author SHA1 Message Date
David Volovskiy 57ca74b253 Added SONIC and LASER to the allowed words 2024-09-03 16:11:54 -04:00
David Volovskiy 935ede9fda Fixed leaving the screen and coming back 2024-09-03 16:11:54 -04:00
David Volovskiy 4257b71562 combined two areas of code into one function 2024-09-03 16:11:54 -04:00
David Volovskiy 67c1089fb2 Don't delete the submitted characters if already guessed or not in dict 2024-09-03 16:11:54 -04:00
David Volovskiy a0111fbe24 Swapped the Nice and Job so the Nice text is more likely to appear first. 2024-09-03 16:11:54 -04:00
David Volovskiy 2a10402d19 Removed wordle from movmeent face after testing 2024-09-03 16:08:12 -04:00
David Volovskiy 4bb4bc85fa USE_RANDOM_GUESS variable added 2024-09-03 16:08:12 -04:00
David Volovskiy 1e76022146 Gave the wordle face the ability to give random guesses on the first word 2024-09-03 16:08:12 -04:00
David Volovskiy 1675af6449 bug fix on max score 2024-09-03 16:08:12 -04:00
David Volovskiy 6dd46b46b1 Able to turn the expanded dict on and off with a variable 2024-09-03 16:08:12 -04:00
David Volovskiy 10eda8b208 Added expanded dictionary to check against 2024-09-03 16:08:12 -04:00
David Volovskiy 580f8bf8ee bugfix on iterating to previous position 2024-09-03 16:08:12 -04:00
David Volovskiy 02f6a3256c Added documentation for Wordle face 2024-09-03 16:08:12 -04:00
David Volovskiy 3e327eb7fd Another fix on the word_check 2024-09-03 16:08:12 -04:00
David Volovskiy cef0d8836a Don't allow readding already guessed items 2024-09-03 16:08:12 -04:00
David Volovskiy 8ea779874f Face compares the values correctly now and does a dict lookup first 2024-09-03 16:08:12 -04:00
David Volovskiy 0c86be4a40 Swapped button mapping and removed fast iteration 2024-09-03 16:08:12 -04:00
David Volovskiy 676f50d194 Added fast cycle 2024-09-03 16:08:12 -04:00
David Volovskiy 3a24ede3de day streak and further wordle dev 2024-09-03 16:08:12 -04:00
David Volovskiy ee53e83ae7 Changed dict to a smaller and simpler one 2024-09-03 16:08:12 -04:00
David Volovskiy 6bf22edbdc Continued Wordle dev 2024-09-03 16:08:12 -04:00
David Volovskiy 2e878e146c Start of Wordle 2024-09-03 16:08:12 -04:00
Matheus Afonso Martins Moreira a67076f437 Merge PR #458 - add layla tune
Awesome lick from Eric Clapton - Layla.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/458
2024-09-03 00:49:20 -03:00
Matheus Afonso Martins Moreira 23c422b27a Merge PR #459 - add power rangers tune
The power lies on their side.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/459
2024-09-03 00:42:33 -03:00
mcguirepr89 b774900ae6 finally squashed the bug 2024-09-02 13:10:26 -04:00
Metehan 696f7f12ec add power rangers tune 2024-09-02 02:11:27 +03:00
Metehan 6268ce4381 update layla tune 2024-09-02 00:03:21 +03:00
mcguirepr89 12b1432aae mode long press = reset_all() 2024-09-01 10:10:59 -04:00
Metehan 6f7693e880 add layla tune 2024-09-01 02:33:05 +03:00
mcguirepr89 20946e88f4 Merge remote-tracking branch 'fork/add_simple_calculator_face' into add_simple_calculator_face 2024-08-31 17:51:01 -04:00
mcguirepr89 70426751f8 negative toggle was only for first_num -- fixed 2024-08-31 17:47:15 -04:00
mcguirepr89 c75a21196f commented out debugging printf() statements 2024-08-31 14:46:23 -04:00
mcguirepr89 b607b6f7a9 removed note about mode long press 2024-08-31 12:44:29 -04:00
mcguirepr89 e13d42b5b5 mode=movement_move_to_next_face & longmode = face0 2024-08-31 12:41:57 -04:00
mcguirepr89 28db77f90c forgot to mention long press MODE for next face 2024-08-31 08:36:02 -04:00
mcguirepr89 18154deef4 Adds a simple calculator face 2024-08-31 08:31:26 -04:00
Matheus Afonso Martins Moreira 879c48ce4d Merge PR #417 - improve 24h only mode
Enhances 24 hour only mode by setting defaults properly
and skipping past the 12/24 hour settings page in the
preferences watch face.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/417
2024-08-30 16:47:47 -03:00
Matheus Afonso Martins Moreira dea05663b0 Merge PR #428 - fix issues in sunrise/sunset
Takes zero into account, allowing the sunrise/sunset watch face
to work with no presets defined.

Also resolves a warning during compilation of the sunrise/sunset face.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/428
2024-08-30 16:47:47 -03:00
Matheus Afonso Martins Moreira 663cd725f8 Merge PR #434 - fix leap years
Improves handling of months in the Sensor Watch
by computing whether the given year is a leap year.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/434
2024-08-30 16:47:38 -03:00
Matheus Afonso Martins Moreira c8ca0d3619 Merge PR #431 - fix wrong number of days in month
July has 31 days and but was set to 30 days in the Sensor Watch.
This patch fixes the discrepancy.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/431
2024-08-30 16:46:22 -03:00
Matheus Afonso Martins Moreira 95ca374c98 Merge PR #433 - fix clock face indicators
I misinterpreted the documentation and swapped the alarm and time signal
indicators in the clock face. This patch brings it back in sync with
the original watch's behavior as described in the manual.

Reported-by: 814d3 (GitHub)
Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/433
References: https://github.com/joeycastillo/Sensor-Watch/pull/380
References: https://github.com/joeycastillo/Sensor-Watch/issues/132
2024-08-30 16:46:22 -03:00
Matheus Afonso Martins Moreira 657ff724d0 Merge PR #440 - fix countdown face issues
Avoid potential underflow when evaluating x - y with y > x.
Evaluate it only when y <= x instead.

Avoid clearing indicators in background task
since another watch face is likely active.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/440
2024-08-30 16:46:22 -03:00
Matheus Afonso Martins Moreira 42dc15117e Merge PR #447 - improve kim possible chime
The current one is slightly off compared to the original tune.

Original: https://www.youtube.com/watch?v=_3nfrGdVcv0
Before: https://onlinesequencer.net/4159215
After: https://onlinesequencer.net/4160385

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/447
2024-08-30 16:46:22 -03:00
Matheus Afonso Martins Moreira a715265af6 Merge PR #437 - debouncing logic
Mechanical switches exhibit temporary voltage fluctuations
when electrical contact is made, which manifest as "bouncing"
between the logical high and low states. Sampling the switch's
state during this period of stability produces invalid results.

The switch must be debounced by ignoring the generated interrupts
until the switch's state has stabilized. This is implemented by delaying
the input events until an empirically determined time has elapsed.
As such this pull request introduces customizable high resolution timers
for debouncing button down and up events.

This software debouncing unfortunately increases the sensor watch's
input latency. This is an acceptable tradeoff due to better usability:
watch faces which require holding down buttons such as the pulsometer
should work much more reliably after this patch.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
Tested-on-hardware-by: Krzysztof Gałka <@kshysztof@Discord>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/437
References: https://en.wikipedia.org/wiki/Switch#Contact_bounce
2024-08-30 16:44:38 -03:00
Matheus Moreira 9c093f9540 Merge PR #387 - configurable default birthdate/location
Adds the ability to configure at compilation time
the movement's default birth date and location.

Tested-by: madhogs <madhogs@protonmail.com>
Tested-by: Niehztog <niehztog@gmail.com>
Tested-on-hardware-by: madhogs <madhogs@protonmail.com>
Tested-on-hardware-by: Niehztog <niehztog@gmail.com>
Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/387
2024-08-30 16:44:38 -03:00
Matheus Moreira c7413322a5 Merge PR #439 - fix scheduled task misses
The movement was checking for scheduled tasks
by comparing for equality their scheduled times to
the current time. However, it is possible that the time
has moved past the scheduled time by the time the
function executes, leading to scheduled tasks not
being executed and therefore to missed deadlines.

Changing it to `<=` fixes the problem by taking that
possibility into account.

Helped-by: Wesley Ellis <tahnok@gmail.com>
Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/439
2024-08-30 16:44:38 -03:00
metehan-arslan 2a194dfa69
style: remove extra whitespace 2024-08-28 20:40:32 +00:00
metehan-arslan 77fb6202c9
Update SIGNAL_TUNE_KIM_POSSIBLE notes 2024-08-27 13:56:36 +03:00
David Volovskiy d5a8c57c82 Additional code review change 2024-08-23 22:25:02 -04:00
David Volovskiy c6f2bff75e Code review edits 2024-08-23 17:35:16 -04:00
Nicholas Rodrigues Lordello a4fc048f94
Update TOTP Face Documentation
The TOTP face header file documentation contained outdated instructions
for configuring the complication with TOTP credentials. This PR updates
the documentation to match what is expected in `totp_face.c`.
2024-08-22 14:53:17 +02:00
Joseph Bryant e2c5babb2c don't change the bell indicator from within background task 2024-08-18 22:09:37 +01:00
Joseph Bryant dcd4d12c0a avoid delta overflow in countdown draw 2024-08-18 22:09:17 +01:00
Joseph Bryant 20b4a32835 make sure we don't miss our scheduled tasks 2024-08-18 20:09:06 +01:00
David Volovskiy e9837ff0cb Stops Running cb_fast_tick when the watch debounce timer is defined as 0 2024-08-17 02:52:30 -04:00
David Volovskiy 2cdfa2d3b3 Set the debounce tick variables to 0 to make the face work the same as stock. 2024-08-17 02:45:22 -04:00
David Volovskiy 9861da84c3 Changed debounce to ignore button presses after a press down or up rathe rthan dact after a set amount of time due to an issue of delay_ms allowing a shoft-bricking 2024-08-11 11:00:08 -04:00
David Volovskiy 09576807eb Made the days_in_month its own function 2024-08-10 07:40:52 -04:00
David Volovskiy f85a7f2c78 Swapped the bell and alarm icon on the clock face to match Casio's doc 2024-08-10 06:38:46 -04:00
Struan 1da9d0aefe
fix: july has 31 days 2024-08-07 22:24:57 -06:00
Alex Maestas 44bdc8503e explain usage in format command when arg isn't YES 2024-08-05 23:11:54 +00:00
Alex Maestas ca1da33b82 in filesystem_init, handle the error code correctly 2024-08-05 23:09:24 +00:00
Alex Maestas 7000d08ba5 add a format command 2024-08-05 23:06:18 +00:00
David Volovskiy 598e876186 check_and_act_on_daylight_savings now only occurs in one spot 2024-08-04 10:11:33 -04:00
David Volovskiy 2824a62908 Bugfix on not registering the top of an hour 2024-08-04 09:53:04 -04:00
Christian Buschau 7a15ed3591
faces/alarm_thermometer: new watch face 2024-08-03 18:59:41 +02:00
David Volovskiy 51176344dc Made it so the code works with a completely empty preset list 2024-08-03 11:42:42 -04:00
David Volovskiy 84f0db0654 Fix to remove compiler complaint 2024-08-03 11:38:45 -04:00
David Volovskiy 6ae5dfef70 Leap Years Now Handled Dynamically 2024-08-03 11:20:25 -04:00
David Volovskiy aebea960c0 Cleanup to the default branch 2024-08-03 10:08:24 -04:00
David Volovskiy e50390b673 DST roll is now a global variable in watch_rtc 2024-08-03 10:07:57 -04:00
David Volovskiy 74421c7e65 Day roll back repeat fix 2024-08-03 09:39:02 -04:00
David Volovskiy fa2907e098 Some more cleanup 2024-08-03 09:38:00 -04:00
Christian Buschau db165bec30
Fix all days in a month 2024-08-03 12:22:15 +02:00
David Volovskiy bae8c65825 Made the faces I care about not need to continuously re-find the timezone 2024-08-02 07:37:30 -04:00
David Volovskiy 4c546b14dc The timezone now auto-corrects with DST (but still displays the same offset in the settings screen to the user) 2024-08-02 01:25:01 -04:00
David Volovskiy 149911e4ad Time now auto-updates with DST 2024-08-02 01:23:21 -04:00
EGS 278520bfaf Allow setting July 31st as today's date
To allow a valid date to be set the `set_time_face` cycles through the
valid days for a given month.  July was incorrectly encoded as having 30
days (it has 31!)
2024-07-31 18:17:04 +01:00
David Volovskiy 7bbac4cd80 Brought debounce time to 8ms rather than 15 2024-07-31 07:33:25 -04:00
David Volovskiy 027e42dc58 Moved a few lines around to match main 2024-07-31 07:25:09 -04:00
David Volovskiy e297b3013e Using debounce that triggers when there's no change for Xms rather than just ignoring new presses after Xms 2024-07-31 07:22:33 -04:00
David Volovskiy 607946ed2e A little bit of clean-up 2024-07-30 07:27:47 -04:00
David Volovskiy f7d1b8f9f3 Delay for starting the debounce no loonger happens 2024-07-29 23:53:25 -04:00
David Volovskiy 7f2ac61375 Fixed stuck fast_tick 2024-07-29 21:43:32 -04:00
David Volovskiy 73c3ba3ae7 Cleaned up code 2024-07-29 21:05:19 -04:00
David Volovskiy 36117ca207 using cb_fast_tick again 2024-07-29 20:48:17 -04:00
David Volovskiy 9727dac3c3 Revert "Leaving sleep with alarm button up doesn't trigger alarm button"
This reverts commit 7d5aaf60ca.
2024-07-29 20:28:10 -04:00
David Volovskiy 947e299494 Made the debounce register rising edges rather than falling edges 2024-07-29 20:13:54 -04:00
David Volovskiy 4a4fce428e Removed some dead code 2024-07-29 18:24:58 -04:00
David Volovskiy df2dac5a07 debouince now uses cb_fast_tick and holding the button now also gets debounced 2024-07-29 18:12:46 -04:00
David Volovskiy 7d5aaf60ca Leaving sleep with alarm button up doesn't trigger alarm button 2024-07-29 07:44:31 -04:00
David Volovskiy 4375ca37e0 Added debouncing 2024-07-29 07:39:51 -04:00
PrimmR a9e6b82f00 Update timeout & low energy behaviour 2024-07-25 15:31:25 +01:00
voloved 6e26c01de0
Holding light button on a non-element screen will turn on the light (#2)
* Holding light button on a non-element screen will turn on the light.

* The alarm and led button press moves back to the currently-selected element symbol page rather than the next and previous one

* Usage update
2024-07-25 14:18:56 +01:00
PrimmR cb90a1980f Added LED button combo 2024-07-24 11:18:24 +01:00
atax1a 42c14c2e5b
Merge pull request #420 from voloved/sunrise_sunset_presets
Added ability to add presets to the sunrise and sunset face
2024-07-24 04:49:03 +00:00
voloved c8702d346e
Added subscreens to periodic table face; added title and faster scrolling (#1)
* Added subscreens to periodic table face; added title and faster scrolling

* Resized buf for element display

* Fixed scrolling to work on actual hardware

* Added delay before _loop_text at title and bugfix on elements shorter than 6 char

* Title screen displays when le_mode starts

* Added documentation on usage and removed unneeded variable
2024-07-23 10:35:38 +01:00
James Haggerty 222c60b072 Fix TOTP LFS printf string 2024-07-21 09:10:28 +10:00
James Haggerty 5f1a651732 Keep light on if interacting
This makes it possible to do a bunch of things without
having to keep touching the light button.

I don't really see any downside with this. If you want
the light to go off, just stop touching buttons.
2024-07-21 08:25:54 +10:00
David Volovskiy a13c8c35b8 Code review commit 2024-07-20 15:59:42 -04:00
David Volovskiy 9ee319c888 Typo in comment 2024-07-20 14:48:32 -04:00
David Volovskiy a3d23ab45e Long press of Alarm goes back to default 2024-07-20 14:46:42 -04:00
David Volovskiy a7c0fb7dfd Added ability to add presets to the sunrise and sunset face 2024-07-20 14:35:37 -04:00
David Volovskiy 2afc2c6721 isolating this bit of complexity in movement function; Add ifdefs in clock faces for DCE 2024-07-10 07:22:55 -04:00
David Volovskiy 7f6a9e5c9b Typo fix on PREFERENCES_FACE_NUM_PREFERENCES 2024-07-08 18:33:17 -04:00
David Volovskiy b923d50652 CLOCK_FACE_24H_ONLY hides the preference to change the setting and defaults the mode to 24Hr mode 2024-07-08 18:32:41 -04:00
atax1a 5f5d86353f
Merge pull request #397 from madhogs/wyrun-totp-lfs-fix
Reduce totp_face_lfs memory usage
2024-07-08 21:10:46 +00:00
voloved 3eaf807590
Added Timeout; Ability to turn off LED and Sound; Added doublespeed mode. (#1)
* Check that color is valid

Instead of merely checking that COLOR is set, check that it is one of
RED, BLUE or GREEN

* Added ability to turn off sound and timer with modes

* Added enum for mode

---------

Co-authored-by: Wesley Ellis <tahnok@gmail.com>
2024-07-07 19:23:31 -04:00
joeycastillo 89a2af92ef silence warnings 2024-07-06 08:52:41 -04:00
Ruben Nic 7a2ecad334 Custom setting of switch from past to to index 2024-05-25 18:16:50 -04:00
Ruben Nic af0f8d2732 If the alarm is enabled show bell not signal 2024-05-18 10:44:43 -04:00
Ruben Nic 53f11cbd1e have close enough to update less and clean up code 2024-05-15 12:30:00 -04:00
Ruben Nic fa35b8bb77 Add close enough clock face 2024-05-06 20:32:59 -04:00
Matt Greer 9794f86430 simon_face: Simon game complication 2024-05-05 13:43:33 -04:00
R. Alex Barbieri 2ce07f9539 add blinking to DST toggle in settings page 2024-04-27 13:33:32 -05:00
R. Alex Barbieri e3d67af604 Merge remote-tracking branch 'origin/main' into manual_dst_toggle
* origin/main: (119 commits)
  add an openocd.cfg for openocd 0.12.0
  Fix compile errors and warnings in movement.c and shell.c
  faces/totp: avoid displaying when key is invalid
  faces/totp: fix error message not displayed bug
  faces/totp: remove dynamic memory allocation
  faces/totp: improve memory usage
  faces: restore simple_clock_face
  uf2conv: argument to `re.split` should be a rawstring
  movement: fix unintended timeout short circuiting
  movement: convert can_sleep an automatic variable
  faces/pulsometer: remember pulsometer measurement
  faces/pulsometer: remember pulsometer calibration
  faces/totp: update copyrights
  faces/totp: allow moving backwards through codes
  faces/clock: add 24h only feature
  faces/clock: update copyrights and credits
  faces/totp: delete leading underscores
  faces/totp: rename initializer macro to credential
  faces/totp: improve TOTP initializer labeling
  faces/totp: decode secrets when setting up
  ...
2024-04-27 13:23:53 -05:00
James Haggerty 77ea1b8965 Reduce totp_face_lfs memory usage 2024-04-26 16:05:35 +01:00
atax1a 439843f56b
Merge pull request #388 from TheOnePerson/fix-compile-errors
Fix compile errors and warnings in movement.c and shell.c
2024-04-09 22:24:19 +00:00
madhogs 524098b925 add the ability to set location and birthdate in movement config 2024-03-31 13:27:54 +01:00
TheOnePerson c22123961f Fix compile errors and warnings in movement.c and shell.c 2024-03-29 11:49:48 +01:00
Wesley Black 69f25f1016
Add files via upload 2024-03-20 17:54:23 -03:00
Wesley Black 0e70adf4d4
Update movement_faces.h 2024-03-20 17:53:45 -03:00
Matheus Afonso Martins Moreira 10701f3d50 faces/totp: avoid displaying when key is invalid
Fixes a division by zero bug caused by calling getCodeFromTimestamp
without having initialized the TOTP library with a secret first.
This was happening because the face calls totp_display on activation,
meaning the validity of the secret was not checked since this is
done in the generate function.

Now the validity of the key is determined solely by the size
of the current decoded key. A general display function checks it
and decides whether to display the code or just the error message.

The size of the current decoded key is initialized to zero
on watch face activation, ensuring fail safe operation.

Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: madhogs <59648482+madhogs@users.noreply.github.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/385
2024-03-20 12:54:20 -03:00
Matheus Afonso Martins Moreira 7e5c34773a faces/totp: fix error message not displayed bug
Forgot to call watch_display_string on the error message.
Of course the message isn't going to be displayed.

Also, increase the buffer size to 10 characters
and output a space to the last position.
This ensures the segments are cleared.

Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: madhogs <59648482+madhogs@users.noreply.github.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/385
2024-03-20 12:54:10 -03:00
Matheus Afonso Martins Moreira 3f850d79c8 faces/totp: remove dynamic memory allocation
Allocate an unlimited extent 128 byte buffer once during setup
instead of allocating and deallocating repeatedly. A static buffer
was not used because it fails to be reentrant and prevents multiple
instances of the watch face to be compiled by the user.

The advantage is the complete prevention of memory management errors,
improving the reliability of the watch. It also eliminates the overhead
of the memory allocator itself since malloc is not free.
The disadvantage is a worst case default size of 128 bytes was required,
meaning about 90 bytes will be wasted in the common case since most keys
are not that big. This can be overridden by the user via preprocessor.

The key lengths are checked on TOTP watch face initialization
and if any key is found to be too large to fit the buffer
it is turned off and the label and ERROR is displayed instead.

The base32 encoded secrets are decoded dynamically to the buffer
at the following times:

 - Face enters the foreground
 - User switches TOTP code

Therefore, there is still some extra runtime overhead
that can still be eliminated by code generation.
This will be addressed in future commits.

Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: madhogs <59648482+madhogs@users.noreply.github.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/385
2024-03-18 11:40:55 -03:00
Matheus Afonso Martins Moreira df38c262b8 faces/totp: improve memory usage
The TOTP face is working in the simulator but fails on the real hardware
when loaded with lots of codes, just like the LFS version.
This is likely caused by the recent refactoring of the TOTP face
which introduced a declarative credential interface for ease of use.
That's accomplished by decoding the secrets at runtime which increases
the RAM requirements. Users are likely hitting memory limits.

In order to mitigate this, the algorithm is changed from decoding
all of the secrets only once during initialization to on the fly
decoding of the secret for the current TOTP credential only.
This converts this face's dynamic memory usage from O(N) to O(1)
at the cost of memory management when switching faces and credentials
which could impact power consumption. Issue is confirmed fixed by
author of issue who has tested it on real hardware. Fixes #384.

Due to variable key sizes, the memory cannot be statically allocated.
Perhaps there's a maximum key size that can serve as worst case?

Also took this opportunity to restructure the code a bit.
Also added code to check for memory allocation failure.

Reported-by: madhogs <59648482+madhogs@users.noreply.github.com>
Fixed-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: madhogs <59648482+madhogs@users.noreply.github.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Issue: https://github.com/joeycastillo/Sensor-Watch/issues/384
2024-03-17 20:48:54 -03:00
Matheus Afonso Martins Moreira 955ac94de3 faces: restore simple_clock_face
Restore the original simple clock face as requested.
2024-03-16 20:04:08 -03:00
Matheus Afonso Martins Moreira 8bf652f213 Merge branch 'timeout-event-and-sleep-logic'
Currently, movement drops timeout events in case the previous loop
indicates that sleep is not possible. This is due to unintended
short circuiting behavior of && and is fixed with a temporary variable.

The static qualifier of can_sleep is also removed.

Helped-by: Alex Maestas <git@se30.xyz>
Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/376
2024-03-08 06:56:55 -03:00
Matheus Afonso Martins Moreira ca40d101d3 Merge branch 'structured-totp+maxz' into advanced
Aggregates the TOTP credentials into a data structure,
making it easier to define and use the credentials.
Also incorporate backwards movement code from another branch.

Co-authored-by: Max Zettlmeißl <max@zettlmeissl.de>
Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/369
GitHub-Related-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/356
2024-03-08 06:56:31 -03:00
Matheus Afonso Martins Moreira 66796805ac Merge branch 'advanced-pulsometer' into advanced
Implements an advanced pulsometer that can be calibrated by the user.
Also features a streamlined and responsive user interface,
new documentation and generally improved code.

Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/371
2024-03-08 06:54:50 -03:00
Matheus Afonso Martins Moreira 4b269c5063 Merge branch 'advanced-clock+24h' into advanced
Completely refactors the simple clock face
and lays the foundations for new features.

Also adds a compile time 24 hour mode only feature.

Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/373
2024-03-08 06:54:22 -03:00
Matheus Afonso Martins Moreira 7208df1dfb Merge branch 'moon-phase-face-long-press-reset'
Makes a long press of the ALARM button reset the face to current day.

Reviewed-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-by: Wesley Aptekar-Cassels <me@wesleyac.com>
Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/316
2024-03-08 06:52:49 -03:00
Matheus Afonso Martins Moreira f35cb849de Merge branch 'compile-time-preferences'
Adds overridable C preprocessor definitions for every user preference.
Enables the user to set defaults and omit the preferences face.

The default behavior of the watch is preserved.

Suggested-by: Wesley Aptekar-Cassels <me@wesleyac.com>
Implemented-by: madhogs <x3dh4vhf@duck.com>
Reviewed-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/295
GitHub-Related-Issue: https://github.com/joeycastillo/Sensor-Watch/issues/291
2024-03-08 06:52:22 -03:00
Matheus Afonso Martins Moreira 35c0a4be87 Merge branch 'usb-improvements' into advanced
- Change newline prints to also send carriage return
 - Introduce shell module for serial shell with argument parsing
 - Introduce shell command list for compile time command registration
 - Refactor file system commands for shell subsystem
 - Introduce new shell commands:
   - 'help' command
   - 'flash' command to reset into bootloader
   - 'stress' tests CDC serial writes of various lengths
     - optional delay parameter
 - Harden USB handling
   - Hangs less
   - Drops fewer inputs
 - Circular buffers for both reads and writes

Reported-by: Edward Shin <contact@edwardsh.in>
Tested-by: Edward Shin <contact@edwardsh.in>
Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Reviewed-by: James Haggerty <james@gruemail.com>
Reviewed-by: Wesley Aptekar-Cassels <me@wesleyac.com>
Reviewed-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/344
2024-03-08 06:51:34 -03:00
Matheus Afonso Martins Moreira 592e18bf0e Merge branch 'silicon-errata' into advanced
Implements the recommended workarounds for numerous silicon errata,
reducing power consumption and preventing freezes and hard faults.

Tested-by: Alex Maestas <git@se30.xyz>
Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Alex Maestas <git@se30.xyz>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Reviewed-by: Wesley Aptekar-Cassels <me@wesleyac.com>
Reviewed-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/340
GitHub-Related-Issue: https://github.com/joeycastillo/Sensor-Watch/issues/361
GitHub-Related-Issue: https://github.com/joeycastillo/Sensor-Watch/issues/359
Reference: https://ww1.microchip.com/downloads/aemDocuments/documents/MCU32/ProductDocuments/Errata/SAM-L22-Family-Silicon-Errata-and-Data-Sheet-Clarification-DS80000782.pdf
2024-03-08 06:50:16 -03:00
Matheus Afonso Martins Moreira a4ee7dd7fc Merge 'fix-sunrise-sunset-uninitialized'
Fixes a crash due to use of uninitialized buffer when setting location.

Reported-by: eshrh <esrh@gatech.edu>
Fixed-by: Wesley Aptekar-Cassels <me@wesleyac.com>
Reviewed-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
Signed-off-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/329
GitHub-Issue: https://github.com/joeycastillo/Sensor-Watch/issues/198
Fixes: https://github.com/joeycastillo/Sensor-Watch/issues/198
2024-03-08 06:49:18 -03:00
Matheus Afonso Martins Moreira b1adbd548e movement: fix unintended timeout short circuiting
Currently, movement drops time out events in case the previous loop
indicates that sleep is not possible due to short circuiting behavior
of logical and in C: if the left-hand side is false, the right hand
side is not evaluated at all, which means the loop is not called.
This was not intended to happen.

Fix it by storing the result in a second boolean variable
and working out the logic after the fact.
2024-03-05 21:49:32 -03:00
Matheus Afonso Martins Moreira 6ca553e648 movement: convert can_sleep an automatic variable
It is a simple boolean value and its scope is limited to the function.
There is no reason that I can think of for it to be a static variable.
2024-03-05 21:08:10 -03:00
Matheus Afonso Martins Moreira fb3b96c8b7 faces/pulsometer: remember pulsometer measurement
Avoid resetting it to zero when the face is activated.
Initialize the variables once when the face is first set up.

This makes it remember the last measurement taken by the user.
It will no longer be overwritten when the watch face activates.
2024-03-05 04:41:58 -03:00
Matheus Afonso Martins Moreira e1b1493894 faces/pulsometer: remember pulsometer calibration
Avoid resetting it to default when the face is activated.
Set the default pulsometer calibration once,
only when the face is first set up.

This makes it remember the calibration set by the user.
It will no longer overwrite it.
2024-03-05 04:14:10 -03:00
Matheus Afonso Martins Moreira 92baa2200f faces/totp: update copyrights
Update the copyrights to include full name attribution
to Max Zettlmeißl whose code I've incorporated and who
has explicitly licensed it as MIT.

Max Zettlmeißl (@maxz) commented on 2024-01-20:

> I provide all my changes under the MIT license

GitHub-Comment: https://github.com/joeycastillo/Sensor-Watch/pull/356#issuecomment-1902114306
2024-03-05 03:58:09 -03:00
Max Zettlmeißl 26e1b7bdc4 faces/totp: allow moving backwards through codes
Adds the ability to cycle back to the previous credential with LIGHT.
Long pressing LIGHT activates the LED.

Co-authored-by: Matheus Afonso Martins Moreira <matheus.a.m.moreira@gmail.com>
2024-03-05 03:58:09 -03:00
Matheus Afonso Martins Moreira 4a66035f77 faces/clock: add 24h only feature
The clock watch face can now be configured at build time
to only display the time in 24h mode. Also enabled in forced 24h mode.

This should result in smaller code size due to dead code elimination.
2024-03-05 00:46:27 -03:00
Matheus Afonso Martins Moreira 4cca3a0fac faces/clock: update copyrights and credits
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.
2024-03-05 00:46:27 -03:00
Matheus Afonso Martins Moreira 4633be0845 faces/totp: delete leading underscores
Makes for cleaner symbols.
2024-02-25 22:57:47 -03:00
Matheus Afonso Martins Moreira 238709e1d9 faces/totp: rename initializer macro to credential
Shorter and far more expressive.
2024-02-25 22:53:15 -03:00
Matheus Afonso Martins Moreira 46a4076f9e faces/totp: improve TOTP initializer labeling
It now generates the string literal from the preprocessor token.
Even warns the user if the string is too long!
2024-02-25 22:52:31 -03:00
Matheus Afonso Martins Moreira d70511515e faces/totp: decode secrets when setting up
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.
2024-02-25 22:50:47 -03:00
Matheus Afonso Martins Moreira 69639a5736 faces/clock: indicate low power only when needed
There is no need to set the indicator on every clock tick.
Indicate only when the battery is checked.
2024-02-25 15:24:15 -03:00
Matheus Afonso Martins Moreira 5c376d9b9a faces/clock: indicate alarm only when necessary
The alarm state is not modified within the clock face.
Therefore, it only needs to be set when the face is activated.
2024-02-25 15:24:15 -03:00