I2C with debugging statements

This commit is contained in:
dario 2024-04-26 13:46:19 +02:00
parent ec945a7ca1
commit a12593051e

View File

@ -24,31 +24,38 @@ namespace sta
void ArduinoI2C::transfer(uint8_t value) void ArduinoI2C::transfer(uint8_t value)
{ {
Wire.beginTransmission((uint8_t)address_); Wire.beginTransmission(address_);
Wire.write(value); 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) void ArduinoI2C::transfer16(uint16_t value)
{ {
Wire.beginTransmission((uint8_t)address_); Wire.beginTransmission(address_);
Wire.write(value); 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) void ArduinoI2C::transfer(const uint8_t * buffer, size_t size)
{ {
Wire.beginTransmission((uint8_t)address_); Wire.beginTransmission(address_);
Wire.write(buffer, size); 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) void ArduinoI2C::receive(uint8_t * buffer, size_t size)
{ {
size_t count = Wire.requestFrom((uint8_t)address_, (uint8_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) for (size_t i = 0; i < min(size, count); ++i)
{ {
buffer[i] = Wire.read(); buffer[i] = Wire.read();
@ -57,13 +64,17 @@ namespace sta
void ArduinoI2C::fill(uint8_t value, size_t count) void ArduinoI2C::fill(uint8_t value, size_t count)
{ {
Wire.beginTransmission(address_);
// Initialize a buffer of size count and fill it with the value. // Initialize a buffer of size count and fill it with the value.
uint8_t buffer[count]; uint8_t buffer[count];
memset(buffer, value, count); memset(buffer, value, count);
Wire.beginTransmission((uint8_t)address_);
Wire.write(buffer, count); 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 */) ArduinoI2CDevice::ArduinoI2CDevice(I2C * intf, uint8_t address, bool master /* = true */, bool blocking /* = true */)