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
146 inline virtual int16_t scl()
const override
150 inline virtual int16_t sda()
const override
155 inline virtual void setClock(
const uint32_t clock)
override
157 I2CImpl::setClock(clock);
158 _access_cfg.freq = clock;
160 virtual bool begin()
override
164 virtual bool end()
override
168 virtual I2CImpl* duplicate(
const uint8_t addr)
override;
169 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data,
const size_t len)
override;
170 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t* data,
const size_t len,
171 const uint32_t stop)
override;
173 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t reg,
const uint8_t* data,
const size_t len,
174 const uint32_t stop)
override;
175 virtual m5::hal::error::error_t writeWithTransaction(
const uint16_t reg,
const uint8_t* data,
const size_t len,
176 const uint32_t stop)
override;
177 virtual m5::hal::error::error_t generalCall(
const uint8_t* data,
const size_t len)
override;
178 virtual m5::hal::error::error_t wakeup()
override;
181 m5::hal::error::error_t write_with_transaction(
const m5::hal::bus::I2CMasterAccessConfig& cfg,
182 const uint8_t* data,
const size_t len,
const uint32_t stop);
185 m5::hal::bus::Bus* _bus{};
186 m5::hal::bus::I2CMasterAccessConfig _access_cfg{};
187 int16_t _sda{-1}, _scl{-1};
191 AdapterI2C(TwoWire& wire, uint8_t addr,
const uint32_t clock);
193 AdapterI2C(m5::hal::bus::Bus* bus,
const uint8_t addr,
const uint32_t clock);
194 AdapterI2C(m5::hal::bus::Bus& bus,
const uint8_t addr,
const uint32_t clock) :
AdapterI2C(&bus, addr, clock)
198 inline I2CImpl* impl()
200 return static_cast<I2CImpl*
>(_impl.get());
202 inline const I2CImpl* impl()
const
204 return static_cast<I2CImpl*
>(_impl.get());
207 inline uint8_t address()
const
209 return impl()->address();
211 inline void setAddress(
const uint8_t addr)
213 impl()->setAddress(addr);
216 inline uint32_t clock()
const
218 return impl()->clock();
221 inline void setClock(
const uint32_t clock)
223 impl()->setClock(clock);
226 inline int16_t scl()
const
228 return impl()->scl();
230 inline int16_t sda()
const
232 return impl()->sda();
235 virtual Adapter* duplicate(
const uint8_t addr)
override;
243 return impl()->begin();
247 return impl()->end();
254 AdapterI2C() : Adapter(Adapter::Type::I2C, new I2CImpl())
259 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.