ESPHome
2025.6.3
Loading...
Searching...
No Matches
esphome
components
mcp23s17
mcp23s17.cpp
Go to the documentation of this file.
1
#include "
mcp23s17.h
"
2
#include "
esphome/core/log.h
"
3
4
namespace
esphome
{
5
namespace
mcp23s17 {
6
7
static
const
char
*
const
TAG =
"mcp23s17"
;
8
9
void
MCP23S17::set_device_address
(uint8_t device_addr) {
10
if
(device_addr != 0) {
11
this->
device_opcode_
|= ((device_addr & 0b111) << 1);
12
}
13
}
14
15
void
MCP23S17::setup
() {
16
ESP_LOGCONFIG(TAG,
"Running setup"
);
17
this->
spi_setup
();
18
19
this->
enable
();
20
uint8_t cmd = 0b01000000;
21
this->
transfer_byte
(cmd);
22
this->
transfer_byte
(
mcp23x17_base::MCP23X17_IOCONA
);
23
this->
transfer_byte
(0b00011000);
// Enable HAEN pins for addressing
24
this->
disable
();
25
26
this->
enable
();
27
cmd = 0b01001000;
28
this->
transfer_byte
(cmd);
29
this->
transfer_byte
(
mcp23x17_base::MCP23X17_IOCONA
);
30
this->
transfer_byte
(0b00011000);
// Enable HAEN pins for addressing
31
this->
disable
();
32
33
// Read current output register state
34
this->
read_reg
(
mcp23x17_base::MCP23X17_OLATA
, &this->
olat_a_
);
35
this->
read_reg
(
mcp23x17_base::MCP23X17_OLATB
, &this->
olat_b_
);
36
37
if
(this->
open_drain_ints_
) {
38
// enable open-drain interrupt pins, 3.3V-safe
39
this->
write_reg
(
mcp23x17_base::MCP23X17_IOCONA
, 0x04);
40
this->
write_reg
(
mcp23x17_base::MCP23X17_IOCONB
, 0x04);
41
}
42
}
43
44
void
MCP23S17::dump_config
() {
45
ESP_LOGCONFIG(TAG,
"MCP23S17:"
);
46
LOG_PIN(
" CS Pin: "
, this->
cs_
);
47
}
48
49
bool
MCP23S17::read_reg
(uint8_t reg, uint8_t *value) {
50
this->
enable
();
51
this->
transfer_byte
(this->
device_opcode_
| 1);
52
this->
transfer_byte
(reg);
53
*value = this->
transfer_byte
(0xFF);
54
this->
disable
();
55
return
true
;
56
}
57
58
bool
MCP23S17::write_reg
(uint8_t reg, uint8_t value) {
59
this->
enable
();
60
this->
transfer_byte
(this->
device_opcode_
);
61
this->
transfer_byte
(reg);
62
this->
transfer_byte
(value);
63
64
this->
disable
();
65
return
true
;
66
}
67
68
}
// namespace mcp23s17
69
}
// namespace esphome
esphome::mcp23s17::MCP23S17::dump_config
void dump_config() override
Definition
mcp23s17.cpp:44
esphome::mcp23s17::MCP23S17::device_opcode_
uint8_t device_opcode_
Definition
mcp23s17.h:25
esphome::mcp23s17::MCP23S17::set_device_address
void set_device_address(uint8_t device_addr)
Definition
mcp23s17.cpp:9
esphome::mcp23s17::MCP23S17::read_reg
bool read_reg(uint8_t reg, uint8_t *value) override
Definition
mcp23s17.cpp:49
esphome::mcp23s17::MCP23S17::setup
void setup() override
Definition
mcp23s17.cpp:15
esphome::mcp23s17::MCP23S17::write_reg
bool write_reg(uint8_t reg, uint8_t value) override
Definition
mcp23s17.cpp:58
esphome::mcp23x17_base::MCP23X17Base::olat_b_
uint8_t olat_b_
Definition
mcp23x17_base.h:48
esphome::mcp23x17_base::MCP23X17Base::olat_a_
uint8_t olat_a_
Definition
mcp23x17_base.h:47
esphome::mcp23xxx_base::MCP23XXXBase::open_drain_ints_
bool open_drain_ints_
Definition
mcp23xxx_base.h:29
esphome::spi::SPIClient::cs_
GPIOPin * cs_
Definition
spi.h:408
esphome::spi::SPIDevice< spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_8MHZ >::enable
void enable()
Definition
spi.h:493
esphome::spi::SPIDevice< spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_8MHZ >::spi_setup
void spi_setup() override
Definition
spi.h:430
esphome::spi::SPIDevice< spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_8MHZ >::disable
void disable()
Definition
spi.h:495
esphome::spi::SPIDevice< spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_8MHZ >::transfer_byte
uint8_t transfer_byte(uint8_t data)
Definition
spi.h:479
log.h
mcp23s17.h
esphome::mcp23x17_base::MCP23X17_IOCONA
@ MCP23X17_IOCONA
Definition
mcp23x17_base.h:17
esphome::mcp23x17_base::MCP23X17_OLATB
@ MCP23X17_OLATB
Definition
mcp23x17_base.h:34
esphome::mcp23x17_base::MCP23X17_IOCONB
@ MCP23X17_IOCONB
Definition
mcp23x17_base.h:29
esphome::mcp23x17_base::MCP23X17_OLATA
@ MCP23X17_OLATA
Definition
mcp23x17_base.h:22
esphome
Providing packet encoding functions for exchanging data with a remote host.
Definition
a01nyub.cpp:7
Generated by
1.12.0