From 8e7fda03f1a84666b8d65daea7a66644db83ae3c Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Fri, 1 Jan 2021 09:32:32 +1100 Subject: [PATCH] [OLED] shrink codeside of draw swapped --- workspace/TS100/Core/Drivers/OLED.cpp | 12 ++++++++---- workspace/TS100/Core/Drivers/OLED.hpp | 22 +++++++++------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/workspace/TS100/Core/Drivers/OLED.cpp b/workspace/TS100/Core/Drivers/OLED.cpp index 84e20aa8..948c248e 100755 --- a/workspace/TS100/Core/Drivers/OLED.cpp +++ b/workspace/TS100/Core/Drivers/OLED.cpp @@ -22,6 +22,7 @@ bool OLED::inLeftHandedMode; // Whether the screen is in left or not (used for OLED::DisplayState OLED::displayState; uint8_t OLED::fontWidth, OLED::fontHeight; int16_t OLED::cursor_x, OLED::cursor_y; +bool OLED::initDone = false; uint8_t OLED::displayOffset; uint8_t OLED::screenBuffer[16 + (OLED_WIDTH * 2) + 10]; // The data buffer uint8_t OLED::secondFrameBuffer[OLED_WIDTH * 2]; @@ -102,6 +103,7 @@ void OLED::initialize() { } } setDisplayState(DisplayState::ON); + initDone = true; } void OLED::setFramebuffer(uint8_t *buffer) { if (buffer == NULL) { @@ -390,16 +392,14 @@ void OLED::drawAreaSwapped(int16_t x, int8_t y, uint8_t wide, uint8_t height, co if (y == 0) { // Splat first line of data - for (uint8_t xx = visibleStart; xx < visibleEnd; xx += 2) { + for (uint8_t xx = visibleStart; xx < visibleEnd; xx ++) { firstStripPtr[xx + x] = ptr[xx + 1]; - firstStripPtr[xx + x + 1] = ptr[xx]; } } if (y == 8 || height == 16) { // Splat the second line - for (uint8_t xx = visibleStart; xx < visibleEnd; xx += 2) { + for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) { secondStripPtr[x + xx] = ptr[xx + 1 + (height == 16 ? wide : 0)]; - secondStripPtr[x + xx + 1] = ptr[xx + (height == 16 ? wide : 0)]; } } } @@ -481,3 +481,7 @@ void OLED::drawHeatSymbol(uint8_t state) { drawSymbol(14); drawFilledRect(cursor_x_temp, 0, cursor_x_temp + 12, 2 + (8 - state), true); } + +bool OLED::isInitDone() { + return initDone; +} diff --git a/workspace/TS100/Core/Drivers/OLED.hpp b/workspace/TS100/Core/Drivers/OLED.hpp index 5e3238a7..db6a2c52 100755 --- a/workspace/TS100/Core/Drivers/OLED.hpp +++ b/workspace/TS100/Core/Drivers/OLED.hpp @@ -34,7 +34,7 @@ public: }; static void initialize(); // Startup the I2C coms (brings screen out of reset etc) - + static bool isInitDone(); // Draw the buffer out to the LCD using the DMA Channel static void refresh() { FRToSI2C::Transmit( DEVICEADDR_OLED, screenBuffer, @@ -56,7 +56,7 @@ public: static int16_t getCursorX() { return cursor_x; } - static void print(const char *string);// Draw a string to the current location, with current font + static void print(const char *string); // Draw a string to the current location, with current font // Set the cursor location by pixels static void setCursor(int16_t x, int16_t y) { cursor_x = x; @@ -73,8 +73,7 @@ public: drawArea(x, 0, width, 16, buffer); } // Draws an image to the buffer, at x offset from top to bottom (fixed height renders) - static void printNumber(uint16_t number, uint8_t places, - bool noLeaderZeros = true); + static void printNumber(uint16_t number, uint8_t places, bool noLeaderZeros = true); // Draws a number at the current cursor location // Clears the buffer static void clearScreen() { @@ -89,15 +88,11 @@ public: drawSymbol((state) ? 16 : 17); } static void debugNumber(int32_t val); - static void drawSymbol(uint8_t symbolID);//Used for drawing symbols of a predictable width - static void drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, - const uint8_t *ptr); //Draw an area, but y must be aligned on 0/8 offset - static void drawAreaSwapped(int16_t x, int8_t y, uint8_t wide, - uint8_t height, const uint8_t *ptr); //Draw an area, but y must be aligned on 0/8 offset - static void fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, - const uint8_t value); //Fill an area, but y must be aligned on 0/8 offset - static void drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, - bool clear); + static void drawSymbol(uint8_t symbolID); //Used for drawing symbols of a predictable width + static void drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t *ptr); //Draw an area, but y must be aligned on 0/8 offset + static void drawAreaSwapped(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t *ptr); //Draw an area, but y must be aligned on 0/8 offset + static void fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t value); //Fill an area, but y must be aligned on 0/8 offset + static void drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, bool clear); static void drawHeatSymbol(uint8_t state); static void drawScrollIndicator(uint8_t p, uint8_t h); // Draws a scrolling position indicator static void transitionSecondaryFramebuffer(bool forwardNavigation); @@ -109,6 +104,7 @@ private: static uint8_t *firstStripPtr; // Pointers to the strips to allow for buffer having extra content static uint8_t *secondStripPtr; //Pointers to the strips static bool inLeftHandedMode; // Whether the screen is in left or not (used for offsets in GRAM) + static bool initDone; static DisplayState displayState; static uint8_t fontWidth, fontHeight; static int16_t cursor_x, cursor_y;