From a12593051e374dfcd0ecd173bd7d8d0e617e6d27 Mon Sep 17 00:00:00 2001 From: dario Date: Fri, 26 Apr 2024 13:46:19 +0200 Subject: [PATCH] I2C with debugging statements --- src/devices/arduino/bus/i2c.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/devices/arduino/bus/i2c.cpp b/src/devices/arduino/bus/i2c.cpp index acb5b63..dfc5eeb 100644 --- a/src/devices/arduino/bus/i2c.cpp +++ b/src/devices/arduino/bus/i2c.cpp @@ -24,31 +24,38 @@ namespace sta void ArduinoI2C::transfer(uint8_t value) { - Wire.beginTransmission((uint8_t)address_); + Wire.beginTransmission(address_); Wire.write(value); - Wire.endTransmission(true); + uint8_t code = Wire.endTransmission(); + + if (code != 0) + STA_DEBUG_PRINTF("Transfer result: %d", code); } void ArduinoI2C::transfer16(uint16_t value) { - Wire.beginTransmission((uint8_t)address_); + Wire.beginTransmission(address_); Wire.write(value); - Wire.endTransmission(true); + uint8_t code = Wire.endTransmission(); + + if (code != 0) + STA_DEBUG_PRINTF("Transfer result: %d", code); } void ArduinoI2C::transfer(const uint8_t * buffer, size_t size) { - Wire.beginTransmission((uint8_t)address_); + Wire.beginTransmission(address_); Wire.write(buffer, size); - Wire.endTransmission(); + uint8_t code = Wire.endTransmission(); + + if (code != 0) + STA_DEBUG_PRINTF("Transfer result: %d", code); } void ArduinoI2C::receive(uint8_t * buffer, size_t size) { size_t count = Wire.requestFrom((uint8_t)address_, (uint8_t)size); - STA_DEBUG_PRINTF("Receiving %d bytes", count); - for (size_t i = 0; i < min(size, count); ++i) { buffer[i] = Wire.read(); @@ -57,13 +64,17 @@ namespace sta void ArduinoI2C::fill(uint8_t value, size_t count) { + Wire.beginTransmission(address_); // 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(); + + uint8_t code = Wire.endTransmission(); + + if (code != 0) + STA_DEBUG_PRINTF("Transfer result: %d", code); } ArduinoI2CDevice::ArduinoI2CDevice(I2C * intf, uint8_t address, bool master /* = true */, bool blocking /* = true */)