diff --git a/st7789_lcd.c b/st7789_lcd.c index 1998aea..094da06 100644 --- a/st7789_lcd.c +++ b/st7789_lcd.c @@ -86,12 +86,12 @@ st7789_ret_t _st7789_window(st7789_lcd_t *lcd, uint16_t x_start, uint16_t x_end, y_offset = PANEL_X_OFFSET; break; case ST7789_DIR_180: - x_offset = 0; - y_offset = 80; + x_offset = 240 - (PANEL_X_OFFSET + PANEL_X_WIDTH); + y_offset = 320 - (PANEL_Y_OFFSET + PANEL_Y_WIDTH); break; case ST7789_DIR_270: - x_offset = 80; - y_offset = 0; + x_offset = 320 - (PANEL_Y_OFFSET + PANEL_Y_WIDTH); + y_offset = 240 - (PANEL_X_OFFSET + PANEL_X_WIDTH); break; default: x_offset = 0; @@ -130,6 +130,7 @@ st7789_ret_t _st7789_reset(st7789_lcd_t *lcd) { } st7789_ret_t st7789_lcd_init(st7789_lcd_t *lcd) { + if(_st7789_reset(lcd) != ST7789_OK) return ST7789_ERROR; if(_st7789_init_seq(lcd) != ST7789_OK) return ST7789_ERROR; if(st7789_lcd_config(lcd, &lcd->config) != ST7789_OK) return ST7789_ERROR; if(st7789_lcd_sleep(lcd, 0) != ST7789_OK) return ST7789_ERROR; @@ -164,6 +165,11 @@ st7789_ret_t st7789_lcd_load(st7789_lcd_t *lcd, uint8_t *data, uint16_t x_start, return ST7789_ERROR; } + uint8_t command = 0x2C; // Memory Write + if(lcd->cb.write_cmd_cb(lcd->user_data, &command, 0x01) != ST7789_OK) { + return ST7789_ERROR; + } + // Write pixel data if(lcd->cb.write_data_cb(lcd->user_data, data, data_len) != ST7789_OK) { return ST7789_ERROR; diff --git a/st7789_lcd.h b/st7789_lcd.h index 819fbb0..293b058 100644 --- a/st7789_lcd.h +++ b/st7789_lcd.h @@ -44,18 +44,24 @@ typedef struct { #ifdef ST7789_PANEL_ZJY_240 #define ST7789_PANEL_SELECTION st7789_init_seq_zjy_240_240 +#define PANEL_X_WIDTH 240 +#define PANEL_Y_WIDTH 240 #define PANEL_X_OFFSET 0 #define PANEL_Y_OFFSET 0 #elif ST7789_PANEL_ZJY_135 #define ST7789_PANEL_SELECTION st7789_init_seq_zjy_240_135 +#define PANEL_X_WIDTH 240 +#define PANEL_Y_WIDTH 135 #define PANEL_X_OFFSET 53 #define PANEL_Y_OFFSET 40 #elif ST7789_PANEL_ZJY_320 #define ST7789_PANEL_SELECTION st7789_init_seq_zjy_320_240 +#define PANEL_X_WIDTH 240 +#define PANEL_Y_WIDTH 320 #define PANEL_X_OFFSET 0 #define PANEL_Y_OFFSET 0 @@ -63,6 +69,8 @@ typedef struct { #warning "Panel not defined, using default." #define ST7789_PANEL_SELECTION st7789_init_seq_zjy_240_240 +#define PANEL_X_WIDTH 240 +#define PANEL_Y_WIDTH 240 #define PANEL_X_OFFSET 0 #define PANEL_Y_OFFSET 0