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>
This commit is contained in:
Max Zettlmeißl 2024-01-21 00:15:01 +01:00 committed by Matheus Afonso Martins Moreira
parent 4633be0845
commit 26e1b7bdc4
4 changed files with 35 additions and 2 deletions

View File

@ -130,6 +130,7 @@ void totp_face_activate(movement_settings_t *settings, void *context) {
bool totp_face_loop(movement_event_t event, movement_settings_t *settings, void *context) { bool totp_face_loop(movement_event_t event, movement_settings_t *settings, void *context) {
(void) settings; (void) settings;
totp_state_t *totp_state = (totp_state_t *)context; totp_state_t *totp_state = (totp_state_t *)context;
totp_t *totp;
switch (event.event_type) { switch (event.event_type) {
case EVENT_TICK: case EVENT_TICK:
@ -148,12 +149,27 @@ bool totp_face_loop(movement_event_t event, movement_settings_t *settings, void
// wrap around to first key // wrap around to first key
totp_state->current_index = 0; totp_state->current_index = 0;
} }
totp_t *totp = totp_current(totp_state); totp = totp_current(totp_state);
TOTP(totp->key, totp->key_length, totp->period, totp->algorithm);
totp_display(totp_state);
break;
case EVENT_LIGHT_BUTTON_UP:
if (totp_state->current_index == 0) {
// Wrap around to the last credential.
totp_state->current_index = totp_total() - 1;
} else {
totp_state->current_index--;
}
totp = totp_current(totp_state);
TOTP(totp->key, totp->key_length, totp->period, totp->algorithm); TOTP(totp->key, totp->key_length, totp->period, totp->algorithm);
totp_display(totp_state); totp_display(totp_state);
break; break;
case EVENT_ALARM_BUTTON_DOWN: case EVENT_ALARM_BUTTON_DOWN:
case EVENT_ALARM_LONG_PRESS: case EVENT_ALARM_LONG_PRESS:
case EVENT_LIGHT_BUTTON_DOWN:
break;
case EVENT_LIGHT_LONG_PRESS:
movement_illuminate_led();
break; break;
default: default:
movement_default_loop_handler(event, settings); movement_default_loop_handler(event, settings);

View File

@ -58,6 +58,8 @@
* o Once finished, remove the two provided examples. * o Once finished, remove the two provided examples.
* *
* If you have more than one secret key, press ALARM to cycle through them. * If you have more than one secret key, press ALARM to cycle through them.
* Press LIGHT to cycle in the other direction or keep it pressed longer to
* activate the light.
*/ */
#include "movement.h" #include "movement.h"

View File

@ -255,8 +255,21 @@ bool totp_face_lfs_loop(movement_event_t event, movement_settings_t *settings, v
totp_face_set_record(totp_state, (totp_state->current_index + 1) % num_totp_records); totp_face_set_record(totp_state, (totp_state->current_index + 1) % num_totp_records);
totp_face_display(totp_state); totp_face_display(totp_state);
break; break;
case EVENT_LIGHT_BUTTON_UP:
if (totp_state->current_index - 1 >= 0) {
totp_face_set_record(totp_state, totp_state->current_index - 1);
} else {
// Wrap around to the last record.
totp_face_set_record(totp_state, num_totp_records - 1);
}
totp_face_display(totp_state);
break;
case EVENT_ALARM_BUTTON_DOWN: case EVENT_ALARM_BUTTON_DOWN:
case EVENT_ALARM_LONG_PRESS: case EVENT_ALARM_LONG_PRESS:
case EVENT_LIGHT_BUTTON_DOWN:
break;
case EVENT_LIGHT_LONG_PRESS:
movement_illuminate_led();
break; break;
default: default:
movement_default_loop_handler(event, settings); movement_default_loop_handler(event, settings);

View File

@ -47,6 +47,8 @@
* to modify the URI. * to modify the URI.
* *
* If you have more than one secret key, press ALARM to cycle through them. * If you have more than one secret key, press ALARM to cycle through them.
* Press LIGHT to cycle in the other direction or keep it pressed longer to
* activate the light.
*/ */
#include "movement.h" #include "movement.h"