Add invert_colors option for st7735 (#2327)

This commit is contained in:
Aljaž Srebrnič 2021-09-20 10:08:08 +02:00 committed by GitHub
parent 5e345783bd
commit 3052c64dd7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 2 deletions

View file

@ -23,6 +23,7 @@ CONF_ROW_START = "row_start"
CONF_COL_START = "col_start"
CONF_EIGHT_BIT_COLOR = "eight_bit_color"
CONF_USE_BGR = "use_bgr"
CONF_INVERT_COLORS = "invert_colors"
SPIST7735 = st7735_ns.class_(
"ST7735", cg.PollingComponent, display.DisplayBuffer, spi.SPIDevice
@ -58,6 +59,7 @@ CONFIG_SCHEMA = cv.All(
cv.Required(CONF_ROW_START): cv.int_,
cv.Optional(CONF_EIGHT_BIT_COLOR, default=False): cv.boolean,
cv.Optional(CONF_USE_BGR, default=False): cv.boolean,
cv.Optional(CONF_INVERT_COLORS, default=False): cv.boolean,
}
)
.extend(cv.COMPONENT_SCHEMA)
@ -90,6 +92,7 @@ async def to_code(config):
config[CONF_ROW_START],
config[CONF_EIGHT_BIT_COLOR],
config[CONF_USE_BGR],
config[CONF_INVERT_COLORS],
)
await setup_st7735(var, config)
await spi.register_spi_device(var, config)

View file

@ -220,12 +220,14 @@ static const uint8_t PROGMEM
// clang-format on
static const char *const TAG = "st7735";
ST7735::ST7735(ST7735Model model, int width, int height, int colstart, int rowstart, bool eightbitcolor, bool usebgr)
ST7735::ST7735(ST7735Model model, int width, int height, int colstart, int rowstart, bool eightbitcolor, bool usebgr,
bool invert_colors)
: model_(model),
colstart_(colstart),
rowstart_(rowstart),
eightbitcolor_(eightbitcolor),
usebgr_(usebgr),
invert_colors_(invert_colors),
width_(width),
height_(height) {}
@ -281,6 +283,9 @@ void ST7735::setup() {
}
sendcommand_(ST77XX_MADCTL, &data, 1);
if (this->invert_colors_)
sendcommand_(ST77XX_INVON, nullptr, 0);
this->init_internal_(this->get_buffer_length());
memset(this->buffer_, 0x00, this->get_buffer_length());
}

View file

@ -37,7 +37,8 @@ class ST7735 : public PollingComponent,
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING,
spi::DATA_RATE_8MHZ> {
public:
ST7735(ST7735Model model, int width, int height, int colstart, int rowstart, bool eightbitcolor, bool usebgr);
ST7735(ST7735Model model, int width, int height, int colstart, int rowstart, bool eightbitcolor, bool usebgr,
bool invert_colors);
void dump_config() override;
void setup() override;
@ -77,6 +78,7 @@ class ST7735 : public PollingComponent,
uint8_t colstart_ = 0, rowstart_ = 0;
bool eightbitcolor_ = false;
bool usebgr_ = false;
bool invert_colors_ = false;
int16_t width_ = 80, height_ = 80; // Watch heap size
GPIOPin *reset_pin_{nullptr};