10#ifndef M5_UNIT_COMPONENT_ADAPTER_I2C_HPP
11#define M5_UNIT_COMPONENT_ADAPTER_I2C_HPP
25class AdapterI2C :
public Adapter {
36 inline uint8_t address()
const
40 inline void setAddress(
const uint8_t addr)
45 inline uint32_t clock()
const
50 inline virtual void setClock(
const uint32_t clock)
56 virtual int16_t scl()
const
60 virtual int16_t sda()
const
74 virtual m5::hal::error::error_t wakeup()
76 return m5::hal::error::error_t::UNKNOWN_ERROR;
80 virtual I2CImpl* duplicate(
const uint8_t addr)
82 return new I2CImpl(addr, _clock);
85 virtual TwoWire* getWire()
89 virtual m5::hal::bus::Bus* getBus()
96 uint32_t _clock{100 * 1000U};
101 class WireImpl :
public I2CImpl {
103 WireImpl(TwoWire& wire,
const uint8_t addr,
const uint32_t clock);
104 inline virtual TwoWire* getWire()
override
108 inline virtual int16_t scl()
const override
112 inline virtual int16_t sda()
const override
116 virtual bool begin()
override;
117 virtual bool end()
override;
118 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data,
const size_t len)
override;
119 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t* data,
const size_t len,
120 const uint32_t stop)
override;
121 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t reg,
const uint8_t* data,
const size_t len,
122 const uint32_t stop)
override;
123 virtual m5::hal::error::error_t writeWithTransaction(
const uint16_t reg,
const uint8_t* data,
const size_t len,
124 const uint32_t stop)
override;
125 virtual I2CImpl* duplicate(
const uint8_t addr)
override;
126 virtual m5::hal::error::error_t generalCall(
const uint8_t* data,
const size_t len)
override;
127 virtual m5::hal::error::error_t wakeup()
override;
130 m5::hal::error::error_t write_with_transaction(
const uint8_t addr,
const uint8_t* data,
const size_t len,
131 const uint32_t stop);
135 int16_t _sda{}, _scl{};
141 BusImpl(m5::hal::bus::Bus* bus,
const uint8_t addr,
const uint32_t clock);
142 inline virtual m5::hal::bus::Bus* getBus()
override
147 inline virtual void setClock(
const uint32_t clock)
override
149 I2CImpl::setClock(clock);
150 _access_cfg.freq = clock;
152 virtual I2CImpl* duplicate(
const uint8_t addr)
override;
153 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data,
const size_t len)
override;
154 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t* data,
const size_t len,
155 const uint32_t stop)
override;
157 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t reg,
const uint8_t* data,
const size_t len,
158 const uint32_t stop)
override;
159 virtual m5::hal::error::error_t writeWithTransaction(
const uint16_t reg,
const uint8_t* data,
const size_t len,
160 const uint32_t stop)
override;
161 virtual m5::hal::error::error_t generalCall(
const uint8_t* data,
const size_t len)
override;
162 virtual m5::hal::error::error_t wakeup()
override;
165 m5::hal::error::error_t write_with_transaction(
const m5::hal::bus::I2CMasterAccessConfig& cfg,
166 const uint8_t* data,
const size_t len,
const uint32_t stop);
169 m5::hal::bus::Bus* _bus{};
170 m5::hal::bus::I2CMasterAccessConfig _access_cfg{};
174 AdapterI2C(TwoWire& wire, uint8_t addr,
const uint32_t clock);
176 AdapterI2C(m5::hal::bus::Bus* bus,
const uint8_t addr,
const uint32_t clock);
177 AdapterI2C(m5::hal::bus::Bus& bus,
const uint8_t addr,
const uint32_t clock) :
AdapterI2C(&bus, addr, clock)
181 inline I2CImpl* impl()
183 return static_cast<I2CImpl*
>(_impl.get());
185 inline const I2CImpl* impl()
const
187 return static_cast<I2CImpl*
>(_impl.get());
190 inline uint8_t address()
const
192 return impl()->address();
194 inline void setAddress(
const uint8_t addr)
196 impl()->setAddress(addr);
199 inline uint32_t clock()
const
201 return impl()->clock();
204 inline void setClock(
const uint32_t clock)
206 impl()->setClock(clock);
209 inline int16_t scl()
const
211 return impl()->scl();
213 inline int16_t sda()
const
215 return impl()->sda();
218 virtual Adapter* duplicate(
const uint8_t addr)
override;
226 return impl()->begin();
230 return impl()->end();
237 AdapterI2C() : Adapter(Adapter::Type::I2C, new I2CImpl())
242 gpio::pin_backup_t _backupSCL{-1}, _backupSDA{-1};
Definition adapter_base.hpp:35
Definition adapter_i2c.hpp:139
Definition adapter_i2c.hpp:27
Top level namespace of M5stack.
Definition test_helper.hpp:18
PIN settings save/restore.