import esphome.codegen as cg import esphome.config_validation as cv from esphome import pins from esphome.components import spi from esphome.const import CONF_ID #, CONF_MODE # Import ThreadModel enum #from esphome.core import ThreadModel MULTI_CONF = True CONF_DRDY_PIN = "drdy_pin" CONF_SYNC_RESET_PIN = "sync_reset_pin" CONF_REFERENCE_VOLTAGE = "reference_voltage" CONF_CLOCK_FREQUENCY = "clock_frequency" CONF_ADS131M08_ID = "_ads131m08_id" CONF_OSR = "oversampling_ratio" DEPENDENCIES = ["spi"] ads131m08_ns = cg.esphome_ns.namespace("ads131m08") ADS131M08Hub = ads131m08_ns.class_("ADS131M08Hub", cg.Component, spi.SPIDevice) OSR = ads131m08_ns.enum("ADS131M08_OVERSAMPLING_RATIO") ALLOWED_OSRS = { 128: OSR.OSR_128, 256: OSR.OSR_256, 512: OSR.OSR_512, 1024: OSR.OSR_1024, 2048: OSR.OSR_2048, 4096: OSR.OSR_4096, 8192: OSR.OSR_8192, 16256: OSR.OSR_16256, } ALLOWED_CLOCK_FREQUENCIES = { 2048000: 2048000, 4096000: 4096000, 8192000: 8192000, "2048kHz": 2048000, "4096kHz": 4096000, "8192kHz": 8192000, "2.048MHz": 2048000, "4.096MHz": 4096000, "8.192MHz": 8192000, } CONFIG_SCHEMA = ( cv.Schema( { cv.GenerateID(): cv.declare_id(ADS131M08Hub), cv.Required(CONF_DRDY_PIN): pins.internal_gpio_input_pin_schema, cv.Optional(CONF_SYNC_RESET_PIN): pins.internal_gpio_input_pin_schema, cv.Optional(CONF_CLOCK_FREQUENCY, default="8192kHz"): cv.All(cv.frequency, cv.one_of(*ALLOWED_CLOCK_FREQUENCIES.keys())), cv.Optional(CONF_OSR, default=1024): cv.enum(ALLOWED_OSRS, int=True), cv.Optional(CONF_REFERENCE_VOLTAGE, default=1.2): cv.float_range(min=1.1, max=1.3), } ) .extend(cv.COMPONENT_SCHEMA) .extend(spi.spi_device_schema(cs_pin_required=True, default_data_rate="10MHz")) ) async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) await spi.register_spi_device(var, config) drdy = await cg.gpio_pin_expression(config[CONF_DRDY_PIN]) if CONF_SYNC_RESET_PIN in config: sync_reset = await cg.gpio_pin_expression(config[CONF_SYNC_RESET_PIN]) cg.add(var.set_sync_reset_pin(sync_reset)) clock_frequency = ALLOWED_CLOCK_FREQUENCIES[config[CONF_CLOCK_FREQUENCY]] cg.add(var.set_clock_frequency(clock_frequency)) osr = config[CONF_OSR] cg.add(var.set_osr(osr)) reference_voltage = config[CONF_REFERENCE_VOLTAGE] cg.add(var.set_reference_voltage(reference_voltage)) cg.add(var.set_drdy_pin(drdy)) #cg.add(var.set_thread_model(ThreadModel.MULTI_ATOMICS))