ESPHome 2025.5.0
Loading...
Searching...
No Matches
mcp23s08.cpp
Go to the documentation of this file.
1#include "mcp23s08.h"
2#include "esphome/core/log.h"
3
4namespace esphome {
5namespace mcp23s08 {
6
7static const char *const TAG = "mcp23s08";
8
9void MCP23S08::set_device_address(uint8_t device_addr) {
10 if (device_addr != 0) {
11 this->device_opcode_ |= ((device_addr & 0x03) << 1);
12 }
13}
14
16 ESP_LOGCONFIG(TAG, "Setting up MCP23S08...");
17 this->spi_setup();
18
19 this->enable();
20 uint8_t cmd = 0b01000000;
21 this->transfer_byte(cmd);
23 this->transfer_byte(0b00011000); // Enable HAEN pins for addressing
24 this->disable();
25
26 // Read current output register state
28
29 if (this->open_drain_ints_) {
30 // enable open-drain interrupt pins, 3.3V-safe
32 }
33}
34
36 ESP_LOGCONFIG(TAG, "MCP23S08:");
37 LOG_PIN(" CS Pin: ", this->cs_);
38}
39
40bool MCP23S08::read_reg(uint8_t reg, uint8_t *value) {
41 this->enable();
42 this->transfer_byte(this->device_opcode_ | 1);
43 this->transfer_byte(reg);
44 *value = this->transfer_byte(0);
45 this->disable();
46 return true;
47}
48
49bool MCP23S08::write_reg(uint8_t reg, uint8_t value) {
50 this->enable();
51 this->transfer_byte(this->device_opcode_);
52 this->transfer_byte(reg);
53 this->transfer_byte(value);
54 this->disable();
55 return true;
56}
57
58} // namespace mcp23s08
59} // namespace esphome
bool write_reg(uint8_t reg, uint8_t value) override
Definition mcp23s08.cpp:49
void dump_config() override
Definition mcp23s08.cpp:35
void set_device_address(uint8_t device_addr)
Definition mcp23s08.cpp:9
bool read_reg(uint8_t reg, uint8_t *value) override
Definition mcp23s08.cpp:40
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7