Commit graph

240 commits

Author SHA1 Message Date
Matheus Afonso Martins Moreira a2e5417de9 Merge PR #461 - improve t/y special case docs
Fix a typo and make the documentation clearer.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/461
2024-09-03 00:28:25 -03:00
Matheus Afonso Martins Moreira fa0cdef45b Merge PR #450 - sync after enabling RTC
According to the data sheet, writing to a Control A register's ENABLE
bit will trigger write synchronization and set SYNCBUSY's ENABLE bit
which will be automatically cleared by the hardware once the write
operation is complete.

It is necessary to wait until SYNCBUSY's ENABLE bit is clear.
Reading synchronized registers before that returns previous values.
Writing synchronized registers before that drops the write and generates
an error value in another register.

The data sheet recommends polling the ENABLE bit in this situation.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/450
References: SAM L22 Family Data Sheet §§ 14.3.2, 14.3.3, 14.3.4, 14.3.5
2024-08-30 16:47:47 -03:00
Matheus Afonso Martins Moreira db4097bf84 Merge PR #426 - add temperature input to simulator
This patch enhances the Sensor Watch simulator with a temperature input
allowing users to simulate and test the temperature sensor.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/426
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
Joseph Bryant cae5d8a33f wait for RTC SYNCBUSY in watch_register_extwake_callback 2024-08-30 16:20:32 -03:00
David Volovskiy fe259ee526 Comment change 2024-08-26 21:40:56 -04:00
David Volovskiy 9640f452cd Made the T and Y characters look more unique on the 4 and 6 position 2024-08-22 20:46:47 -04:00
David Volovskiy 09576807eb Made the days_in_month its own function 2024-08-10 07:40:52 -04:00
Robert Masen ccf99a9727 add temp input to simulator 2024-08-02 18:20:44 -05:00
joeycastillo 5ec3dca9e4 documentation fix 2024-07-10 06:56:49 -04:00
joeycastillo ac5fb40730 remove dead code 2024-07-10 06:49:56 -04:00
Jose Castillo d98d14d236
Add support for Sensor Watch Pro (#412)
* Sensor Watch Pro board definition

* Disable hot-plugging on SWCLK

* Add rainbow test

* Move interrupt mapping to board config

* New color definition for Pro boards in makefile
2024-07-06 11:07:02 -04:00
joeycastillo 89a2af92ef silence warnings 2024-07-06 08:52:41 -04: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
Alex Maestas a2a60eb31a annotate SLEEPCFG-register detail 2024-01-22 00:39:20 +00:00
Alex Maestas af49d3cfcb annotate voltage regulation erratum 2024-01-22 00:39:20 +00:00
Alex Maestas 2ae8f9863b annotate SysTick erratum 2024-01-22 00:39:20 +00:00
Alex Maestas 83a0e4e992 annotate TRNG erratum, address review comment 2024-01-22 00:39:18 +00:00
Wesley Aptekar-Cassels 50dccd07d3 buzzer: fix simulator build, refactor sequence_length. 2024-01-09 16:22:21 -05:00
Wesley Aptekar-Cassels e9fe4aeefe Enable custom signal tones in LE mode.
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.
2024-01-09 16:22:21 -05:00
Edward Shin 5b762d0168 USB Improvements
* Introduce shell module for basic serial shell with argument parsing
* Introduce shell_cmd_list module for basic compile-time command
  registration
* Harden USB handling to hang less and drop fewer inputs
  - Service tud_task() with periodic TC0 timer interrupt
  - Service cdc_task() with periodic TC1 timer interrupt
  - Handle shell servicing in main app loop
  - Add a circular buffering layer for reads/writes
* Change newline prints to also send carriage return
* Refactor filesystem commands for shell subsystem
* Introduce new shell commands:
  - 'help' command
  - 'flash' command to reset into bootloader
  - 'stress' command to stress CDC writes

Testing:
* Shell validated on Sensor Watch Blue w/ Linux host
* Shell validated in emscripten emulator
* Tuned by spamming inputs during `stress` cmd until stack didn't crash
2024-01-07 00:20:20 -05:00
Alex Maestas de692e05e2 make any unknown interrupts/faults reset the microcontroller 2023-12-18 06:41:21 +00:00
Alex Maestas d96d6f9c91 make the HAL sleep function obey the chip documentation
the sleep mode doesn't get set immediately, and needs to be waited upon.
2023-12-18 03:09:36 +00:00
Alex Maestas d10fa223b2 address SysTick erratum, which can hard-fault the chip 2023-12-18 01:29:28 +00:00
Alex Maestas 93d7f38d67 fix simulator build by declaring Trng type as a void pointer 2023-12-17 22:40:04 +00:00
Alex Maestas 68f3865227 work around silicon erratum in SUPC/VREG 2023-12-17 17:40:19 +00:00
Alex Maestas 89e86fe629 work around silicon erratum in TRNG 2023-12-17 17:39:59 +00:00
Alex Maestas 8206f37fcf fix undefined behavior found by clang's sanitize 2023-12-07 02:24:26 +00:00
Hugo Chargois b82d728937 Simulator: Add keyboard arrows as buttons shortcuts 2023-11-19 19:50:39 +01:00
Hugo Chargois bd9d792230 Simulator: Allow sending debug command with Enter 2023-11-19 19:50:39 +01:00
Hugo Chargois 2534dc7a65 Simulator: Allow typing a, l & m in console input
These keys are the shortcuts to "press" the alarm, light and mode
buttons. However, they prevent these letters from being input in the
debug console to send filesystem commands. Strangely, there was already
some code to allow typing these letters in the console output, but not
in the input.
2023-11-19 19:45:51 +01:00
Wesley Aptekar-Cassels 76b580a5be
Merge pull request #262 from rieck/timestamp-fix
Fix for incorrect conversion from `watch_date_time` to Unix time.
2023-11-19 00:10:19 -05:00
Wesley Aptekar-Cassels c4a5cb463e
Merge pull request #276 from hchargois/simulator-volume-slider
Simulator volume slider
2023-11-18 23:17:56 -05:00
Victor Graf 5b212a4423
Fix simulator and hardware divergence in callback handling (#252)
When using the simulator, I encountered cases where the light would become stuck on, and the watch
would be unresponsive. In particular, this would occur when pressing the light button on the
sunrise sunset watch face.

I appears that this is caused by a divergence in out the callback mask is interpreted by the
hardware interface, and in the simulator in the following function.

void watch_rtc_disable_matching_periodic_callbacks(uint8_t mask)

In particular, a mask of 0xFE is intended to disable all except the 128hz callback at index 0,
but instead disables all except the 1hz callback at index 7 in the simulator.
2023-11-18 23:10:45 -05:00
Hugo Chargois 2e9ea8c36f Improve simulator page design 2023-11-19 01:24:57 +01:00
Hugo Chargois baadb0b43f Save the selected skin of the simulator in local storage 2023-09-16 02:39:39 +02:00
Hugo Chargois 2e364f4ef9 Add a volume slider in the simulator 2023-09-16 02:39:39 +02:00
Hugo Chargois ebfeb1f21a Turn on the funky segment of pos 0 for char '@' 2023-09-09 02:22:08 +02:00
joeycastillo e4ad0e5567 default year to 2023 2023-08-27 17:53:02 -04:00
Konrad Rieck 0f9bb0bd37 Fixed incorrect conversion from UNIX timestamp to watch_date_time. 2023-08-11 22:26:34 +02:00
Christian Chapman 462f24b313
Aperture priority light meter face (#230)
* 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>
2023-04-16 10:05:55 -04:00
TheOnePerson 739d719e7c simulator: add tiny element in the lower left corner for the first display position. 2023-02-25 15:24:32 +01:00
Ronny Lam eca75cfb23 Added option to use_iso_8601_weeknumber 2023-02-10 15:18:39 -06:00
joeycastillo 5163cf1fe1 Revert "never disable buzzer output"
This reverts commit 851d047c81.
2023-01-17 08:52:01 -06:00
TheOnePerson 47812f462d
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)
2023-01-11 15:26:33 -05:00
Mikhail Svarichevsky 6b71711079
Precision watch update (#152)
* 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>
2023-01-10 16:56:26 -05:00
gugray 18de75be5a
fixes 161: sets both CCBUF and PERFBUF for correct buzzer tone (#162) 2023-01-10 16:33:29 -05:00
joeycastillo 851d047c81 never disable buzzer output 2023-01-03 21:24:14 -06:00
joeycastillo 0be39a85fc
Merge pull request #149 from slim/main
Week number watch face
2022-12-14 09:40:22 -06:00