mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 08:28:12 +01:00
[rpi_dpi_rgb] Add enable_pin and reset_display method to driver (#7383)
Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com>
This commit is contained in:
parent
6490fc9c62
commit
fc930327b4
3 changed files with 27 additions and 0 deletions
|
@ -3,6 +3,7 @@ import esphome.config_validation as cv
|
|||
from esphome import pins
|
||||
from esphome.components import display
|
||||
from esphome.const import (
|
||||
CONF_ENABLE_PIN,
|
||||
CONF_HSYNC_PIN,
|
||||
CONF_RESET_PIN,
|
||||
CONF_DATA_PINS,
|
||||
|
@ -112,6 +113,7 @@ CONFIG_SCHEMA = cv.All(
|
|||
cv.Required(CONF_PCLK_PIN): pins.internal_gpio_output_pin_schema,
|
||||
cv.Required(CONF_HSYNC_PIN): pins.internal_gpio_output_pin_schema,
|
||||
cv.Required(CONF_VSYNC_PIN): pins.internal_gpio_output_pin_schema,
|
||||
cv.Optional(CONF_ENABLE_PIN): pins.gpio_output_pin_schema,
|
||||
cv.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
|
||||
cv.Optional(CONF_HSYNC_PULSE_WIDTH, default=10): cv.int_,
|
||||
cv.Optional(CONF_HSYNC_BACK_PORCH, default=10): cv.int_,
|
||||
|
@ -164,6 +166,10 @@ async def to_code(config):
|
|||
cg.add(var.add_data_pin(data_pin, index))
|
||||
index += 1
|
||||
|
||||
if enable_pin := config.get(CONF_ENABLE_PIN):
|
||||
enable = await cg.gpio_pin_expression(enable_pin)
|
||||
cg.add(var.set_enable_pin(enable))
|
||||
|
||||
if reset_pin := config.get(CONF_RESET_PIN):
|
||||
reset = await cg.gpio_pin_expression(reset_pin)
|
||||
cg.add(var.set_reset_pin(reset))
|
||||
|
|
|
@ -104,12 +104,30 @@ void RpiDpiRgb::dump_config() {
|
|||
ESP_LOGCONFIG(TAG, " Height: %u", this->height_);
|
||||
ESP_LOGCONFIG(TAG, " Width: %u", this->width_);
|
||||
LOG_PIN(" DE Pin: ", this->de_pin_);
|
||||
LOG_PIN(" Enable Pin: ", this->enable_pin_);
|
||||
LOG_PIN(" Reset Pin: ", this->reset_pin_);
|
||||
size_t data_pin_count = sizeof(this->data_pins_) / sizeof(this->data_pins_[0]);
|
||||
for (size_t i = 0; i != data_pin_count; i++)
|
||||
ESP_LOGCONFIG(TAG, " Data pin %d: %s", i, (this->data_pins_[i])->dump_summary().c_str());
|
||||
}
|
||||
|
||||
void RpiDpiRgb::reset_display_() const {
|
||||
if (this->reset_pin_ != nullptr) {
|
||||
this->reset_pin_->setup();
|
||||
this->reset_pin_->digital_write(false);
|
||||
if (this->enable_pin_ != nullptr) {
|
||||
this->enable_pin_->setup();
|
||||
this->enable_pin_->digital_write(false);
|
||||
}
|
||||
delay(1);
|
||||
this->reset_pin_->digital_write(true);
|
||||
if (this->enable_pin_ != nullptr) {
|
||||
delay(11);
|
||||
this->enable_pin_->digital_write(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace rpi_dpi_rgb
|
||||
} // namespace esphome
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ class RpiDpiRgb : public display::Display {
|
|||
void set_pclk_pin(InternalGPIOPin *pclk_pin) { this->pclk_pin_ = pclk_pin; }
|
||||
void set_vsync_pin(InternalGPIOPin *vsync_pin) { this->vsync_pin_ = vsync_pin; }
|
||||
void set_hsync_pin(InternalGPIOPin *hsync_pin) { this->hsync_pin_ = hsync_pin; }
|
||||
void set_enable_pin(GPIOPin *enable_pin) { this->enable_pin_ = enable_pin; }
|
||||
void set_reset_pin(GPIOPin *reset_pin) { this->reset_pin_ = reset_pin; }
|
||||
void set_width(uint16_t width) { this->width_ = width; }
|
||||
void set_dimensions(uint16_t width, uint16_t height) {
|
||||
|
@ -62,10 +63,12 @@ class RpiDpiRgb : public display::Display {
|
|||
protected:
|
||||
int get_width_internal() override { return this->width_; }
|
||||
int get_height_internal() override { return this->height_; }
|
||||
void reset_display_() const;
|
||||
InternalGPIOPin *de_pin_{nullptr};
|
||||
InternalGPIOPin *pclk_pin_{nullptr};
|
||||
InternalGPIOPin *hsync_pin_{nullptr};
|
||||
InternalGPIOPin *vsync_pin_{nullptr};
|
||||
GPIOPin *enable_pin_{nullptr};
|
||||
GPIOPin *reset_pin_{nullptr};
|
||||
InternalGPIOPin *data_pins_[16] = {};
|
||||
uint16_t hsync_front_porch_ = 8;
|
||||
|
|
Loading…
Reference in a new issue