diff options
| author | Akshay Nair <phenax5@gmail.com> | 2026-02-28 17:37:19 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2026-02-28 17:37:19 +0530 |
| commit | 18268280dc6c0bd44035b53655ae43e9c88245bd (patch) | |
| tree | c17b1703d8a3deb4cd67a6e6466d024f02a49bb7 /src/mode.c | |
| parent | 02c12bfedcf669df81491ea49502a982e980bcda (diff) | |
| download | daft-watch-18268280dc6c0bd44035b53655ae43e9c88245bd.tar.gz daft-watch-18268280dc6c0bd44035b53655ae43e9c88245bd.zip | |
Add set time mode + test for button
Diffstat (limited to 'src/mode.c')
| -rw-r--r-- | src/mode.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/mode.c b/src/mode.c new file mode 100644 index 0000000..b6fad97 --- /dev/null +++ b/src/mode.c @@ -0,0 +1,74 @@ +#include <stdint.h> + +#include "mode.h" +#include "rtc.h" + +enum Mode current_mode = ModeDisplayTime; +volatile uint8_t new_minutes = 0; +volatile uint8_t new_hours = 0; +volatile uint8_t current_digit_index = 0; +volatile uint16_t time_set_timeout_ticks = 0; + +void increment_digit() { + switch (current_digit_index) { + case 0: + new_hours = (new_hours + 10) % 24; + break; + case 1: + new_hours = (new_hours + 1) % 24; + break; + case 2: + new_minutes = (new_minutes + 10) % 60; + break; + case 3: + new_minutes = (new_minutes + 1) % 60; + break; + } +} + +void apply_button_state(enum ButtonState button_state) { + switch (current_mode) { + case ModeDisplayTime: + switch (button_state) { + case ButtonLongPressed: + new_minutes = minutes; + new_hours = hours; + current_digit_index = 0; + current_mode = ModeSetTime; + break; + default: + break; + } + break; + case ModeSetTime: + if (button_state == ButtonIdle) { + time_set_timeout_ticks = + time_set_timeout_ticks == 0 ? 0 : time_set_timeout_ticks - 1; + if (time_set_timeout_ticks == 0) { + current_mode = ModeDisplayTime; + return; + } + } else { + time_set_timeout_ticks = 10 * 1024; + } + + switch (button_state) { + case ButtonPressed: + increment_digit(); + break; + case ButtonLongPressed: + if (current_digit_index == 3) { + rtc_set_minutes(new_minutes); + rtc_set_hours(new_hours); + current_mode = ModeDisplayTime; + current_digit_index = 0; + } else { + current_digit_index++; + } + break; + default: + break; + } + break; + } +} |
