|
|
@@ -11,7 +11,16 @@ import esphome.codegen as cg
|
|
|
import esphome.config_validation as cv
|
|
|
from esphome import pins
|
|
|
from esphome.components import display, spi
|
|
|
-from esphome.const import CONF_BUSY_PIN, CONF_CS_PIN, CONF_DC_PIN, CONF_ID, CONF_RESET_PIN, CONF_SPI_ID, Framework
|
|
|
+from esphome.const import (
|
|
|
+ CONF_BUSY_PIN,
|
|
|
+ CONF_CS_PIN,
|
|
|
+ CONF_DC_PIN,
|
|
|
+ CONF_ID,
|
|
|
+ CONF_LAMBDA,
|
|
|
+ CONF_RESET_PIN,
|
|
|
+ CONF_SPI_ID,
|
|
|
+ Framework,
|
|
|
+)
|
|
|
from esphome.types import ConfigType
|
|
|
|
|
|
CODEOWNERS = ["@zib"]
|
|
|
@@ -48,4 +57,16 @@ async def to_code(config: ConfigType) -> None:
|
|
|
spi_parent = await cg.get_variable(config[CONF_SPI_ID])
|
|
|
cg.add(var.set_spi_parent(spi_parent))
|
|
|
|
|
|
+ # display.register_display() only wires up `pages:` - a bare top-level
|
|
|
+ # `lambda:` (what our CONFIG_SCHEMA actually supports) has to be
|
|
|
+ # processed and attached via set_writer() by the platform itself, same
|
|
|
+ # as every other display component's to_code() (see e.g. epaper_spi's
|
|
|
+ # display.py). Missing this meant the configured lambda never ran at
|
|
|
+ # all - the only thing ever drawn was auto_clear's default
|
|
|
+ # fill(COLOR_OFF), which is why every real-hardware run came out solid
|
|
|
+ # black regardless of any protocol-level change.
|
|
|
+ if CONF_LAMBDA in config:
|
|
|
+ lambda_ = await cg.process_lambda(config[CONF_LAMBDA], [(display.DisplayRef, "it")], return_type=cg.void)
|
|
|
+ cg.add(var.set_writer(lambda_))
|
|
|
+
|
|
|
await display.register_display(var, config)
|