#include #ifdef STA_PLATFORM_ARDUINO #include namespace sta { #ifdef STA_PLATFORM_ARDUINO_DEVICE_ESP32 ArduinoI2C::ArduinoI2C(Mutex * mutex /* = nullptr */, uint8_t sda /* = STA_ESP32_SDA_DEFAULT_PIN */, uint8_t scl /*= STA_ESP32_SCL_DEFAULT_PIN */, uint32_t frequency /* = 0U */) : I2C{mutex} { Wire.begin(sda, scl, frequency); } #else ArduinoI2C::ArduinoI2C(Mutex * mutex /* = nullptr */) : I2C{mutex} { Wire.begin(); } #endif // STA_PLATFORM_ARDUINO_DEVICE_ESP32 void ArduinoI2C::transfer(uint8_t value) { Wire.beginTransmission((uint8_t)address_); Wire.write(value); Wire.endTransmission(true); } void ArduinoI2C::transfer16(uint16_t value) { Wire.beginTransmission((uint8_t)address_); Wire.write(value); Wire.endTransmission(true); } void ArduinoI2C::transfer(const uint8_t * buffer, size_t size) { Wire.beginTransmission((uint8_t)address_); Wire.write(buffer, size); Wire.endTransmission(); } void ArduinoI2C::receive(uint8_t * buffer, size_t size) { size_t count = Wire.requestFrom((uint8_t)address_, (uint8_t)size, true); for (size_t i = 0; i < min(size, count); ++i) { buffer[i] = Wire.read(); } } void ArduinoI2C::fill(uint8_t value, size_t count) { // Initialize a buffer of size count and fill it with the value. uint8_t buffer[count]; memset(buffer, value, count); Wire.beginTransmission((uint8_t)address_); Wire.write(buffer, count); Wire.endTransmission(); } ArduinoI2CDevice::ArduinoI2CDevice(I2C * intf, uint8_t address, bool master /* = true */, bool blocking /* = true */) : I2CDevice{intf, address, master, blocking} { } } // namespace sta #endif // STA_PLATFORM_ARDUINO