fix CONF_* and macros

This commit is contained in:
Gábor Poczkodi 2024-10-18 04:45:00 +02:00
parent 95c16c3453
commit 7a357d1b6b
6 changed files with 127 additions and 120 deletions

View file

@ -4,7 +4,19 @@ from esphome import automation, pins
from esphome.components import i2c, sensor, binary_sensor, text_sensor from esphome.components import i2c, sensor, binary_sensor, text_sensor
from esphome.const import ( from esphome.const import (
CONF_ID, CONF_ID,
CONF_ANALOG,
CONF_SENSOR,
CONF_FREQUENCY, CONF_FREQUENCY,
CONF_POWER,
CONF_LEVEL,
CONF_ATTENUATION,
CONF_CHANNELS,
CONF_MODE,
CONF_SOURCE,
CONF_THRESHOLD,
CONF_GAIN,
CONF_PRESET,
CONF_TEXT,
STATE_CLASS_MEASUREMENT, STATE_CLASS_MEASUREMENT,
ICON_CHIP, ICON_CHIP,
ENTITY_CATEGORY_DIAGNOSTIC, ENTITY_CATEGORY_DIAGNOSTIC,
@ -19,7 +31,7 @@ UNIT_MEGA_HERTZ = "MHz"
UNIT_KILO_HERTZ = "kHz" UNIT_KILO_HERTZ = "kHz"
UNIT_MILLI_VOLT = "mV" UNIT_MILLI_VOLT = "mV"
UNIT_MICRO_AMPERE = "mA" UNIT_MICRO_AMPERE = "mA"
UNIT_DECIBEL_MICRO_VOLT = "dBµV" UNIT_DECIBEL_MICRO_VOLT = "dBuV"
UNIT_PICO_FARAD = "pF" UNIT_PICO_FARAD = "pF"
UNIT_KILO_OHM = "kOhm" UNIT_KILO_OHM = "kOhm"
UNIT_DECIBEL_FS = "dBfs" UNIT_DECIBEL_FS = "dBfs"
@ -39,17 +51,14 @@ Si4713Component = si4713_ns.class_(
CONF_SI4713_ID = "si4713_id" CONF_SI4713_ID = "si4713_id"
CONF_RESET_PIN = "reset_pin" CONF_RESET_PIN = "reset_pin"
CONF_SECTION_TUNER = "tuner" CONF_TUNER = "tuner"
CONF_SECTION_ANALOG = "analog" CONF_DIGITAL = "digital"
CONF_SECTION_DIGITAL = "digital" CONF_PILOT = "pilot"
CONF_SECTION_PILOT = "pilot" CONF_REFCLK = "refclk"
CONF_SECTION_REFCLK = "refclk" CONF_COMPRESSOR = "compressor"
CONF_SECTION_COMPRESSOR = "compressor" CONF_LIMITER = "limiter"
CONF_SECTION_LIMITER = "limiter" CONF_ASQ = "asq"
CONF_SECTION_ASQ = "asq" CONF_RDS = "rds"
CONF_SECTION_RDS = "rds"
CONF_SECTION_OUTPUT = "output"
CONF_SECTION_SENSOR = "sensor"
# general config # general config
CONF_OP_MODE = "op_mode" CONF_OP_MODE = "op_mode"
CONF_MUTE = "mute" CONF_MUTE = "mute"
@ -58,16 +67,16 @@ CONF_PRE_EMPHASIS = "pre_emphasis"
# tuner # tuner
# CONF_FREQUENCY = "frequency" # CONF_FREQUENCY = "frequency"
CONF_DEVIATION = "deviation" CONF_DEVIATION = "deviation"
CONF_POWER = "power" # CONF_POWER = "power"
CONF_ANTCAP = "antcap" CONF_ANTCAP = "antcap"
# analog # analog
CONF_LEVEL = "level" # CONF_LEVEL = "level"
CONF_ATTENUATION = "attenuation" # CONF_ATTENUATION = "attenuation"
# digital # digital
CONF_SAMPLE_RATE = "sample_rate" CONF_SAMPLE_RATE = "sample_rate"
CONF_SAMPLE_BITS = "sample_bits" CONF_SAMPLE_BITS = "sample_bits"
CONF_CHANNELS = "channels" # CONF_CHANNELS = "channels"
CONF_MODE = "mode" # CONF_MODE = "mode"
CONF_CLOCK_EDGE = "clock_edge" CONF_CLOCK_EDGE = "clock_edge"
# pilot # pilot
CONF_ENABLE = "enable" CONF_ENABLE = "enable"
@ -75,15 +84,15 @@ CONF_ENABLE = "enable"
CONF_DEVIATION = "deviation" CONF_DEVIATION = "deviation"
# refclk # refclk
# CONF_FREQUENCY = "frequency" # CONF_FREQUENCY = "frequency"
CONF_SOURCE = "source" # CONF_SOURCE = "source"
CONF_PRESCALER = "prescaler" CONF_PRESCALER = "prescaler"
# compressor # compressor
CONF_ENABLE = "enable" CONF_ENABLE = "enable"
CONF_THRESHOLD = "threshold" # CONF_THRESHOLD = "threshold"
CONF_ATTACK = "attack" CONF_ATTACK = "attack"
CONF_RELEASE = "release" CONF_RELEASE = "release"
CONF_GAIN = "gain" # CONF_GAIN = "gain"
CONF_PRESET = "preset" # CONF_PRESET = "preset"
# limiter # limiter
CONF_ENABLE = "enable" CONF_ENABLE = "enable"
CONF_RELEASE_TIME = "release_time" CONF_RELEASE_TIME = "release_time"
@ -99,7 +108,7 @@ CONF_DURATION_HIGH = "duration_high"
CONF_ENABLE = "enable" CONF_ENABLE = "enable"
CONF_DEVIATION = "deviation" CONF_DEVIATION = "deviation"
CONF_STATION = "station" CONF_STATION = "station"
CONF_TEXT = "text" # CONF_TEXT = "text"
# output # output
CONF_GPIO1 = "gpio1" CONF_GPIO1 = "gpio1"
CONF_GPIO2 = "gpio2" CONF_GPIO2 = "gpio2"
@ -351,16 +360,16 @@ CONFIG_SCHEMA = (
cv.Optional(CONF_MUTE, default=False): cv.boolean, cv.Optional(CONF_MUTE, default=False): cv.boolean,
cv.Optional(CONF_MONO, default=False): cv.boolean, cv.Optional(CONF_MONO, default=False): cv.boolean,
cv.Optional(CONF_PRE_EMPHASIS, default="75us"): cv.enum(PRE_EMPHASIS), cv.Optional(CONF_PRE_EMPHASIS, default="75us"): cv.enum(PRE_EMPHASIS),
cv.Optional(CONF_SECTION_TUNER): TUNER_SCHEMA, cv.Optional(CONF_TUNER): TUNER_SCHEMA,
cv.Optional(CONF_SECTION_ANALOG): ANALOG_SCHEMA, cv.Optional(CONF_ANALOG): ANALOG_SCHEMA,
cv.Optional(CONF_SECTION_DIGITAL): DIGITAL_SCHEMA, cv.Optional(CONF_DIGITAL): DIGITAL_SCHEMA,
cv.Optional(CONF_SECTION_PILOT): PILOT_SCHEMA, cv.Optional(CONF_PILOT): PILOT_SCHEMA,
cv.Optional(CONF_SECTION_REFCLK): REFCLK_SCHEMA, cv.Optional(CONF_REFCLK): REFCLK_SCHEMA,
cv.Optional(CONF_SECTION_COMPRESSOR): COMPRESSOR_SCHEMA, cv.Optional(CONF_COMPRESSOR): COMPRESSOR_SCHEMA,
cv.Optional(CONF_SECTION_LIMITER): LIMITER_SCHEMA, cv.Optional(CONF_LIMITER): LIMITER_SCHEMA,
cv.Optional(CONF_SECTION_ASQ): ASQ_SCHEMA, cv.Optional(CONF_ASQ): ASQ_SCHEMA,
cv.Optional(CONF_SECTION_RDS): RDS_SCHEMA, cv.Optional(CONF_RDS): RDS_SCHEMA,
cv.Optional(CONF_SECTION_SENSOR): SENSOR_SCHEMA, cv.Optional(CONF_SENSOR): SENSOR_SCHEMA,
} }
) )
.extend(cv.polling_component_schema("60s")) .extend(cv.polling_component_schema("60s"))
@ -424,39 +433,39 @@ async def to_code(config):
await set_var(config, CONF_MUTE, var.set_mute) await set_var(config, CONF_MUTE, var.set_mute)
await set_var(config, CONF_MONO, var.set_mono) await set_var(config, CONF_MONO, var.set_mono)
await set_var(config, CONF_PRE_EMPHASIS, var.set_pre_emphasis) await set_var(config, CONF_PRE_EMPHASIS, var.set_pre_emphasis)
if tuner_config := config.get(CONF_SECTION_TUNER): if tuner_config := config.get(CONF_TUNER):
await set_var(tuner_config, CONF_FREQUENCY, var.set_frequency) await set_var(tuner_config, CONF_FREQUENCY, var.set_frequency)
await set_var(tuner_config, CONF_DEVIATION, var.set_audio_deviation) await set_var(tuner_config, CONF_DEVIATION, var.set_audio_deviation)
await set_var(tuner_config, CONF_POWER, var.set_power) await set_var(tuner_config, CONF_POWER, var.set_power)
await set_var(tuner_config, CONF_ANTCAP, var.set_antcap) await set_var(tuner_config, CONF_ANTCAP, var.set_antcap)
if analog_config := config.get(CONF_SECTION_ANALOG): if analog_config := config.get(CONF_ANALOG):
await set_var(analog_config, CONF_LEVEL, var.set_analog_level) await set_var(analog_config, CONF_LEVEL, var.set_analog_level)
await set_var(analog_config, CONF_ATTENUATION, var.set_analog_attenuation) await set_var(analog_config, CONF_ATTENUATION, var.set_analog_attenuation)
if digital_config := config.get(CONF_SECTION_DIGITAL): if digital_config := config.get(CONF_DIGITAL):
await set_var(digital_config, CONF_SAMPLE_RATE, var.set_digital_sample_rate) await set_var(digital_config, CONF_SAMPLE_RATE, var.set_digital_sample_rate)
await set_var(digital_config, CONF_SAMPLE_BITS, var.set_digital_sample_bits) await set_var(digital_config, CONF_SAMPLE_BITS, var.set_digital_sample_bits)
await set_var(digital_config, CONF_CHANNELS, var.set_digital_channels) await set_var(digital_config, CONF_CHANNELS, var.set_digital_channels)
await set_var(digital_config, CONF_MODE, var.set_digital_mode) await set_var(digital_config, CONF_MODE, var.set_digital_mode)
await set_var(digital_config, CONF_CLOCK_EDGE, var.set_digital_clock_edge) await set_var(digital_config, CONF_CLOCK_EDGE, var.set_digital_clock_edge)
if pilot_config := config.get(CONF_SECTION_PILOT): if pilot_config := config.get(CONF_PILOT):
await set_var(pilot_config, CONF_ENABLE, var.set_pilot_enable) await set_var(pilot_config, CONF_ENABLE, var.set_pilot_enable)
await set_var(pilot_config, CONF_FREQUENCY, var.set_pilot_frequency) await set_var(pilot_config, CONF_FREQUENCY, var.set_pilot_frequency)
await set_var(pilot_config, CONF_DEVIATION, var.set_pilot_deviation) await set_var(pilot_config, CONF_DEVIATION, var.set_pilot_deviation)
if refclk_config := config.get(CONF_SECTION_REFCLK): if refclk_config := config.get(CONF_REFCLK):
await set_var(refclk_config, CONF_FREQUENCY, var.set_refclk_frequency) await set_var(refclk_config, CONF_FREQUENCY, var.set_refclk_frequency)
await set_var(refclk_config, CONF_SOURCE, var.set_refclk_source) await set_var(refclk_config, CONF_SOURCE, var.set_refclk_source)
await set_var(refclk_config, CONF_PRESCALER, var.set_refclk_prescaler) await set_var(refclk_config, CONF_PRESCALER, var.set_refclk_prescaler)
if compressor_config := config.get(CONF_SECTION_COMPRESSOR): if compressor_config := config.get(CONF_COMPRESSOR):
await set_var(compressor_config, CONF_ENABLE, var.set_acomp_enable) await set_var(compressor_config, CONF_ENABLE, var.set_acomp_enable)
await set_var(compressor_config, CONF_THRESHOLD, var.set_acomp_threshold) await set_var(compressor_config, CONF_THRESHOLD, var.set_acomp_threshold)
await set_var(compressor_config, CONF_ATTACK, var.set_acomp_attack) await set_var(compressor_config, CONF_ATTACK, var.set_acomp_attack)
await set_var(compressor_config, CONF_RELEASE, var.set_acomp_release) await set_var(compressor_config, CONF_RELEASE, var.set_acomp_release)
await set_var(compressor_config, CONF_GAIN, var.set_acomp_gain) await set_var(compressor_config, CONF_GAIN, var.set_acomp_gain)
await set_var(compressor_config, CONF_PRESET, var.set_acomp_preset) await set_var(compressor_config, CONF_PRESET, var.set_acomp_preset)
if limiter_config := config.get(CONF_SECTION_LIMITER): if limiter_config := config.get(CONF_LIMITER):
await set_var(limiter_config, CONF_ENABLE, var.set_limiter_enable) await set_var(limiter_config, CONF_ENABLE, var.set_limiter_enable)
await set_var(limiter_config, CONF_RELEASE_TIME, var.set_limiter_release_time) await set_var(limiter_config, CONF_RELEASE_TIME, var.set_limiter_release_time)
if asq_config := config.get(CONF_SECTION_ASQ): if asq_config := config.get(CONF_ASQ):
await set_var(asq_config, CONF_IALL, var.set_asq_iall_enable) await set_var(asq_config, CONF_IALL, var.set_asq_iall_enable)
await set_var(asq_config, CONF_IALH, var.set_asq_ialh_enable) await set_var(asq_config, CONF_IALH, var.set_asq_ialh_enable)
await set_var(asq_config, CONF_OVERMOD, var.set_asq_overmod_enable) await set_var(asq_config, CONF_OVERMOD, var.set_asq_overmod_enable)
@ -464,12 +473,12 @@ async def to_code(config):
await set_var(asq_config, CONF_DURATION_LOW, var.set_asq_duration_low) await set_var(asq_config, CONF_DURATION_LOW, var.set_asq_duration_low)
await set_var(asq_config, CONF_LEVEL_HIGH, var.set_asq_level_high) await set_var(asq_config, CONF_LEVEL_HIGH, var.set_asq_level_high)
await set_var(asq_config, CONF_DURATION_HIGH, var.set_asq_duration_high) await set_var(asq_config, CONF_DURATION_HIGH, var.set_asq_duration_high)
if rds_config := config.get(CONF_SECTION_RDS): if rds_config := config.get(CONF_RDS):
await set_var(rds_config, CONF_ENABLE, var.set_rds_enable) await set_var(rds_config, CONF_ENABLE, var.set_rds_enable)
await set_var(rds_config, CONF_DEVIATION, var.set_rds_deviation) await set_var(rds_config, CONF_DEVIATION, var.set_rds_deviation)
await set_var(rds_config, CONF_STATION, var.set_rds_station) await set_var(rds_config, CONF_STATION, var.set_rds_station)
await set_var(rds_config, CONF_TEXT, var.set_rds_text) await set_var(rds_config, CONF_TEXT, var.set_rds_text)
if sensor_config := config.get(CONF_SECTION_SENSOR): if sensor_config := config.get(CONF_SENSOR):
await new_text_sensor(sensor_config, CONF_CHIP_ID, var.set_chip_id_text_sensor) await new_text_sensor(sensor_config, CONF_CHIP_ID, var.set_chip_id_text_sensor)
await new_sensor( await new_sensor(
sensor_config, CONF_READ_FREQUENCY, var.set_read_frequency_sensor sensor_config, CONF_READ_FREQUENCY, var.set_read_frequency_sensor

View file

@ -4,6 +4,11 @@ import esphome.config_validation as cv
from esphome.const import ( from esphome.const import (
CONF_FREQUENCY, CONF_FREQUENCY,
CONF_MODE, CONF_MODE,
CONF_ANALOG,
CONF_POWER,
CONF_LEVEL,
CONF_THRESHOLD,
CONF_GAIN,
UNIT_HERTZ, UNIT_HERTZ,
UNIT_MILLISECOND, UNIT_MILLISECOND,
UNIT_DECIBEL, UNIT_DECIBEL,
@ -19,24 +24,18 @@ from .. import (
CONF_SI4713_ID, CONF_SI4713_ID,
Si4713Component, Si4713Component,
si4713_ns, si4713_ns,
CONF_SECTION_TUNER, CONF_TUNER,
CONF_SECTION_ANALOG, CONF_DIGITAL,
CONF_SECTION_DIGITAL, CONF_PILOT,
CONF_SECTION_PILOT, CONF_REFCLK,
CONF_SECTION_REFCLK, CONF_COMPRESSOR,
CONF_SECTION_COMPRESSOR, CONF_LIMITER,
CONF_SECTION_LIMITER, CONF_ASQ,
CONF_SECTION_ASQ, CONF_RDS,
CONF_SECTION_RDS,
CONF_FREQUENCY,
CONF_DEVIATION, CONF_DEVIATION,
CONF_POWER,
CONF_ANTCAP, CONF_ANTCAP,
CONF_LEVEL,
CONF_SAMPLE_RATE, CONF_SAMPLE_RATE,
CONF_PRESCALER, CONF_PRESCALER,
CONF_THRESHOLD,
CONF_GAIN,
CONF_RELEASE_TIME, CONF_RELEASE_TIME,
CONF_LEVEL_LOW, CONF_LEVEL_LOW,
CONF_DURATION_LOW, CONF_DURATION_LOW,
@ -71,7 +70,7 @@ RdsDeviationNumber = si4713_ns.class_("RdsDeviationNumber", number.Number)
CONFIG_SCHEMA = cv.Schema( CONFIG_SCHEMA = cv.Schema(
{ {
cv.GenerateID(CONF_SI4713_ID): cv.use_id(Si4713Component), cv.GenerateID(CONF_SI4713_ID): cv.use_id(Si4713Component),
cv.Optional(CONF_SECTION_TUNER): cv.Schema( cv.Optional(CONF_TUNER): cv.Schema(
{ {
cv.Optional(CONF_FREQUENCY): number.number_schema( cv.Optional(CONF_FREQUENCY): number.number_schema(
FrequencyNumber, FrequencyNumber,
@ -99,7 +98,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
} }
), ),
cv.Optional(CONF_SECTION_ANALOG): cv.Schema( cv.Optional(CONF_ANALOG): cv.Schema(
{ {
cv.Optional(CONF_LEVEL): number.number_schema( cv.Optional(CONF_LEVEL): number.number_schema(
AnalogLevelNumber, AnalogLevelNumber,
@ -109,7 +108,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
}, },
), ),
cv.Optional(CONF_SECTION_DIGITAL): cv.Schema( cv.Optional(CONF_DIGITAL): cv.Schema(
{ {
cv.Optional(CONF_SAMPLE_RATE): number.number_schema( cv.Optional(CONF_SAMPLE_RATE): number.number_schema(
DigitalSampleRateNumber, DigitalSampleRateNumber,
@ -119,7 +118,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
}, },
), ),
cv.Optional(CONF_SECTION_PILOT): cv.Schema( cv.Optional(CONF_PILOT): cv.Schema(
{ {
cv.Optional(CONF_FREQUENCY): number.number_schema( cv.Optional(CONF_FREQUENCY): number.number_schema(
PilotFrequencyNumber, PilotFrequencyNumber,
@ -135,7 +134,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
}, },
), ),
cv.Optional(CONF_SECTION_REFCLK): cv.Schema( cv.Optional(CONF_REFCLK): cv.Schema(
{ {
cv.Optional(CONF_FREQUENCY): number.number_schema( cv.Optional(CONF_FREQUENCY): number.number_schema(
RefClkFrequencyNumber, RefClkFrequencyNumber,
@ -151,7 +150,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
}, },
), ),
cv.Optional(CONF_SECTION_COMPRESSOR): cv.Schema( cv.Optional(CONF_COMPRESSOR): cv.Schema(
{ {
cv.Optional(CONF_THRESHOLD): number.number_schema( cv.Optional(CONF_THRESHOLD): number.number_schema(
AcompThresholdNumber, AcompThresholdNumber,
@ -167,7 +166,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
}, },
), ),
cv.Optional(CONF_SECTION_LIMITER): cv.Schema( cv.Optional(CONF_LIMITER): cv.Schema(
{ {
cv.Optional(CONF_RELEASE_TIME): number.number_schema( cv.Optional(CONF_RELEASE_TIME): number.number_schema(
LimiterReleaseTimeNumber, LimiterReleaseTimeNumber,
@ -177,7 +176,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
}, },
), ),
cv.Optional(CONF_SECTION_ASQ): cv.Schema( cv.Optional(CONF_ASQ): cv.Schema(
{ {
cv.Optional(CONF_LEVEL_LOW): number.number_schema( cv.Optional(CONF_LEVEL_LOW): number.number_schema(
AsqLevelLowNumber, AsqLevelLowNumber,
@ -205,7 +204,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
} }
), ),
cv.Optional(CONF_SECTION_RDS): cv.Schema( cv.Optional(CONF_RDS): cv.Schema(
{ {
cv.Optional(CONF_DEVIATION): number.number_schema( cv.Optional(CONF_DEVIATION): number.number_schema(
RdsDeviationNumber, RdsDeviationNumber,
@ -234,30 +233,30 @@ async def new_number(p, config, id, setter, min_value, max_value, step, *args, *
async def to_code(config): async def to_code(config):
p = await cg.get_variable(config[CONF_SI4713_ID]) p = await cg.get_variable(config[CONF_SI4713_ID])
if tuner_config := config.get(CONF_SECTION_TUNER): if tuner_config := config.get(CONF_TUNER):
await new_number(p, tuner_config, CONF_FREQUENCY, p.set_frequency_number, 76, 108, 0.05) await new_number(p, tuner_config, CONF_FREQUENCY, p.set_frequency_number, 76, 108, 0.05)
await new_number(p, tuner_config, CONF_DEVIATION, p.set_audio_deviation_number, 0, 90, 0.01) await new_number(p, tuner_config, CONF_DEVIATION, p.set_audio_deviation_number, 0, 90, 0.01)
await new_number(p, tuner_config, CONF_POWER, p.set_power_number, 88, 120, 1, mode = number.NumberMode.NUMBER_MODE_SLIDER) await new_number(p, tuner_config, CONF_POWER, p.set_power_number, 88, 120, 1, mode = number.NumberMode.NUMBER_MODE_SLIDER)
await new_number(p, tuner_config, CONF_ANTCAP, p.set_antcap_number, 0, 191, 1, mode = number.NumberMode.NUMBER_MODE_SLIDER) await new_number(p, tuner_config, CONF_ANTCAP, p.set_antcap_number, 0, 191, 1, mode = number.NumberMode.NUMBER_MODE_SLIDER)
if analog_config := config.get(CONF_SECTION_ANALOG): if analog_config := config.get(CONF_ANALOG):
await new_number(p, analog_config, CONF_LEVEL, p.set_analog_level_number, 0, 1023, 1, mode = number.NumberMode.NUMBER_MODE_SLIDER) await new_number(p, analog_config, CONF_LEVEL, p.set_analog_level_number, 0, 1023, 1, mode = number.NumberMode.NUMBER_MODE_SLIDER)
if digital_config := config.get(CONF_SECTION_DIGITAL): if digital_config := config.get(CONF_DIGITAL):
await new_number(p, digital_config, CONF_SAMPLE_RATE, p.set_digital_sample_rate_number, 32000, 48000, 1) await new_number(p, digital_config, CONF_SAMPLE_RATE, p.set_digital_sample_rate_number, 32000, 48000, 1)
if pilot_config := config.get(CONF_SECTION_PILOT): if pilot_config := config.get(CONF_PILOT):
await new_number(p, pilot_config, CONF_FREQUENCY, p.set_pilot_frequency_number, 0, 19, 0.001) await new_number(p, pilot_config, CONF_FREQUENCY, p.set_pilot_frequency_number, 0, 19, 0.001)
await new_number(p, pilot_config, CONF_DEVIATION, p.set_pilot_deviation_number, 0, 90, 0.001) await new_number(p, pilot_config, CONF_DEVIATION, p.set_pilot_deviation_number, 0, 90, 0.001)
if refclk_config := config.get(CONF_SECTION_REFCLK): if refclk_config := config.get(CONF_REFCLK):
await new_number(p, refclk_config, CONF_FREQUENCY, p.set_refclk_frequency_number, 31130, 34406, 1) await new_number(p, refclk_config, CONF_FREQUENCY, p.set_refclk_frequency_number, 31130, 34406, 1)
await new_number(p, refclk_config, CONF_PRESCALER, p.set_refclk_prescaler_number, 0, 4095, 1) await new_number(p, refclk_config, CONF_PRESCALER, p.set_refclk_prescaler_number, 0, 4095, 1)
if compressor_config := config.get(CONF_SECTION_COMPRESSOR): if compressor_config := config.get(CONF_COMPRESSOR):
await new_number(p, compressor_config, CONF_THRESHOLD, p.set_acomp_threshold_number, -40, 0, 1) await new_number(p, compressor_config, CONF_THRESHOLD, p.set_acomp_threshold_number, -40, 0, 1)
await new_number(p, compressor_config, CONF_GAIN, p.set_acomp_gain_number, 0, 20, 1) await new_number(p, compressor_config, CONF_GAIN, p.set_acomp_gain_number, 0, 20, 1)
if limiter_config := config.get(CONF_SECTION_LIMITER): if limiter_config := config.get(CONF_LIMITER):
await new_number(p, limiter_config, CONF_RELEASE_TIME, p.set_limiter_release_time_number, 0.25, 102.4, 0.01, mode = number.NumberMode.NUMBER_MODE_SLIDER) await new_number(p, limiter_config, CONF_RELEASE_TIME, p.set_limiter_release_time_number, 0.25, 102.4, 0.01, mode = number.NumberMode.NUMBER_MODE_SLIDER)
if asq_config := config.get(CONF_SECTION_ASQ): if asq_config := config.get(CONF_ASQ):
await new_number(p, asq_config, CONF_LEVEL_LOW, p.set_asq_level_low_number, -70, 0, 1) await new_number(p, asq_config, CONF_LEVEL_LOW, p.set_asq_level_low_number, -70, 0, 1)
await new_number(p, asq_config, CONF_DURATION_LOW, p.set_asq_duration_low_number, 0, 65535, 1) await new_number(p, asq_config, CONF_DURATION_LOW, p.set_asq_duration_low_number, 0, 65535, 1)
await new_number(p, asq_config, CONF_LEVEL_HIGH, p.set_asq_level_high_number, -70, 0, 1) await new_number(p, asq_config, CONF_LEVEL_HIGH, p.set_asq_level_high_number, -70, 0, 1)
await new_number(p, asq_config, CONF_DURATION_HIGH, p.set_asq_duration_high_number, 0, 65535, 1) await new_number(p, asq_config, CONF_DURATION_HIGH, p.set_asq_duration_high_number, 0, 65535, 1)
if rds_config := config.get(CONF_SECTION_RDS): if rds_config := config.get(CONF_RDS):
await new_number(p, rds_config, CONF_DEVIATION, p.set_rds_deviation_number, 0, 7.5, 0.01) await new_number(p, rds_config, CONF_DEVIATION, p.set_rds_deviation_number, 0, 7.5, 0.01)

View file

@ -2,6 +2,12 @@ import esphome.codegen as cg
from esphome.components import select from esphome.components import select
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import ( from esphome.const import (
CONF_ANALOG,
CONF_ATTENUATION,
CONF_CHANNELS,
CONF_MODE,
CONF_SOURCE,
CONF_PRESET,
ENTITY_CATEGORY_CONFIG, ENTITY_CATEGORY_CONFIG,
ICON_PULSE, ICON_PULSE,
) )
@ -9,20 +15,14 @@ from .. import (
CONF_SI4713_ID, CONF_SI4713_ID,
Si4713Component, Si4713Component,
si4713_ns, si4713_ns,
CONF_SECTION_ANALOG, CONF_DIGITAL,
CONF_SECTION_DIGITAL, CONF_REFCLK,
CONF_SECTION_REFCLK, CONF_COMPRESSOR,
CONF_SECTION_COMPRESSOR,
CONF_PRE_EMPHASIS, CONF_PRE_EMPHASIS,
CONF_ATTENUATION,
CONF_SAMPLE_BITS, CONF_SAMPLE_BITS,
CONF_CHANNELS,
CONF_MODE,
CONF_CLOCK_EDGE, CONF_CLOCK_EDGE,
CONF_SOURCE,
CONF_ATTACK, CONF_ATTACK,
CONF_RELEASE, CONF_RELEASE,
CONF_PRESET,
ICON_SINE_WAVE, ICON_SINE_WAVE,
ICON_RESISTOR, ICON_RESISTOR,
ICON_EAR_HEARING, ICON_EAR_HEARING,
@ -57,7 +57,7 @@ CONFIG_SCHEMA = cv.Schema(
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=ENTITY_CATEGORY_CONFIG,
icon=ICON_SINE_WAVE, icon=ICON_SINE_WAVE,
), ),
cv.Optional(CONF_SECTION_ANALOG): cv.Schema( cv.Optional(CONF_ANALOG): cv.Schema(
{ {
cv.Optional(CONF_ATTENUATION): select.select_schema( cv.Optional(CONF_ATTENUATION): select.select_schema(
AnalogAttenuationSelect, AnalogAttenuationSelect,
@ -66,7 +66,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
} }
), ),
cv.Optional(CONF_SECTION_DIGITAL): cv.Schema( cv.Optional(CONF_DIGITAL): cv.Schema(
{ {
cv.Optional(CONF_SAMPLE_BITS): select.select_schema( cv.Optional(CONF_SAMPLE_BITS): select.select_schema(
DigitalSampleBitsSelect, DigitalSampleBitsSelect,
@ -90,7 +90,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
} }
), ),
cv.Optional(CONF_SECTION_REFCLK): cv.Schema( cv.Optional(CONF_REFCLK): cv.Schema(
{ {
cv.Optional(CONF_SOURCE): select.select_schema( cv.Optional(CONF_SOURCE): select.select_schema(
RefClkSourceSelect, RefClkSourceSelect,
@ -99,7 +99,7 @@ CONFIG_SCHEMA = cv.Schema(
), ),
} }
), ),
cv.Optional(CONF_SECTION_COMPRESSOR): cv.Schema( cv.Optional(CONF_COMPRESSOR): cv.Schema(
{ {
cv.Optional(CONF_ATTACK): select.select_schema( cv.Optional(CONF_ATTACK): select.select_schema(
AcompAttackSelect, AcompAttackSelect,
@ -133,16 +133,16 @@ async def new_select(p, config, id, setter, options):
async def to_code(config): async def to_code(config):
p = await cg.get_variable(config[CONF_SI4713_ID]) p = await cg.get_variable(config[CONF_SI4713_ID])
await new_select(p, config, CONF_PRE_EMPHASIS, p.set_pre_emphasis_select, PRE_EMPHASIS) await new_select(p, config, CONF_PRE_EMPHASIS, p.set_pre_emphasis_select, PRE_EMPHASIS)
if analog_config := config.get(CONF_SECTION_ANALOG): if analog_config := config.get(CONF_ANALOG):
await new_select(p, analog_config, CONF_ATTENUATION, p.set_analog_attenuation_select, LINE_ATTENUATION) await new_select(p, analog_config, CONF_ATTENUATION, p.set_analog_attenuation_select, LINE_ATTENUATION)
if digital_config := config.get(CONF_SECTION_DIGITAL): if digital_config := config.get(CONF_DIGITAL):
await new_select(p, digital_config, CONF_SAMPLE_BITS, p.set_digital_sample_bits_select, SAMPLE_BITS) await new_select(p, digital_config, CONF_SAMPLE_BITS, p.set_digital_sample_bits_select, SAMPLE_BITS)
await new_select(p, digital_config, CONF_CHANNELS, p.set_digital_channels_select, SAMPLE_CHANNELS) await new_select(p, digital_config, CONF_CHANNELS, p.set_digital_channels_select, SAMPLE_CHANNELS)
await new_select(p, digital_config, CONF_MODE, p.set_digital_mode_select, DIGITAL_MODE) await new_select(p, digital_config, CONF_MODE, p.set_digital_mode_select, DIGITAL_MODE)
await new_select(p, digital_config, CONF_CLOCK_EDGE, p.set_digital_clock_edge_select, DIGITAL_CLOCK_EDGE) await new_select(p, digital_config, CONF_CLOCK_EDGE, p.set_digital_clock_edge_select, DIGITAL_CLOCK_EDGE)
if refclk_config := config.get(CONF_SECTION_REFCLK): if refclk_config := config.get(CONF_REFCLK):
await new_select(p, refclk_config, CONF_SOURCE, p.set_refclk_source_select, REFCLK_SOURCE) await new_select(p, refclk_config, CONF_SOURCE, p.set_refclk_source_select, REFCLK_SOURCE)
if compressor_config := config.get(CONF_SECTION_COMPRESSOR): if compressor_config := config.get(CONF_COMPRESSOR):
await new_select(p, compressor_config, CONF_ATTACK, p.set_acomp_attack_select, ACOMP_ATTACK) await new_select(p, compressor_config, CONF_ATTACK, p.set_acomp_attack_select, ACOMP_ATTACK)
await new_select(p, compressor_config, CONF_RELEASE, p.set_acomp_release_select, ACOMP_RELEASE) await new_select(p, compressor_config, CONF_RELEASE, p.set_acomp_release_select, ACOMP_RELEASE)
await new_select(p, compressor_config, CONF_PRESET, p.set_acomp_preset_select, ACOMP_PRESET) await new_select(p, compressor_config, CONF_PRESET, p.set_acomp_preset_select, ACOMP_PRESET)

View file

@ -326,26 +326,26 @@ template<typename T> T GET_ENUM_LAST(T value) { return T::LAST; }
#define CHECK_ENUM(value) \ #define CHECK_ENUM(value) \
if (value >= GET_ENUM_LAST(value)) { \ if (value >= GET_ENUM_LAST(value)) { \
ESP_LOGE(TAG, "%s(%d) invalid", __func__, (int) value); \ ESP_LOGE(TAG, "%s(%d) invalid", __func__, (int) (value)); \
return; \ return; \
} }
#define CHECK_FLOAT_RANGE(value, min_value, max_value) \ #define CHECK_FLOAT_RANGE(value, min_value, max_value) \
if (!(min_value <= value && value <= max_value)) { \ if (!((min_value) <= (value) && (value) <= (max_value))) { \
ESP_LOGE(TAG, "%s(%.2f) invalid (%.2f - %.2f)", __func__, value, min_value, max_value); \ ESP_LOGE(TAG, "%s(%.2f) invalid (%.2f - %.2f)", __func__, value, min_value, max_value); \
return; \ return; \
} }
#define CHECK_INT_RANGE(value, min_value, max_value) \ #define CHECK_INT_RANGE(value, min_value, max_value) \
if (!(min_value <= value && value <= max_value)) { \ if (!((min_value) <= (value) && (value) <= (max_value))) { \
ESP_LOGE(TAG, "%s(%d) invalid (%d - %d)", __func__, value, min_value, max_value); \ ESP_LOGE(TAG, "%s(%d) invalid (%d - %d)", __func__, value, min_value, max_value); \
return; \ return; \
} }
#define CHECK_TEXT_RANGE(value, max_size) \ #define CHECK_TEXT_RANGE(value, max_size) \
if (value.size() > max_size) { \ if ((value).size() > max_size) { \
ESP_LOGW(TAG, "%s(%s) trimmed (max %d characters)", __func__, value.c_str(), max_size); \ ESP_LOGW(TAG, "%s(%s) trimmed (max %d characters)", __func__, (value).c_str(), max_size); \
value.resize(max_size); \ (value).resize(max_size); \
} }
void Si4713Component::set_reset_pin(InternalGPIOPin *pin) { this->reset_pin_ = pin; } void Si4713Component::set_reset_pin(InternalGPIOPin *pin) { this->reset_pin_ = pin; }

View file

@ -2,20 +2,19 @@ import esphome.codegen as cg
from esphome.components import switch from esphome.components import switch
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import ( from esphome.const import (
CONF_OUTPUT,
DEVICE_CLASS_SWITCH, DEVICE_CLASS_SWITCH,
ENTITY_CATEGORY_CONFIG, ENTITY_CATEGORY_CONFIG,
ICON_SECURITY,
) )
from .. import ( from .. import (
CONF_SI4713_ID, CONF_SI4713_ID,
Si4713Component, Si4713Component,
si4713_ns, si4713_ns,
CONF_SECTION_PILOT, CONF_PILOT,
CONF_SECTION_COMPRESSOR, CONF_COMPRESSOR,
CONF_SECTION_LIMITER, CONF_LIMITER,
CONF_SECTION_ASQ, CONF_ASQ,
CONF_SECTION_RDS, CONF_RDS,
CONF_SECTION_OUTPUT,
CONF_MUTE, CONF_MUTE,
CONF_MONO, CONF_MONO,
CONF_ENABLE, CONF_ENABLE,
@ -148,12 +147,12 @@ CONFIG_SCHEMA = cv.Schema(
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=ENTITY_CATEGORY_CONFIG,
icon=ICON_EAR_HEARING, icon=ICON_EAR_HEARING,
), ),
cv.Optional(CONF_SECTION_PILOT): PILOT_SCHEMA, cv.Optional(CONF_PILOT): PILOT_SCHEMA,
cv.Optional(CONF_SECTION_COMPRESSOR): COMPRESSOR_SCHEMA, cv.Optional(CONF_COMPRESSOR): COMPRESSOR_SCHEMA,
cv.Optional(CONF_SECTION_LIMITER): LIMITER_SCHEMA, cv.Optional(CONF_LIMITER): LIMITER_SCHEMA,
cv.Optional(CONF_SECTION_ASQ): ASQ_SCHEMA, cv.Optional(CONF_ASQ): ASQ_SCHEMA,
cv.Optional(CONF_SECTION_RDS): RDS_SCHEMA, cv.Optional(CONF_RDS): RDS_SCHEMA,
cv.Optional(CONF_SECTION_OUTPUT): OUTPUT_SCHEMA, cv.Optional(CONF_OUTPUT): OUTPUT_SCHEMA,
} }
) )
@ -170,19 +169,19 @@ async def to_code(config):
p = await cg.get_variable(config[CONF_SI4713_ID]) p = await cg.get_variable(config[CONF_SI4713_ID])
await new_switch(p, config, CONF_MUTE, p.set_mute_switch) await new_switch(p, config, CONF_MUTE, p.set_mute_switch)
await new_switch(p, config, CONF_MONO, p.set_mono_switch) await new_switch(p, config, CONF_MONO, p.set_mono_switch)
if pilot_config := config.get(CONF_SECTION_PILOT): if pilot_config := config.get(CONF_PILOT):
await new_switch(p, pilot_config, CONF_ENABLE, p.set_pilot_enable_switch) await new_switch(p, pilot_config, CONF_ENABLE, p.set_pilot_enable_switch)
if compressor_config := config.get(CONF_SECTION_COMPRESSOR): if compressor_config := config.get(CONF_COMPRESSOR):
await new_switch(p, compressor_config, CONF_ENABLE, p.set_acomp_enable_switch) await new_switch(p, compressor_config, CONF_ENABLE, p.set_acomp_enable_switch)
if limiter_config := config.get(CONF_SECTION_LIMITER): if limiter_config := config.get(CONF_LIMITER):
await new_switch(p, limiter_config, CONF_ENABLE, p.set_limiter_enable_switch) await new_switch(p, limiter_config, CONF_ENABLE, p.set_limiter_enable_switch)
if asq_config := config.get(CONF_SECTION_ASQ): if asq_config := config.get(CONF_ASQ):
await new_switch(p, asq_config, CONF_IALL, p.set_asq_iall_enable_switch) await new_switch(p, asq_config, CONF_IALL, p.set_asq_iall_enable_switch)
await new_switch(p, asq_config, CONF_IALH, p.set_asq_ialh_enable_switch) await new_switch(p, asq_config, CONF_IALH, p.set_asq_ialh_enable_switch)
await new_switch(p, asq_config, CONF_OVERMOD, p.set_asq_overmod_enable_switch) await new_switch(p, asq_config, CONF_OVERMOD, p.set_asq_overmod_enable_switch)
if rds_config := config.get(CONF_SECTION_RDS): if rds_config := config.get(CONF_RDS):
await new_switch(p, rds_config, CONF_ENABLE, p.set_rds_enable_switch) await new_switch(p, rds_config, CONF_ENABLE, p.set_rds_enable_switch)
if output_config := config.get(CONF_SECTION_OUTPUT): if output_config := config.get(CONF_OUTPUT):
gpio1 = await new_switch(p, output_config, CONF_GPIO1, p.set_gpio1_switch) gpio1 = await new_switch(p, output_config, CONF_GPIO1, p.set_gpio1_switch)
gpio2 = await new_switch(p, output_config, CONF_GPIO2, p.set_gpio2_switch) gpio2 = await new_switch(p, output_config, CONF_GPIO2, p.set_gpio2_switch)
gpio3 = await new_switch(p, output_config, CONF_GPIO3, p.set_gpio3_switch) gpio3 = await new_switch(p, output_config, CONF_GPIO3, p.set_gpio3_switch)

View file

@ -5,6 +5,7 @@ from esphome.components import mqtt, web_server
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import ( from esphome.const import (
CONF_ID, CONF_ID,
CONF_TEXT,
CONF_ENTITY_CATEGORY, CONF_ENTITY_CATEGORY,
CONF_ICON, CONF_ICON,
CONF_MQTT_ID, CONF_MQTT_ID,
@ -18,9 +19,8 @@ from .. import (
CONF_SI4713_ID, CONF_SI4713_ID,
Si4713Component, Si4713Component,
si4713_ns, si4713_ns,
CONF_SECTION_RDS, CONF_RDS,
CONF_STATION, CONF_STATION,
CONF_TEXT,
ICON_FORMAT_TEXT, ICON_FORMAT_TEXT,
) )
@ -139,7 +139,7 @@ RDS_SCHEMA = cv.Schema(
CONFIG_SCHEMA = cv.Schema( CONFIG_SCHEMA = cv.Schema(
{ {
cv.GenerateID(CONF_SI4713_ID): cv.use_id(Si4713Component), cv.GenerateID(CONF_SI4713_ID): cv.use_id(Si4713Component),
cv.Optional(CONF_SECTION_RDS): RDS_SCHEMA, cv.Optional(CONF_RDS): RDS_SCHEMA,
} }
) )
@ -154,6 +154,6 @@ async def new_text_simple(p, config, id, setter, min_length, max_length, *args):
async def to_code(config): async def to_code(config):
p = await cg.get_variable(config[CONF_SI4713_ID]) p = await cg.get_variable(config[CONF_SI4713_ID])
if rds_config := config.get(CONF_SECTION_RDS): if rds_config := config.get(CONF_RDS):
await new_text_simple(p, rds_config, CONF_STATION, p.set_rds_station_text, 0, 8) await new_text_simple(p, rds_config, CONF_STATION, p.set_rds_station_text, 0, 8)
await new_text_simple(p, rds_config, CONF_TEXT, p.set_rds_text_text, 0, 64) await new_text_simple(p, rds_config, CONF_TEXT, p.set_rds_text_text, 0, 64)