mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-05-23 06:08:30 +02:00
7ff3f752e2
* Initial Commit - ST7735 * Updated for CI checks * Updated for travis build * Travis fixes * Travis line too long * Travis fixes * Fixed up travis format issues * Travis Fixes * Initial Commit - ST7735 * Updated for CI checks * Updated for travis build * Travis fixes * Travis line too long * Travis fixes * Fixed up travis format issues * Travis Fixes * Update to new color API and added test * Check fixes * Fixed sid length in test * Cleaned up whitespaces * kbx81 recommended fixes * test fix * Fixes of fixes * Fixed test1.yaml * Fixed test1.yaml * Changed digital pin #s to gpio * Updated to match kbx's color names * Typo for ST7735_INITR_MINI_160X80 * Updated 8bit color space code Added to_rgb_332 to color.h fixed typo * Added in to_rgb_332,to_bgr_332, rgb_332to_rgb_556 and a more generic scale * Fixed MADCTL * Fixp MADCTL * Implemented usrbgr option updated color to support 332 bgr conversion typo fix * Updated to_bgr_332 * Fix up for clang * FIx up init code. type in buffer caused overrun * fixup protected names * typos * Matched use_bgr to its conf * color.h red fix in bgr_233to_rgb_565 * Fix ST7735_INITR_MINI_160X80 * Renamed bgr_233to_bgr_565 to match its function Color space leak in bgr_233to_bgr_565. cleaned up init code for displays. * Fix * clang fix * Started Color Conversion * Added various bit color functions add triadto * lint changes * Various fixes * Various formatting fixes. Wish my checks worked! * Updated color api to support different formats removed to_rgb_565 * lint clang fixes * Test1 fix * test1.yaml fix * fixed 565 in ILI9341Display * Added CodeOwners * Updated CODEOWNERS * changed to to332 and to565 * Waiting for color.h changes * Stage changes * Removed all changes except this driver * Moved color functions into driver * lint changes * Lint and removed unrelated display driver changes * Lint changes * Initial Commit - ST7735 * Updated for CI checks * Updated for travis build * Travis fixes * Travis line too long * Travis fixes * Fixed up travis format issues * Travis Fixes * Initial Commit - ST7735 * Updated for CI checks * Updated for travis build * Travis fixes * Travis line too long * Travis fixes * Fixed up travis format issues * Travis Fixes * Update to new color API and added test * Check fixes * Fixed sid length in test * Cleaned up whitespaces * kbx81 recommended fixes * test fix * Fixes of fixes * Fixed test1.yaml * Fixed test1.yaml * Changed digital pin #s to gpio * Updated to match kbx's color names * Typo for ST7735_INITR_MINI_160X80 * Updated 8bit color space code Added to_rgb_332 to color.h fixed typo * Added in to_rgb_332,to_bgr_332, rgb_332to_rgb_556 and a more generic scale * Fixed MADCTL * Fixp MADCTL * Implemented usrbgr option updated color to support 332 bgr conversion typo fix * Updated to_bgr_332 * Fix up for clang * FIx up init code. type in buffer caused overrun * fixup protected names * typos * Matched use_bgr to its conf * color.h red fix in bgr_233to_rgb_565 * Fix ST7735_INITR_MINI_160X80 * Renamed bgr_233to_bgr_565 to match its function Color space leak in bgr_233to_bgr_565. cleaned up init code for displays. * Fix * clang fix * Started Color Conversion * Added various bit color functions add triadto * lint changes * Various fixes * Various formatting fixes. Wish my checks worked! * Updated color api to support different formats removed to_rgb_565 * lint clang fixes * Test1 fix * test1.yaml fix * fixed 565 in ILI9341Display * Added CodeOwners * Updated CODEOWNERS * changed to to332 and to565 * Waiting for color.h changes * Stage changes * Removed all changes except this driver * Moved color functions into driver * lint changes * Lint and removed unrelated display driver changes * Lint changes * Updated with latest color api * pulled from origin * Updated for color.h changes * pulled test1 from dev * Added test
88 lines
3.1 KiB
C++
88 lines
3.1 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/components/spi/spi.h"
|
|
#include "esphome/components/display/display_buffer.h"
|
|
|
|
namespace esphome {
|
|
namespace st7735 {
|
|
|
|
static const uint8_t ST7735_TFTWIDTH_128 = 128; // for 1.44 and mini^M
|
|
static const uint8_t ST7735_TFTWIDTH_80 = 80; // for mini^M
|
|
static const uint8_t ST7735_TFTHEIGHT_128 = 128; // for 1.44" display^M
|
|
static const uint8_t ST7735_TFTHEIGHT_160 = 160; // for 1.8" and mini display^M
|
|
|
|
// some flags for initR() :(
|
|
static const uint8_t INITR_GREENTAB = 0x00;
|
|
static const uint8_t INITR_REDTAB = 0x01;
|
|
static const uint8_t INITR_BLACKTAB = 0x02;
|
|
static const uint8_t INITR_144GREENTAB = 0x01;
|
|
static const uint8_t INITR_MINI_160X80 = 0x04;
|
|
static const uint8_t INITR_HALLOWING = 0x05;
|
|
static const uint8_t INITR_18GREENTAB = INITR_GREENTAB;
|
|
static const uint8_t INITR_18REDTAB = INITR_REDTAB;
|
|
static const uint8_t INITR_18BLACKTAB = INITR_BLACKTAB;
|
|
|
|
enum ST7735Model {
|
|
ST7735_INITR_GREENTAB = INITR_GREENTAB,
|
|
ST7735_INITR_REDTAB = INITR_REDTAB,
|
|
ST7735_INITR_BLACKTAB = INITR_BLACKTAB,
|
|
ST7735_INITR_MINI_160X80 = INITR_MINI_160X80,
|
|
ST7735_INITR_18BLACKTAB = INITR_18BLACKTAB,
|
|
ST7735_INITR_18REDTAB = INITR_18REDTAB
|
|
};
|
|
|
|
class ST7735 : public PollingComponent,
|
|
public display::DisplayBuffer,
|
|
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, boolean eightbitcolor, boolean usebgr);
|
|
void dump_config() override;
|
|
void setup() override;
|
|
|
|
void display();
|
|
|
|
void update() override;
|
|
|
|
void set_model(ST7735Model model) { this->model_ = model; }
|
|
float get_setup_priority() const override { return setup_priority::PROCESSOR; }
|
|
|
|
void set_reset_pin(GPIOPin *value) { this->reset_pin_ = value; }
|
|
void set_dc_pin(GPIOPin *value) { dc_pin_ = value; }
|
|
size_t get_buffer_length();
|
|
|
|
protected:
|
|
void sendcommand_(uint8_t cmd, const uint8_t *data_bytes, uint8_t num_data_bytes);
|
|
void senddata_(const uint8_t *data_bytes, uint8_t num_data_bytes);
|
|
|
|
void writecommand_(uint8_t value);
|
|
void writedata_(uint8_t value);
|
|
|
|
void write_display_data_();
|
|
|
|
void init_reset_();
|
|
void display_init_(const uint8_t *addr);
|
|
void set_addr_window_(uint16_t x, uint16_t y, uint16_t w, uint16_t h);
|
|
void draw_absolute_pixel_internal(int x, int y, Color color) override;
|
|
void spi_master_write_addr_(uint16_t addr1, uint16_t addr2);
|
|
void spi_master_write_color_(uint16_t color, uint16_t size);
|
|
|
|
int get_width_internal() override;
|
|
int get_height_internal() override;
|
|
|
|
const char *model_str_();
|
|
|
|
ST7735Model model_{ST7735_INITR_18BLACKTAB};
|
|
uint8_t colstart_ = 0, rowstart_ = 0;
|
|
boolean eightbitcolor_ = false;
|
|
boolean usebgr_ = false;
|
|
int16_t width_ = 80, height_ = 80; // Watch heap size
|
|
|
|
GPIOPin *reset_pin_{nullptr};
|
|
GPIOPin *dc_pin_{nullptr};
|
|
};
|
|
|
|
} // namespace st7735
|
|
} // namespace esphome
|