add timeout menu

This commit is contained in:
King Kévin 2024-04-14 05:53:56 +02:00
parent d5ae799100
commit 1db10e1f07
1 changed files with 71 additions and 6 deletions

View File

@ -104,11 +104,13 @@ static void board_supplement_init(void)
HAL_GPIO_Init(BUTTON2_PORT, &GPIO_InitStruct);
}
uint32_t board_button1_read(void) {
uint32_t board_button1_read(void)
{
return BUTTON1_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON1_PORT, BUTTON1_PIN);
}
uint32_t board_button2_read(void) {
uint32_t board_button2_read(void)
{
return BUTTON2_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON2_PORT, BUTTON2_PIN);
}
@ -188,8 +190,8 @@ int main(void)
tud_task(); // tinyusb device task
// check for credential timeout
const uint32_t minutes = board_millis() / 1000 / 60;
if (credentials && ((minutes > entered_when + config.timeout_global) || (minutes > entered_when + TIMEOUT_GLOBAL))) {
const uint32_t minutes = board_millis();
if (credentials && ((minutes > entered_when + config.timeout_global * 1000 * 60) || (minutes > entered_when + TIMEOUT_GLOBAL * 1000 * 60))) {
const char str[] = "global timeout reached, clearing cedentials\r\n";
tud_cdc_write_str(str);
tud_cdc_write_flush();
@ -201,7 +203,7 @@ int main(void)
pasted_when = 0;
entered_when = 0;
}
if (credentials && ((minutes > pasted_when + config.timeout_repeat) || (minutes > pasted_when + TIMEOUT_REPEAT))) {
if (credentials && ((minutes > pasted_when + config.timeout_repeat * 1000 * 60) || (minutes > pasted_when + TIMEOUT_REPEAT * 1000 * 60))) {
const char str[] = "repeat timeout reached, clearing cedentials\r\n";
tud_cdc_write_str(str);
tud_cdc_write_flush();
@ -256,6 +258,8 @@ void tud_resume_cb(void)
//--------------------------------------------------------------------+
void cdc_task(void)
{
static char tmp[64];
// connected() check for DTR bit
// Most but not all terminal client set this when making connection
// if ( tud_cdc_connected() )
@ -285,6 +289,16 @@ void cdc_task(void)
str = "\r\nbuttons swapped\r\n";
save_config();
break;
case 'g': // set global timeout
i = 0; // reset index
menu = MENU_TIMEOUT_GLOBAL;
str = "\r\nenter global timeout in minutes: ";
break;
case 'r': // set repeat timeout
i = 0; // reset index
menu = MENU_TIMEOUT_REPEAT;
str = "\r\nenter repeat timeout in minutes: ";
break;
case '\r':
case '\n':
break; // nothing to do
@ -293,7 +307,10 @@ void cdc_task(void)
str = "\r\npress key to enter menu\r\n" \
"h help\r\n" \
"c enter credentials\r\n" \
"b swap buttons\r\n";
"b swap buttons\r\n" \
"r set repeat timeout\r\n" \
"g set global timeout\r\n" \
;
}
break;
case MENU_USER:
@ -336,6 +353,54 @@ void cdc_task(void)
}
}
break;
case MENU_TIMEOUT_GLOBAL:
for (uint16_t j = 0; j < count; j++) {
if ('\r' == buf[0] || '\n' == buf[0]) { // end received
tmp[i] = 0; // end time input
const uint16_t time = atoi(tmp);
if (strlen(tmp) > 0 && time > 0) {
config.timeout_global = time;
}
if (config.timeout_global > TIMEOUT_GLOBAL) {
config.timeout_global = TIMEOUT_GLOBAL;
}
snprintf(tmp, sizeof(tmp), "\r\nglobal timeout set to %u minutes\r\n", config.timeout_global);
str = tmp;
i = 0; // reset index
save_config();
menu = MENU_HOME; // go to next menu
} else if (i >= sizeof(tmp) - 2) {
memset(tmp, 0, sizeof(tmp)); // clear password
str = "\r\nlimit reached\r\n";
} else {
tmp[i++] = buf[j]; // save password
}
}
break;
case MENU_TIMEOUT_REPEAT:
for (uint16_t j = 0; j < count; j++) {
if ('\r' == buf[0] || '\n' == buf[0]) { // end received
tmp[i] = 0; // end time input
const uint16_t time = atoi(tmp);
if (strlen(tmp) > 0 && time > 0) {
config.timeout_repeat = time;
}
if (config.timeout_repeat > TIMEOUT_REPEAT) {
config.timeout_repeat = TIMEOUT_REPEAT;
}
snprintf(tmp, sizeof(tmp), "\r\nrepeat timeout set to %u minutes\r\n", config.timeout_repeat);
str = tmp;
i = 0; // reset index
save_config();
menu = MENU_HOME; // go to next menu
} else if (i >= sizeof(tmp) - 2) {
memset(tmp, 0, sizeof(tmp)); // clear password
str = "\r\nlimit reached\r\n";
} else {
tmp[i++] = buf[j]; // save password
}
}
break;
default: // unknown menu
menu = MENU_HOME; // revert to home
}