Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from esphome.components import esp32
|
|
import esphome.config_validation as cv
|
|
from esphome.core import CORE
|
|
|
|
CODEOWNERS = ["@jesserockz"]
|
|
|
|
VARIANTS_NO_RMT = {esp32.VARIANT_ESP32C2, esp32.VARIANT_ESP32C61}
|
|
|
|
|
|
def validate_rmt_not_supported(rmt_only_keys):
|
|
"""Validate that RMT-only config keys are not used on variants without RMT hardware."""
|
|
rmt_only_keys = set(rmt_only_keys)
|
|
|
|
def _validator(config):
|
|
if CORE.is_esp32:
|
|
variant = esp32.get_esp32_variant()
|
|
if variant in VARIANTS_NO_RMT:
|
|
unsupported = rmt_only_keys.intersection(config)
|
|
if unsupported:
|
|
keys = ", ".join(sorted(f"'{k}'" for k in unsupported))
|
|
raise cv.Invalid(
|
|
f"{keys} not available on {variant} (no RMT hardware)"
|
|
)
|
|
return config
|
|
|
|
return _validator
|
|
|
|
|
|
def validate_clock_resolution():
|
|
def _validator(value):
|
|
cv.only_on_esp32(value)
|
|
value = cv.int_(value)
|
|
variant = esp32.get_esp32_variant()
|
|
if variant == esp32.VARIANT_ESP32H2 and value > 32000000:
|
|
raise cv.Invalid(
|
|
f"ESP32 variant {variant} has a max clock_resolution of 32000000."
|
|
)
|
|
if value > 80000000:
|
|
raise cv.Invalid(
|
|
f"ESP32 variant {variant} has a max clock_resolution of 80000000."
|
|
)
|
|
return value
|
|
|
|
return _validator
|