mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-05-21 05:23:27 +02:00
8e75980ebd
* Cleanup dashboard JS * Add vscode * Save start_mark/end_mark * Updates * Updates * Remove need for cv.nameable It's a bit hacky but removes so much bloat from integrations * Add enum helper * Document APIs, and Improvements * Fixes * Fixes * Update PULL_REQUEST_TEMPLATE.md * Updates * Updates * Updates
130 lines
2.6 KiB
C++
130 lines
2.6 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 waveshare_epaper {
|
|
|
|
class WaveshareEPaper : public PollingComponent, public spi::SPIDevice, public display::DisplayBuffer {
|
|
public:
|
|
void set_dc_pin(GPIOPin *dc_pin) { dc_pin_ = dc_pin; }
|
|
float get_setup_priority() const override;
|
|
void set_reset_pin(GPIOPin *reset) { this->reset_pin_ = reset; }
|
|
void set_busy_pin(GPIOPin *busy) { this->busy_pin_ = busy; }
|
|
|
|
bool is_device_msb_first() override;
|
|
void command(uint8_t value);
|
|
void data(uint8_t value);
|
|
|
|
virtual void display() = 0;
|
|
|
|
void update() override;
|
|
|
|
void fill(int color) override;
|
|
|
|
protected:
|
|
void draw_absolute_pixel_internal(int x, int y, int color) override;
|
|
|
|
bool wait_until_idle_();
|
|
|
|
void setup_pins_();
|
|
|
|
uint32_t get_buffer_length_();
|
|
|
|
bool is_device_high_speed() override;
|
|
|
|
void start_command_();
|
|
void end_command_();
|
|
void start_data_();
|
|
void end_data_();
|
|
|
|
GPIOPin *reset_pin_{nullptr};
|
|
GPIOPin *dc_pin_;
|
|
GPIOPin *busy_pin_{nullptr};
|
|
};
|
|
|
|
enum WaveshareEPaperTypeAModel {
|
|
WAVESHARE_EPAPER_1_54_IN = 0,
|
|
WAVESHARE_EPAPER_2_13_IN,
|
|
WAVESHARE_EPAPER_2_9_IN,
|
|
};
|
|
|
|
class WaveshareEPaperTypeA : public WaveshareEPaper {
|
|
public:
|
|
WaveshareEPaperTypeA(WaveshareEPaperTypeAModel model);
|
|
|
|
void setup() override;
|
|
|
|
void dump_config() override;
|
|
|
|
void display() override;
|
|
|
|
void set_full_update_every(uint32_t full_update_every);
|
|
|
|
protected:
|
|
void write_lut_(const uint8_t *lut);
|
|
|
|
int get_width_internal() override;
|
|
|
|
int get_height_internal() override;
|
|
|
|
uint32_t full_update_every_{30};
|
|
uint32_t at_update_{0};
|
|
WaveshareEPaperTypeAModel model_;
|
|
};
|
|
|
|
enum WaveshareEPaperTypeBModel {
|
|
WAVESHARE_EPAPER_2_7_IN = 0,
|
|
WAVESHARE_EPAPER_4_2_IN,
|
|
WAVESHARE_EPAPER_7_5_IN,
|
|
};
|
|
|
|
class WaveshareEPaper2P7In : public WaveshareEPaper {
|
|
public:
|
|
void setup() override;
|
|
|
|
void display() override;
|
|
|
|
void dump_config() override;
|
|
|
|
protected:
|
|
int get_width_internal() override;
|
|
|
|
int get_height_internal() override;
|
|
};
|
|
|
|
class WaveshareEPaper4P2In : public WaveshareEPaper {
|
|
public:
|
|
void setup() override;
|
|
|
|
void display() override;
|
|
|
|
void dump_config() override;
|
|
|
|
protected:
|
|
int get_width_internal() override;
|
|
|
|
int get_height_internal() override;
|
|
|
|
bool is_device_high_speed() override;
|
|
};
|
|
|
|
class WaveshareEPaper7P5In : public WaveshareEPaper {
|
|
public:
|
|
void setup() override;
|
|
|
|
void display() override;
|
|
|
|
void dump_config() override;
|
|
|
|
protected:
|
|
int get_width_internal() override;
|
|
|
|
int get_height_internal() override;
|
|
};
|
|
|
|
} // namespace waveshare_epaper
|
|
} // namespace esphome
|