Menu Navigation - Long-Press Speed Ramping (#238)

Exponential button acceleration from @jonnieZG
This commit is contained in:
jonnieZG
2018-03-18 21:22:42 +01:00
committed by Ben V. Brown
parent fb6981dbe3
commit 96ab173c4b
2 changed files with 25 additions and 3 deletions

View File

@@ -11,6 +11,11 @@
#include "Settings.h" #include "Settings.h"
#include "hardware.h" #include "hardware.h"
#define PRESS_ACCEL_STEP 3
#define PRESS_ACCEL_INTERVAL_MIN 10
#define PRESS_ACCEL_INTERVAL_MAX 30
//GUI holds the menu structure and all its methods for the menu itself //GUI holds the menu structure and all its methods for the menu itself
//Declarations for all the methods for the settings menu (at end of this file) //Declarations for all the methods for the settings menu (at end of this file)

View File

@@ -609,10 +609,12 @@ void gui_Menu(const menuitem* menu) {
// Draw the settings menu and provide iteration support etc // Draw the settings menu and provide iteration support etc
uint8_t currentScreen = 0; uint8_t currentScreen = 0;
uint32_t autoRepeatTimer = 0; uint32_t autoRepeatTimer = 0;
uint8_t autoRepeatAcceleration = 0;
bool earlyExit = false; bool earlyExit = false;
uint32_t descriptionStart = 0; uint32_t descriptionStart = 0;
int16_t lastOffset = -1; int16_t lastOffset = -1;
bool lcdRefresh = true; bool lcdRefresh = true;
ButtonState lastButtonState = BUTTON_NONE;
while ((menu[currentScreen].draw.func != NULL) && earlyExit == false) { while ((menu[currentScreen].draw.func != NULL) && earlyExit == false) {
lcd.setFont(0); lcd.setFont(0);
@@ -651,6 +653,11 @@ void gui_Menu(const menuitem* menu) {
ButtonState buttons = getButtonState(); ButtonState buttons = getButtonState();
if (buttons != lastButtonState) {
autoRepeatAcceleration = 0;
lastButtonState = buttons;
}
switch (buttons) { switch (buttons) {
case BUTTON_BOTH: case BUTTON_BOTH:
earlyExit = true; // will make us exit next loop earlyExit = true; // will make us exit next loop
@@ -672,19 +679,24 @@ void gui_Menu(const menuitem* menu) {
else else
descriptionStart = 0; descriptionStart = 0;
break; break;
//#TODO: Impliment ramping change
case BUTTON_F_LONG: case BUTTON_F_LONG:
if (xTaskGetTickCount() - autoRepeatTimer > 30) { if (xTaskGetTickCount() - autoRepeatTimer
+ autoRepeatAcceleration> PRESS_ACCEL_INTERVAL_MAX) {
menu[currentScreen].incrementHandler.func(); menu[currentScreen].incrementHandler.func();
autoRepeatTimer = xTaskGetTickCount(); autoRepeatTimer = xTaskGetTickCount();
descriptionStart = 0; descriptionStart = 0;
autoRepeatAcceleration += PRESS_ACCEL_STEP;
} }
break; break;
case BUTTON_B_LONG: case BUTTON_B_LONG:
if (xTaskGetTickCount() - autoRepeatTimer > 30) { if (xTaskGetTickCount() - autoRepeatTimer
+ autoRepeatAcceleration> PRESS_ACCEL_INTERVAL_MAX) {
currentScreen++; currentScreen++;
autoRepeatTimer = xTaskGetTickCount(); autoRepeatTimer = xTaskGetTickCount();
descriptionStart = 0; descriptionStart = 0;
autoRepeatAcceleration += PRESS_ACCEL_STEP;
} }
break; break;
case BUTTON_NONE: case BUTTON_NONE:
@@ -692,6 +704,11 @@ void gui_Menu(const menuitem* menu) {
break; break;
} }
if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration)
< PRESS_ACCEL_INTERVAL_MIN) {
autoRepeatAcceleration = PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN;
}
if (lcdRefresh) { if (lcdRefresh) {
lcd.refresh(); // update the LCD lcd.refresh(); // update the LCD
osDelay(20); osDelay(20);