diff --git a/workspace/TS100/Core/Inc/OLED.hpp b/workspace/TS100/Core/Inc/OLED.hpp index 26a31524..23a2fd8e 100644 --- a/workspace/TS100/Core/Inc/OLED.hpp +++ b/workspace/TS100/Core/Inc/OLED.hpp @@ -24,6 +24,7 @@ extern "C" { #endif #define DEVICEADDR_OLED (0x3c<<1) #define OLED_WIDTH 96 +#define OLED_HEIGHT 16 #define FRAMEBUFFER_START 17 class OLED { diff --git a/workspace/TS100/Core/Src/gui.cpp b/workspace/TS100/Core/Src/gui.cpp index 8070fd39..793cc2bd 100644 --- a/workspace/TS100/Core/Src/gui.cpp +++ b/workspace/TS100/Core/Src/gui.cpp @@ -826,6 +826,11 @@ void gui_Menu(const menuitem *menu) { int16_t lastOffset = -1; bool lcdRefresh = true; ButtonState lastButtonState = BUTTON_NONE; + uint8_t scrollContentSize = 0; + + for (uint8_t i = 0; menu[i].draw.func != NULL; i++) { + scrollContentSize += 1; + } while ((menu[currentScreen].draw.func != NULL) && earlyExit == false) { OLED::setFont(0); @@ -836,6 +841,9 @@ void gui_Menu(const menuitem *menu) { || menu[currentScreen].description == NULL) { OLED::clearScreen(); menu[currentScreen].draw.func(); + uint8_t indicatorHeight = OLED_HEIGHT / scrollContentSize; + uint8_t position = currentScreen * indicatorHeight; + OLED::drawScrollIndicator(position, indicatorHeight); lastOffset = -1; lcdRefresh = true; } else {