[esp32] improve gpio (#8709)

This commit is contained in:
Thomas Rupprecht 2025-05-13 08:24:38 +02:00 committed by GitHub
parent 410b6353fe
commit c5654b4cb2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 20 additions and 22 deletions

View File

@ -1,6 +1,6 @@
from dataclasses import dataclass from dataclasses import dataclass
import logging import logging
from typing import Any from typing import Any, Callable
from esphome import pins from esphome import pins
import esphome.codegen as cg import esphome.codegen as cg
@ -64,8 +64,7 @@ def _lookup_pin(value):
def _translate_pin(value): def _translate_pin(value):
if isinstance(value, dict) or value is None: if isinstance(value, dict) or value is None:
raise cv.Invalid( raise cv.Invalid(
"This variable only supports pin numbers, not full pin schemas " "This variable only supports pin numbers, not full pin schemas (with inverted and mode)."
"(with inverted and mode)."
) )
if isinstance(value, int) and not isinstance(value, bool): if isinstance(value, int) and not isinstance(value, bool):
return value return value
@ -82,30 +81,22 @@ def _translate_pin(value):
@dataclass @dataclass
class ESP32ValidationFunctions: class ESP32ValidationFunctions:
pin_validation: Any pin_validation: Callable[[Any], Any]
usage_validation: Any usage_validation: Callable[[Any], Any]
_esp32_validations = { _esp32_validations = {
VARIANT_ESP32: ESP32ValidationFunctions( VARIANT_ESP32: ESP32ValidationFunctions(
pin_validation=esp32_validate_gpio_pin, usage_validation=esp32_validate_supports pin_validation=esp32_validate_gpio_pin, usage_validation=esp32_validate_supports
), ),
VARIANT_ESP32S2: ESP32ValidationFunctions( VARIANT_ESP32C2: ESP32ValidationFunctions(
pin_validation=esp32_s2_validate_gpio_pin, pin_validation=esp32_c2_validate_gpio_pin,
usage_validation=esp32_s2_validate_supports, usage_validation=esp32_c2_validate_supports,
), ),
VARIANT_ESP32C3: ESP32ValidationFunctions( VARIANT_ESP32C3: ESP32ValidationFunctions(
pin_validation=esp32_c3_validate_gpio_pin, pin_validation=esp32_c3_validate_gpio_pin,
usage_validation=esp32_c3_validate_supports, usage_validation=esp32_c3_validate_supports,
), ),
VARIANT_ESP32S3: ESP32ValidationFunctions(
pin_validation=esp32_s3_validate_gpio_pin,
usage_validation=esp32_s3_validate_supports,
),
VARIANT_ESP32C2: ESP32ValidationFunctions(
pin_validation=esp32_c2_validate_gpio_pin,
usage_validation=esp32_c2_validate_supports,
),
VARIANT_ESP32C6: ESP32ValidationFunctions( VARIANT_ESP32C6: ESP32ValidationFunctions(
pin_validation=esp32_c6_validate_gpio_pin, pin_validation=esp32_c6_validate_gpio_pin,
usage_validation=esp32_c6_validate_supports, usage_validation=esp32_c6_validate_supports,
@ -114,6 +105,14 @@ _esp32_validations = {
pin_validation=esp32_h2_validate_gpio_pin, pin_validation=esp32_h2_validate_gpio_pin,
usage_validation=esp32_h2_validate_supports, usage_validation=esp32_h2_validate_supports,
), ),
VARIANT_ESP32S2: ESP32ValidationFunctions(
pin_validation=esp32_s2_validate_gpio_pin,
usage_validation=esp32_s2_validate_supports,
),
VARIANT_ESP32S3: ESP32ValidationFunctions(
pin_validation=esp32_s3_validate_gpio_pin,
usage_validation=esp32_s3_validate_supports,
),
} }

View File

@ -31,8 +31,7 @@ def esp32_validate_gpio_pin(value):
) )
if 9 <= value <= 10: if 9 <= value <= 10:
_LOGGER.warning( _LOGGER.warning(
"Pin %s (9-10) might already be used by the " "Pin %s (9-10) might already be used by the flash interface in QUAD IO flash mode.",
"flash interface in QUAD IO flash mode.",
value, value,
) )
if value in (24, 28, 29, 30, 31): if value in (24, 28, 29, 30, 31):

View File

@ -22,7 +22,7 @@ def esp32_c2_validate_supports(value):
is_input = mode[CONF_INPUT] is_input = mode[CONF_INPUT]
if num < 0 or num > 20: if num < 0 or num > 20:
raise cv.Invalid(f"Invalid pin number: {value} (must be 0-20)") raise cv.Invalid(f"Invalid pin number: {num} (must be 0-20)")
if is_input: if is_input:
# All ESP32 pins support input mode # All ESP32 pins support input mode

View File

@ -35,7 +35,7 @@ def esp32_c3_validate_supports(value):
is_input = mode[CONF_INPUT] is_input = mode[CONF_INPUT]
if num < 0 or num > 21: if num < 0 or num > 21:
raise cv.Invalid(f"Invalid pin number: {value} (must be 0-21)") raise cv.Invalid(f"Invalid pin number: {num} (must be 0-21)")
if is_input: if is_input:
# All ESP32 pins support input mode # All ESP32 pins support input mode

View File

@ -36,7 +36,7 @@ def esp32_c6_validate_supports(value):
is_input = mode[CONF_INPUT] is_input = mode[CONF_INPUT]
if num < 0 or num > 23: if num < 0 or num > 23:
raise cv.Invalid(f"Invalid pin number: {value} (must be 0-23)") raise cv.Invalid(f"Invalid pin number: {num} (must be 0-23)")
if is_input: if is_input:
# All ESP32 pins support input mode # All ESP32 pins support input mode
pass pass

View File

@ -45,7 +45,7 @@ def esp32_h2_validate_supports(value):
is_input = mode[CONF_INPUT] is_input = mode[CONF_INPUT]
if num < 0 or num > 27: if num < 0 or num > 27:
raise cv.Invalid(f"Invalid pin number: {value} (must be 0-27)") raise cv.Invalid(f"Invalid pin number: {num} (must be 0-27)")
if is_input: if is_input:
# All ESP32 pins support input mode # All ESP32 pins support input mode
pass pass