mirror of
https://github.com/esphome/esphome.git
synced 2024-11-22 15:08:10 +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 import pins
|
||||||
from esphome.components import display
|
from esphome.components import display
|
||||||
from esphome.const import (
|
from esphome.const import (
|
||||||
|
CONF_ENABLE_PIN,
|
||||||
CONF_HSYNC_PIN,
|
CONF_HSYNC_PIN,
|
||||||
CONF_RESET_PIN,
|
CONF_RESET_PIN,
|
||||||
CONF_DATA_PINS,
|
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_PCLK_PIN): pins.internal_gpio_output_pin_schema,
|
||||||
cv.Required(CONF_HSYNC_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.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_RESET_PIN): pins.gpio_output_pin_schema,
|
||||||
cv.Optional(CONF_HSYNC_PULSE_WIDTH, default=10): cv.int_,
|
cv.Optional(CONF_HSYNC_PULSE_WIDTH, default=10): cv.int_,
|
||||||
cv.Optional(CONF_HSYNC_BACK_PORCH, 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))
|
cg.add(var.add_data_pin(data_pin, index))
|
||||||
index += 1
|
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):
|
if reset_pin := config.get(CONF_RESET_PIN):
|
||||||
reset = await cg.gpio_pin_expression(reset_pin)
|
reset = await cg.gpio_pin_expression(reset_pin)
|
||||||
cg.add(var.set_reset_pin(reset))
|
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, " Height: %u", this->height_);
|
||||||
ESP_LOGCONFIG(TAG, " Width: %u", this->width_);
|
ESP_LOGCONFIG(TAG, " Width: %u", this->width_);
|
||||||
LOG_PIN(" DE Pin: ", this->de_pin_);
|
LOG_PIN(" DE Pin: ", this->de_pin_);
|
||||||
|
LOG_PIN(" Enable Pin: ", this->enable_pin_);
|
||||||
LOG_PIN(" Reset Pin: ", this->reset_pin_);
|
LOG_PIN(" Reset Pin: ", this->reset_pin_);
|
||||||
size_t data_pin_count = sizeof(this->data_pins_) / sizeof(this->data_pins_[0]);
|
size_t data_pin_count = sizeof(this->data_pins_) / sizeof(this->data_pins_[0]);
|
||||||
for (size_t i = 0; i != data_pin_count; i++)
|
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());
|
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 rpi_dpi_rgb
|
||||||
} // namespace esphome
|
} // 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_pclk_pin(InternalGPIOPin *pclk_pin) { this->pclk_pin_ = pclk_pin; }
|
||||||
void set_vsync_pin(InternalGPIOPin *vsync_pin) { this->vsync_pin_ = vsync_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_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_reset_pin(GPIOPin *reset_pin) { this->reset_pin_ = reset_pin; }
|
||||||
void set_width(uint16_t width) { this->width_ = width; }
|
void set_width(uint16_t width) { this->width_ = width; }
|
||||||
void set_dimensions(uint16_t width, uint16_t height) {
|
void set_dimensions(uint16_t width, uint16_t height) {
|
||||||
|
@ -62,10 +63,12 @@ class RpiDpiRgb : public display::Display {
|
||||||
protected:
|
protected:
|
||||||
int get_width_internal() override { return this->width_; }
|
int get_width_internal() override { return this->width_; }
|
||||||
int get_height_internal() override { return this->height_; }
|
int get_height_internal() override { return this->height_; }
|
||||||
|
void reset_display_() const;
|
||||||
InternalGPIOPin *de_pin_{nullptr};
|
InternalGPIOPin *de_pin_{nullptr};
|
||||||
InternalGPIOPin *pclk_pin_{nullptr};
|
InternalGPIOPin *pclk_pin_{nullptr};
|
||||||
InternalGPIOPin *hsync_pin_{nullptr};
|
InternalGPIOPin *hsync_pin_{nullptr};
|
||||||
InternalGPIOPin *vsync_pin_{nullptr};
|
InternalGPIOPin *vsync_pin_{nullptr};
|
||||||
|
GPIOPin *enable_pin_{nullptr};
|
||||||
GPIOPin *reset_pin_{nullptr};
|
GPIOPin *reset_pin_{nullptr};
|
||||||
InternalGPIOPin *data_pins_[16] = {};
|
InternalGPIOPin *data_pins_[16] = {};
|
||||||
uint16_t hsync_front_porch_ = 8;
|
uint16_t hsync_front_porch_ = 8;
|
||||||
|
|
Loading…
Reference in a new issue