8 static const char *
const TAG =
"sx1509";
11 ESP_LOGCONFIG(TAG,
"Setting up SX1509Component...");
13 ESP_LOGV(TAG,
" Resetting devices...");
36 ESP_LOGCONFIG(TAG,
"SX1509:");
38 ESP_LOGE(TAG,
"Setting up SX1509 failed!");
50 binary_sensor->process(key_data);
56 uint16_t temp_reg_data;
59 if (temp_reg_data & (1 << pin))
68 uint16_t temp_reg_data = 0;
71 temp_reg_data |= (1 << pin);
73 temp_reg_data &= ~(1 << pin);
88 uint16_t temp_pulldown;
92 temp_pullup |= (1 << pin);
94 temp_pullup &= ~(1 << pin);
98 temp_pulldown |= (1 << pin);
100 temp_pulldown &= ~(1 << pin);
110 uint16_t temp_word = 0;
111 uint8_t temp_byte = 0;
114 temp_word |= (1 << pin);
121 temp_byte |= (1 << 6);
122 temp_byte &= ~(1 << 5);
126 temp_byte &= ~(1 << 7);
127 temp_byte &= ~(1 << 3);
132 temp_word |= (1 << pin);
136 temp_word &= ~(1 << pin);
141 osc_source = (osc_source & 0
b11) << 5;
142 osc_pin_function = (osc_pin_function & 1) << 4;
143 osc_freq_out = (osc_freq_out & 0b1111);
144 uint8_t reg_clock = osc_source | osc_pin_function | osc_freq_out;
147 osc_divider = clamp<uint8_t>(osc_divider, 1, 7u);
149 osc_divider = (osc_divider & 0b111) << 4;
151 uint8_t reg_misc = 0;
153 reg_misc &= ~(0b111 << 4);
154 reg_misc |= osc_divider;
159 uint8_t temp_byte = 0;
163 for (
int i = 0; i < this->
rows_; i++)
165 for (
int i = 8; i < (this->
cols_ * 2); i++)
170 for (
int i = 0; i < this->
rows_; i++)
171 temp_byte |= (1 << i);
175 for (
int i = 0; i < this->
cols_; i++)
176 temp_byte |= (1 << i);
183 uint8_t scan_time_bits = 0;
184 for (uint8_t i = 7; i > 0; i--) {
190 scan_time_bits &= 0b111;
193 rows_ = (rows_ - 1) & 0b111;
194 cols_ = (cols_ - 1) & 0b111;
199 uint16_t key_data = 0;
201 return (0xFFFF ^ key_data);
206 uint8_t temp_byte = 0;
208 temp_byte |= (1 << 4);
211 temp_byte |= (1 << 6);
214 config_value &= 0b111;
219 uint8_t config_value = 0;
221 for (
int i = 7; i >= 0; i--) {
222 if (time & (1 << i)) {
223 config_value = i + 1;
227 config_value = clamp<uint8_t>(config_value, 0, 7);
233 uint16_t debounce_enable = 0;
235 debounce_enable |= (1 << pin);
243 for (uint16_t i = 0; i < num_rows; i++)
245 for (uint16_t i = 0; i < (8 + num_cols); i++)
bool read_byte(uint8_t a_register, uint8_t *data, bool stop=true)
bool read_byte_16(uint8_t a_register, uint16_t *data)
void set_debounce_config_(uint8_t config_value)
const uint8_t REG_KEY_DATA_1
uint32_t last_loop_timestamp_
const uint8_t REG_LED_DRIVER_ENABLE_B
uint32_t IRAM_ATTR HOT millis()
const uint8_t REG_DEBOUNCE_ENABLE_B
const uint8_t INTERNAL_CLOCK_2MHZ
void pin_mode(uint8_t pin, gpio::Flags flags)
const uint8_t REG_INPUT_DISABLE_B
void clock_(uint8_t osc_source=2, uint8_t osc_pin_function=1, uint8_t osc_freq_out=0, uint8_t osc_divider=0)
const uint8_t REG_KEY_CONFIG_1
const uint32_t min_loop_period_
std::vector< SX1509Processor * > keypad_binary_sensors_
const uint8_t REG_INTERRUPT_MASK_A
void set_debounce_enable_(uint8_t pin)
void set_debounce_time_(uint8_t time)
bool write_byte(uint8_t a_register, uint8_t data, bool stop=true)
void setup_led_driver(uint8_t pin)
virtual void mark_failed()
Mark this component as failed.
void set_debounce_pin_(uint8_t pin)
void dump_config() override
void IRAM_ATTR HOT delayMicroseconds(uint32_t us)
void digital_write(uint8_t pin, bool bit_value)
void set_debounce_keypad_(uint8_t time, uint8_t num_rows, uint8_t num_cols)
const uint8_t REG_PULL_UP_B
bool write_byte_16(uint8_t a_register, uint16_t data)
const uint8_t REG_KEY_CONFIG_2
const uint8_t REG_OPEN_DRAIN_A
bool digital_read(uint8_t pin)
const uint8_t REG_PULL_DOWN_B
const uint8_t REG_DEBOUNCE_CONFIG