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:
@@ -76,21 +76,13 @@ def model_schema(config):
|
|||||||
model.get_default(CONF_MINIMUM_UPDATE_INTERVAL, "1s")
|
model.get_default(CONF_MINIMUM_UPDATE_INTERVAL, "1s")
|
||||||
)
|
)
|
||||||
cv_dimensions = cv.Optional if model.get_default(CONF_WIDTH) else cv.Required
|
cv_dimensions = cv.Optional if model.get_default(CONF_WIDTH) else cv.Required
|
||||||
return (
|
return display.FULL_DISPLAY_SCHEMA.extend(
|
||||||
display.FULL_DISPLAY_SCHEMA.extend(
|
|
||||||
spi.spi_device_schema(
|
spi.spi_device_schema(
|
||||||
cs_pin_required=False,
|
cs_pin_required=False,
|
||||||
default_mode="MODE0",
|
default_mode="MODE0",
|
||||||
default_data_rate=model.get_default(CONF_DATA_RATE, 10_000_000),
|
default_data_rate=model.get_default(CONF_DATA_RATE, 10_000_000),
|
||||||
)
|
)
|
||||||
)
|
).extend(
|
||||||
.extend(
|
|
||||||
{
|
|
||||||
model.option(pin): pins.gpio_output_pin_schema
|
|
||||||
for pin in (CONF_RESET_PIN, CONF_CS_PIN, CONF_BUSY_PIN)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.extend(
|
|
||||||
{
|
{
|
||||||
cv.Optional(CONF_ROTATION, default=0): validate_rotation,
|
cv.Optional(CONF_ROTATION, default=0): validate_rotation,
|
||||||
cv.Required(CONF_MODEL): cv.one_of(model.name, upper=True),
|
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),
|
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_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(): cv.declare_id(class_name),
|
||||||
cv.GenerateID(CONF_INIT_SEQUENCE_ID): cv.declare_id(cg.uint8),
|
cv.GenerateID(CONF_INIT_SEQUENCE_ID): cv.declare_id(cg.uint8),
|
||||||
cv_dimensions(CONF_DIMENSIONS): DIMENSION_SCHEMA,
|
cv_dimensions(CONF_DIMENSIONS): DIMENSION_SCHEMA,
|
||||||
model.option(CONF_ENABLE_PIN): cv.ensure_list(
|
model.option(CONF_ENABLE_PIN): cv.ensure_list(pins.gpio_output_pin_schema),
|
||||||
pins.gpio_output_pin_schema
|
|
||||||
),
|
|
||||||
model.option(CONF_INIT_SEQUENCE, cv.UNDEFINED): cv.ensure_list(
|
model.option(CONF_INIT_SEQUENCE, cv.UNDEFINED): cv.ensure_list(
|
||||||
map_sequence
|
map_sequence
|
||||||
),
|
),
|
||||||
@@ -120,7 +113,6 @@ def model_schema(config):
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def customise_schema(config):
|
def customise_schema(config):
|
||||||
|
|||||||
@@ -289,3 +289,56 @@ def test_model_with_full_update_every(
|
|||||||
"full_update_every": 10,
|
"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
|
||||||
|
|||||||
Reference in New Issue
Block a user