PCA9555 / PCAL9555A Driver
API reference
Loading...
Searching...
No Matches
pcal95555_i2c_interface.hpp
Go to the documentation of this file.
1
6#pragma once
7#include <cstddef>
8#include <cstdint>
9#include <functional>
10
11namespace pcal95555 {
12
13// ============================================================================
14// GPIO Enums -- Standardised Control Pin Model
15// ============================================================================
16
31enum class CtrlPin : uint8_t {
32 INTN = 0,
33 RSTN [[deprecated("PCA9555/PCAL9555A have no reset pin; use ResetToDefault()")]]
35};
36
43enum class GpioSignal : uint8_t {
44 INACTIVE = 0,
45 ACTIVE = 1
46};
47
71template <typename Derived>
73public:
84 bool Write(uint8_t addr, uint8_t reg, const uint8_t* data, size_t len) noexcept {
85 return static_cast<Derived*>(this)->Write(addr, reg, data, len);
86 }
87
97 bool Read(uint8_t addr, uint8_t reg, uint8_t* data, size_t len) noexcept {
98 return static_cast<Derived*>(this)->Read(addr, reg, data, len);
99 }
100
124 bool SetAddressPins(bool a0_level, bool a1_level, bool a2_level) noexcept {
125 // Default implementation: not supported
126 (void)a0_level; // Suppress unused parameter warning
127 (void)a1_level;
128 (void)a2_level;
129 return false;
130 }
131
156 bool EnsureInitialized() noexcept {
157 return static_cast<Derived*>(this)->EnsureInitialized();
158 }
159
189 bool RegisterInterruptHandler(std::function<void()> handler) noexcept {
190 // Default implementation: not supported
191 (void)handler; // Suppress unused parameter warning
192 return false;
193 }
194
195 // --------------------------------------------------------------------------
200
210 void GpioSet(CtrlPin pin, GpioSignal signal) noexcept {
211 (void)pin;
212 (void)signal;
213 }
214
227 bool GpioRead(CtrlPin pin, GpioSignal &signal) noexcept {
228 (void)pin;
229 (void)signal;
230 return false;
231 }
232
237 void GpioSetActive(CtrlPin pin) noexcept { GpioSet(pin, GpioSignal::ACTIVE); }
238
244
246
247protected:
251 I2cInterface() = default;
252
253 // Prevent copying
254 I2cInterface(const I2cInterface&) = delete;
256
257 // Allow moving
260
265 ~I2cInterface() = default;
266};
267
268} // namespace pcal95555
CRTP-based template interface for I2C bus operations.
Definition pcal95555_i2c_interface.hpp:72
bool GpioRead(CtrlPin pin, GpioSignal &signal) noexcept
Read the current state of a control pin.
Definition pcal95555_i2c_interface.hpp:227
bool RegisterInterruptHandler(std::function< void()> handler) noexcept
Definition pcal95555_i2c_interface.hpp:189
void GpioSetInactive(CtrlPin pin) noexcept
Deassert a control pin (set to INACTIVE).
Definition pcal95555_i2c_interface.hpp:243
I2cInterface(const I2cInterface &)=delete
~I2cInterface()=default
Protected destructor.
bool SetAddressPins(bool a0_level, bool a1_level, bool a2_level) noexcept
Definition pcal95555_i2c_interface.hpp:124
I2cInterface & operator=(const I2cInterface &)=delete
void GpioSet(CtrlPin pin, GpioSignal signal) noexcept
Set a control pin to the specified signal state.
Definition pcal95555_i2c_interface.hpp:210
I2cInterface()=default
Protected constructor to prevent direct instantiation.
I2cInterface(I2cInterface &&)=default
I2cInterface & operator=(I2cInterface &&)=default
void GpioSetActive(CtrlPin pin) noexcept
Assert a control pin (set to ACTIVE).
Definition pcal95555_i2c_interface.hpp:237
bool Read(uint8_t addr, uint8_t reg, uint8_t *data, size_t len) noexcept
Read bytes from a device register.
Definition pcal95555_i2c_interface.hpp:97
bool EnsureInitialized() noexcept
Definition pcal95555_i2c_interface.hpp:156
bool Write(uint8_t addr, uint8_t reg, const uint8_t *data, size_t len) noexcept
Write bytes to a device register.
Definition pcal95555_i2c_interface.hpp:84
Definition pcal95555.hpp:21
GpioSignal
Abstract signal level for control pins.
Definition pcal95555_i2c_interface.hpp:43
@ ACTIVE
Pin function is asserted.
@ INACTIVE
Pin function is deasserted.
CtrlPin
Identifies the hardware control pins of the PCAL95555.
Definition pcal95555_i2c_interface.hpp:31
@ RSTN
No such pin on these parts; never driven by the driver.
@ INTN
Interrupt output (active-low, open-drain, read-only)