1
0
mirror of https://github.com/esphome/esphome.git synced 2026-02-08 00:31:58 +00:00

[epaper_spi] Validate BUSY pin as input instead of output (#13764)

This commit is contained in:
schrob
2026-02-05 00:39:03 +01:00
committed by GitHub
parent 13ddf267bb
commit 67dfa5e2bc
2 changed files with 88 additions and 43 deletions

View File

@@ -76,21 +76,13 @@ def model_schema(config):
model.get_default(CONF_MINIMUM_UPDATE_INTERVAL, "1s")
)
cv_dimensions = cv.Optional if model.get_default(CONF_WIDTH) else cv.Required
return (
display.FULL_DISPLAY_SCHEMA.extend(
return display.FULL_DISPLAY_SCHEMA.extend(
spi.spi_device_schema(
cs_pin_required=False,
default_mode="MODE0",
default_data_rate=model.get_default(CONF_DATA_RATE, 10_000_000),
)
)
.extend(
{
model.option(pin): pins.gpio_output_pin_schema
for pin in (CONF_RESET_PIN, CONF_CS_PIN, CONF_BUSY_PIN)
}
)
.extend(
).extend(
{
cv.Optional(CONF_ROTATION, default=0): validate_rotation,
cv.Required(CONF_MODEL): cv.one_of(model.name, upper=True),
@@ -104,13 +96,14 @@ def model_schema(config):
}
),
cv.Optional(CONF_FULL_UPDATE_EVERY, default=1): cv.int_range(1, 255),
model.option(CONF_BUSY_PIN): pins.gpio_input_pin_schema,
model.option(CONF_CS_PIN): pins.gpio_output_pin_schema,
model.option(CONF_DC_PIN, fallback=None): pins.gpio_output_pin_schema,
model.option(CONF_RESET_PIN): pins.gpio_output_pin_schema,
cv.GenerateID(): cv.declare_id(class_name),
cv.GenerateID(CONF_INIT_SEQUENCE_ID): cv.declare_id(cg.uint8),
cv_dimensions(CONF_DIMENSIONS): DIMENSION_SCHEMA,
model.option(CONF_ENABLE_PIN): cv.ensure_list(
pins.gpio_output_pin_schema
),
model.option(CONF_ENABLE_PIN): cv.ensure_list(pins.gpio_output_pin_schema),
model.option(CONF_INIT_SEQUENCE, cv.UNDEFINED): cv.ensure_list(
map_sequence
),
@@ -120,7 +113,6 @@ def model_schema(config):
),
}
)
)
def customise_schema(config):

View File

@@ -289,3 +289,56 @@ def test_model_with_full_update_every(
"full_update_every": 10,
}
)
def test_busy_pin_input_mode_ssd1677(
set_core_config: SetCoreConfigCallable,
set_component_config: Callable[[str, Any], None],
) -> None:
"""Test that busy_pin has input mode and cs/dc/reset pins have output mode for ssd1677."""
set_core_config(
PlatformFramework.ESP32_IDF,
platform_data={KEY_BOARD: "esp32dev", KEY_VARIANT: VARIANT_ESP32},
)
# Configure SPI component which is required by epaper_spi
set_component_config("spi", {"id": "spi_bus", "clk_pin": 18, "mosi_pin": 19})
result = run_schema_validation(
{
"id": "test_display",
"model": "ssd1677",
"dc_pin": 21,
"busy_pin": 22,
"reset_pin": 23,
"cs_pin": 5,
"dimensions": {
"width": 200,
"height": 200,
},
}
)
# Verify that busy_pin has input mode set
assert CONF_BUSY_PIN in result
busy_pin_config = result[CONF_BUSY_PIN]
assert "mode" in busy_pin_config
assert busy_pin_config["mode"]["input"] is True
# Verify that cs_pin has output mode set
assert CONF_CS_PIN in result
cs_pin_config = result[CONF_CS_PIN]
assert "mode" in cs_pin_config
assert cs_pin_config["mode"]["output"] is True
# Verify that dc_pin has output mode set
assert CONF_DC_PIN in result
dc_pin_config = result[CONF_DC_PIN]
assert "mode" in dc_pin_config
assert dc_pin_config["mode"]["output"] is True
# Verify that reset_pin has output mode set
assert CONF_RESET_PIN in result
reset_pin_config = result[CONF_RESET_PIN]
assert "mode" in reset_pin_config
assert reset_pin_config["mode"]["output"] is True