16#if defined(ARDUINO_ARCH_RP2040)
17#include <hardware/i2c.h>
22 sfDevFPC2534I2C_Helper()
23 : _device_address{0}, _i2cPort{nullptr}, _isInitialized{false}, _pendingStop{false}, _timeOutMillis{5000}
30 if (i2cBusNumber == 0)
33#if defined(__WIRE0_DEVICE)
34 _i2cPort = __WIRE0_DEVICE;
39 else if (i2cBusNumber == 1)
42#if defined(__WIRE1_DEVICE)
43 _i2cPort = __WIRE1_DEVICE;
53 _isInitialized =
true;
67 bool restart0 = _i2cPort->restart_on_next;
69 _i2cPort->restart_on_next =
false;
71 i2c_read_blocking_until(_i2cPort, _device_address, data, len,
false, make_timeout_time_ms(_timeOutMillis));
74 _i2cPort->restart_on_next = restart0;
78 if (rc == PICO_ERROR_GENERIC || rc == PICO_ERROR_TIMEOUT)
94 _device_address = device_address;
96 int rc = i2c_read_blocking_until(_i2cPort, device_address, (uint8_t *)&theSize,
sizeof(theSize),
true,
97 make_timeout_time_ms(_timeOutMillis));
99 if (rc == PICO_ERROR_GENERIC || rc == PICO_ERROR_TIMEOUT)
108 uint8_t _device_address;
109 i2c_inst_t *_i2cPort;
112 uint16_t _timeOutMillis;
Definition: sfDevFPC2534I2C.h:28
virtual uint16_t readPayload(size_t len, uint8_t *data)=0
virtual void initialize(uint8_t i2cBusNumber)=0
virtual uint16_t readTransferSize(uint8_t device_address)=0