9#ifdef UDON_TEENSY_I2C_SLAVE_MODE
10# include <i2c_driver.h>
11# include <i2c_driver_wire.h>
26 virtual explicit operator bool()
const = 0;
32 virtual void show()
const = 0;
38 virtual void begin(uint8_t address) = 0;
40 virtual void end() = 0;
52 virtual uint8_t
requestFrom(uint8_t address, uint8_t quantity) = 0;
54 virtual uint8_t
requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) = 0;
56 virtual size_t write(uint8_t data) = 0;
58 virtual size_t write(
const uint8_t* data,
size_t quantity) = 0;
76 template <
int Counter>
85 const uint32_t timeoutMs;
89 uint32_t restartCount;
92 void (*userOnReceive)(int);
93 void (*userOnRequest)();
96 void invokeOnReceive(
int n)
100 transmitMs = millis();
104 void invokeOnRequest()
108 transmitMs = millis();
125 , timeoutMs(timeoutMs)
141 , timeoutMs(other.timeoutMs)
142 , transmitMs(other.transmitMs)
143 , restartCount(other.restartCount)
151 explicit operator bool()
const override
153 return millis() - transmitMs < timeoutMs;
156#if defined(__MK64FX512__)
161 Serial.print(
F(
"This board does not support I2C bus restart.\n"));
188 Serial.print(
F(
"I2C: OK "));
192 Serial.print(
F(
"I2C: NG "));
194 Serial.print(
F(
"restart[n]: "));
196#if defined(__MK64FX512__)
199 Serial.print(restartCount);
202 Serial.print(
F(
"\t transmit[ms]: "));
203 Serial.print(transmitMs);
214 inline void begin(uint8_t address)
override
219#ifdef ARDUINO_ARCH_RP2040
223 inline void setSDA(uint8_t pin)
230 inline void setSCL(uint8_t pin)
238 inline void end()
override
254 wire.setClock(clock);
260 wire.beginTransmission(address);
272 const auto ret = wire.endTransmission(sendStop);
275 transmitMs = millis();
281 inline uint8_t
requestFrom(uint8_t address, uint8_t quantity)
override
283 const auto ret = wire.requestFrom(address, quantity);
286 transmitMs = millis();
292 inline uint8_t
requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop)
override
294 const auto ret = wire.requestFrom(address, quantity, sendStop);
297 transmitMs = millis();
303 inline size_t write(uint8_t data)
override
305 return wire.write(data);
309 inline size_t write(
const uint8_t* data,
size_t quantity)
override
311 return wire.write(data, quantity);
317 return wire.available();
341 userOnReceive = function;
342 wire.onReceive([](
int n)
343 { self->invokeOnReceive(n); });
349 userOnRequest = function;
351 { self->invokeOnRequest(); });
355 template <
int Counter>
362 I2cBusImpl<__COUNTER__>
#define F(x)
Definition Show.hpp:17
I2cBus クラス実装部
Definition I2cBus.hpp:79
uint8_t endTransmission() override
TwoWire::endTransmission() と同等
Definition I2cBus.hpp:264
int read() override
TwoWire::read() と同等
Definition I2cBus.hpp:321
size_t write(const uint8_t *data, size_t quantity) override
TwoWire::write(data, quantity) と同等
Definition I2cBus.hpp:309
void setClock(uint32_t clock) override
TwoWire::setClock(clock) と同等
Definition I2cBus.hpp:252
I2cBusImpl(TwoWire &wire, uint32_t timeoutMs=100)
コンストラクタ
Definition I2cBus.hpp:123
void onReceive(void(*function)(int)) override
TwoWire::onReceive(function) と同等
Definition I2cBus.hpp:339
void begin(uint8_t address) override
TwoWire::begin(address) と同等
Definition I2cBus.hpp:214
uint8_t requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) override
TwoWire::requestFrom(address, quantity, sendStop) と同等
Definition I2cBus.hpp:292
void show() const override
バスの状態を表示
Definition I2cBus.hpp:184
void onRequest(void(*function)()) override
TwoWire::onRequest(function) と同等
Definition I2cBus.hpp:347
I2cBusImpl(I2cBusImpl &&other)
ムーブコンストラクタ
Definition I2cBus.hpp:139
int peek() override
TwoWire::peek() と同等
Definition I2cBus.hpp:327
size_t write(uint8_t data) override
TwoWire::write(data) と同等
Definition I2cBus.hpp:303
void flush() override
TwoWire::flush() と同等
Definition I2cBus.hpp:333
bool update() override
更新
Definition I2cBus.hpp:168
uint8_t requestFrom(uint8_t address, uint8_t quantity) override
TwoWire::requestFrom(address, quantity) と同等
Definition I2cBus.hpp:281
void beginTransmission(uint8_t address) override
TwoWire::beginTransmission(address) と同等
Definition I2cBus.hpp:258
void begin() override
TwoWire::begin() と同等
Definition I2cBus.hpp:208
void end() override
TwoWire::end() と同等
Definition I2cBus.hpp:238
uint8_t endTransmission(uint8_t sendStop) override
TwoWire::endTransmission(sendStop) と同等
Definition I2cBus.hpp:270
int available() override
TwoWire::available() と同等
Definition I2cBus.hpp:315
void restart() override
バス再起動
Definition I2cBus.hpp:244
I2cBusImpl(const I2cBusImpl &)=delete
コピーコンストラクタ
I2cBus クラスのインターフェース
Definition I2cBus.hpp:21
virtual uint8_t endTransmission()=0
virtual void onReceive(void(*function)(int))=0
virtual size_t write(const uint8_t *data, size_t quantity)=0
virtual uint8_t requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop)=0
virtual int available()=0
virtual bool update()=0
更新
virtual void show() const =0
バスの状態を表示
virtual size_t write(uint8_t data)=0
virtual void begin(uint8_t address)=0
virtual uint8_t endTransmission(uint8_t sendStop)=0
virtual uint8_t requestFrom(uint8_t address, uint8_t quantity)=0
virtual void beginTransmission(uint8_t address)=0
virtual ~II2cBus()=default
virtual void setClock(uint32_t clock)=0
virtual void onRequest(void(*function)())=0