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:
parent
4633be0845
commit
26e1b7bdc4
@ -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);
|
||||||
|
@ -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"
|
||||||
|
@ -163,7 +163,7 @@ static void totp_face_lfs_read_file(char *filename) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we found a probably valid TOTP record, keep it.
|
// If we found a probably valid TOTP record, keep it.
|
||||||
if (totp_records[num_totp_records].secret_size) {
|
if (totp_records[num_totp_records].secret_size) {
|
||||||
num_totp_records += 1;
|
num_totp_records += 1;
|
||||||
} else {
|
} else {
|
||||||
@ -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);
|
||||||
|
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user