~ruther/qmk_firmware

37fba09021fe094ea4daf0813626b1b6a201c8c0 — Ryan 4 years ago 0311c80
ST7565 invert (#13237)

3 files changed, 24 insertions(+), 0 deletions(-)

M docs/feature_st7565.md
M drivers/lcd/st7565.c
M drivers/lcd/st7565.h
M docs/feature_st7565.md => docs/feature_st7565.md +4 -0
@@ 262,6 262,10 @@ void st7565_task(void);
// Called at the start of st7565_task, weak function overridable by the user
void st7565_task_user(void);

// Inverts the display
// Returns true if the screen was or is inverted
bool st7565_invert(bool invert);

// Returns the maximum number of characters that will fit on a line
uint8_t st7565_max_chars(void);


M drivers/lcd/st7565.c => drivers/lcd/st7565.c +16 -0
@@ 31,6 31,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DISPLAY_ALL_ON 0xA5
#define DISPLAY_ALL_ON_RESUME 0xA4
#define NORMAL_DISPLAY 0xA6
#define INVERT_DISPLAY 0xA7
#define DISPLAY_ON 0xAF
#define DISPLAY_OFF 0xAE
#define NOP 0xE3


@@ 72,6 73,7 @@ uint8_t *          st7565_cursor;
ST7565_BLOCK_TYPE  st7565_dirty       = 0;
bool               st7565_initialized = false;
bool               st7565_active      = false;
bool               st7565_inverted    = false;
display_rotation_t st7565_rotation    = DISPLAY_ROTATION_0;
#if ST7565_TIMEOUT > 0
uint32_t st7565_timeout;


@@ 429,6 431,20 @@ __attribute__((weak)) void st7565_off_user(void) {}

bool st7565_is_on(void) { return st7565_active; }

bool st7565_invert(bool invert) {
    if (!st7565_initialized) {
        return st7565_inverted;
    }

    if (invert != st7565_inverted) {
        spi_start(ST7565_SS_PIN, false, 0, ST7565_SPI_CLK_DIVISOR);
        st7565_send_cmd(invert ? INVERT_DISPLAY : NORMAL_DISPLAY);
        spi_stop();
        st7565_inverted = invert;
    }
    return st7565_inverted;
}

uint8_t st7565_max_chars(void) { return ST7565_DISPLAY_WIDTH / ST7565_FONT_WIDTH; }

uint8_t st7565_max_lines(void) { return ST7565_DISPLAY_HEIGHT / ST7565_FONT_HEIGHT; }

M drivers/lcd/st7565.h => drivers/lcd/st7565.h +4 -0
@@ 202,6 202,10 @@ void st7565_task(void);
// Called at the start of st7565_task, weak function overridable by the user
void st7565_task_user(void);

// Inverts the display
// Returns true if the screen was or is inverted
bool st7565_invert(bool invert);

// Returns the maximum number of characters that will fit on a line
uint8_t st7565_max_chars(void);