From ab4e1146240e3a38981860fc27540671f6fe9394 Mon Sep 17 00:00:00 2001 From: kellerkindt Date: Sun, 5 Jun 2016 03:01:57 +0200 Subject: [PATCH] Fix buffer being overwritten by multiple twi_transmit calls Fixes that more complex methods (like Stream::print(float)) do not work properly. Without this fix, Wire.print(1.01f); results in '1' because Print::printFloat(double, uint8_t) performs multiple print() and therefore twi_transmit calls. Also Wire.println("Heyho"); results only in a newline character. --- hardware/arduino/avr/libraries/Wire/src/utility/twi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hardware/arduino/avr/libraries/Wire/src/utility/twi.c b/hardware/arduino/avr/libraries/Wire/src/utility/twi.c index f5d7d5b05..171af7303 100644 --- a/hardware/arduino/avr/libraries/Wire/src/utility/twi.c +++ b/hardware/arduino/avr/libraries/Wire/src/utility/twi.c @@ -304,7 +304,7 @@ uint8_t twi_transmit(const uint8_t* data, uint8_t length) uint8_t i; // ensure data will fit into buffer - if(TWI_BUFFER_LENGTH < length){ + if(TWI_BUFFER_LENGTH < (twi_txBufferLength+length)){ return 1; } @@ -314,10 +314,10 @@ uint8_t twi_transmit(const uint8_t* data, uint8_t length) } // set length and copy data into tx buffer - twi_txBufferLength = length; for(i = 0; i < length; ++i){ - twi_txBuffer[i] = data[i]; + twi_txBuffer[twi_txBufferLength+i] = data[i]; } + twi_txBufferLength += length; return 0; }