5static const uint8_t TCA9555_INPUT_PORT_REGISTER_0 = 0x00;
6static const uint8_t TCA9555_INPUT_PORT_REGISTER_1 = 0x01;
7static const uint8_t TCA9555_OUTPUT_PORT_REGISTER_0 = 0x02;
8static const uint8_t TCA9555_OUTPUT_PORT_REGISTER_1 = 0x03;
9static const uint8_t TCA9555_POLARITY_REGISTER_0 = 0x04;
10static const uint8_t TCA9555_POLARITY_REGISTER_1 = 0x05;
11static const uint8_t TCA9555_CONFIGURATION_PORT_0 = 0x06;
12static const uint8_t TCA9555_CONFIGURATION_PORT_1 = 0x07;
31 ESP_LOGCONFIG(TAG,
"TCA9555:");
53 LOG_STR(
"Failed to read output register")))
64 LOG_STR(
"Failed to read mode register")))
73 uint8_t bank_number = pin < 8 ? 0 : 1;
74 uint8_t register_to_read = bank_number ? TCA9555_INPUT_PORT_REGISTER_1 : TCA9555_INPUT_PORT_REGISTER_0;
75 if (!this->
read_bytes(register_to_read, &data, 1)) {
82 this->
input_mask_ = (data << 8) | (uint16_t(first_half) << 0);
84 this->
input_mask_ = (uint16_t(second_half) << 8) | (data << 0);
98 LOG_STR(
"Failed to write output register"));
105 LOG_STR(
"Failed to write mode register"));
void mark_failed()
Mark this component as failed.
void status_set_warning()
bool status_comm_result(bool ok)
Clears the warning when ok, else sets it with message (default "Communication failed"); returns ok.
void status_clear_warning()
void setup_interrupt_pin_()
InternalGPIOPin * interrupt_pin_
void enable_polling_loop_()
Call from pin_mode() for an input pin: without an interrupt pin the loop polls instead.
bool write_byte_16_le(uint8_t a_register, uint16_t data) const
Write a 16-bit value least significant byte first.
bool read_bytes(uint8_t a_register, uint8_t *data, uint8_t len)
Compat APIs All methods below have been added for compatibility reasons.
bool read_byte_16_le(uint8_t a_register, uint16_t *data)
Read a 16-bit value stored least significant byte first.
bool digital_read_hw(uint8_t pin) override
bool digital_read_cache(uint8_t pin) override
uint16_t mode_mask_
Mask for the pin mode - 1 means output, 0 means input.
void setup() override
Check i2c availability and setup masks.
uint16_t input_mask_
The state read in digital_read_hw - 1 means HIGH, 0 means LOW.
uint16_t output_mask_
The mask to write as output state - 1 means HIGH, 0 means LOW.
void digital_write_hw(uint8_t pin, bool value) override
void dump_config() override
void pin_mode(uint8_t pin, gpio::Flags flags)
bool read_gpio_outputs_()
ESPHOME_LOG_TAG(TAG, "tca9555")
ESPHOME_ALWAYS_INLINE constexpr void assign_bits(T &value, std::type_identity_t< T > mask, bool on)
Set the bits of mask in value when on is true, clear them otherwise.