From f0eeaf01d46052bf979786501721ea119d991d30 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Sat, 24 Oct 2020 09:49:14 +0800 Subject: [PATCH] ppr1 lcd is 'good enough' for now --- docs/software/nrf52-TODO.md | 4 ++-- src/graphics/Screen.cpp | 20 ++++++++++---------- src/graphics/configs.h | 1 - variants/eink/variant.h | 3 +++ variants/ppr1/variant.h | 4 ++++ 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/docs/software/nrf52-TODO.md b/docs/software/nrf52-TODO.md index 2d268e02..891e5615 100644 --- a/docs/software/nrf52-TODO.md +++ b/docs/software/nrf52-TODO.md @@ -11,8 +11,8 @@ * fix bluetooth * Test GPS * make ST7567Wire driver less ugly, move OLED stuff into a common class treee -* add power save mode for lcd per page 31 of datasheet -* add power off sequence per datasheet to lcd driver +* add LCD power save mode for lcd per page 31 of datasheet +* add LCD power off sequence per datasheet to lcd driver * leave LCD screen on most of the time (because it needs little power) ### general nrf52 TODO: diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index adfe15e9..3e53d130 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -58,10 +58,6 @@ static char ourId[5]; static bool heartbeat = false; #endif -// We used to use constants for this - now we pull from the device at startup -//#define SCREEN_WIDTH 128 -//#define SCREEN_HEIGHT 64 - static uint16_t displayWidth, displayHeight; #define SCREEN_WIDTH displayWidth @@ -85,6 +81,10 @@ static uint16_t displayWidth, displayHeight; #define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2) +#ifndef SCREEN_TRANSITION_MSECS +#define SCREEN_TRANSITION_MSECS 300 +#endif + static void drawBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y) { // draw an xbm image. @@ -636,11 +636,7 @@ void Screen::setup() displayWidth = dispdev.width(); displayHeight = dispdev.height(); - uint16_t transitionTime = 300; // msecs -#ifdef HAS_EINK - transitionTime = 0; -#endif - ui.setTimePerTransition(transitionTime); + ui.setTimePerTransition(SCREEN_TRANSITION_MSECS); ui.setIndicatorPosition(BOTTOM); // Defines where the first frame is located in the bar. @@ -882,12 +878,16 @@ void Screen::handleOnPress() } } +#ifndef SCREEN_TRANSITION_FRAMERATE +#define SCREEN_TRANSITION_FRAMERATE 30 // fps +#endif + void Screen::setFastFramerate() { DEBUG_MSG("Setting fast framerate\n"); // We are about to start a transition so speed up fps - targetFramerate = TRANSITION_FRAMERATE; + targetFramerate = SCREEN_TRANSITION_FRAMERATE; ui.setTargetFPS(targetFramerate); setInterval(0); // redraw ASAP } diff --git a/src/graphics/configs.h b/src/graphics/configs.h index 65128294..65077b9d 100644 --- a/src/graphics/configs.h +++ b/src/graphics/configs.h @@ -3,7 +3,6 @@ #include "fonts.h" // This means the *visible* area (sh1106 can address 132, but shows 128 for example) -#define TRANSITION_FRAMERATE 30 // fps #define IDLE_FRAMERATE 1 // in fps #define COMPASS_DIAM 44 diff --git a/variants/eink/variant.h b/variants/eink/variant.h index 2dc5ccc1..a37c50ab 100644 --- a/variants/eink/variant.h +++ b/variants/eink/variant.h @@ -209,6 +209,9 @@ External serial flash WP25R1635FZUIL0 #define HAS_EINK +// No screen wipes on eink +#define SCREEN_TRANSITION_MSECS 0 + #define PIN_SPI1_MISO \ (32 + 7) // FIXME not really needed, but for now the SPI code requires something to be defined, pick an used GPIO #define PIN_SPI1_MOSI PIN_EINK_MOSI diff --git a/variants/ppr1/variant.h b/variants/ppr1/variant.h index 2733d652..2a287ea9 100644 --- a/variants/ppr1/variant.h +++ b/variants/ppr1/variant.h @@ -122,6 +122,10 @@ static const uint8_t AREF = PIN_AREF; // Define if screen should be mirrored left to right #define SCREEN_MIRROR +// LCD screens are slow, so slowdown the wipe so it looks better +#define SCREEN_TRANSITION_MSECS 1000 +#define SCREEN_TRANSITION_FRAMERATE 10 // fps + /* * SPI Interfaces */