From a118a6017ca2dc11e8c258850ae7309eb6e84b4b Mon Sep 17 00:00:00 2001 From: Alexandre-Jacques St-Jacques Date: Sat, 27 Nov 2021 21:39:45 -0500 Subject: [PATCH 1/8] Refactoring function headers Changing the header so the main TwoWire::requestFrom() definition uses a `size_t` instead of a `uint8_t`, removing the 255 bytes limit on I2C requests. --- libraries/Wire/src/Wire.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 68d82833be4..6fac0cea6bf 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -354,7 +354,7 @@ uint8_t TwoWire::endTransmission(bool sendStop) return 4; } -uint8_t TwoWire::requestFrom(uint16_t address, uint8_t size, bool sendStop) +size_t TwoWire::requestFrom(uint16_t address, size_t size, bool sendStop) { if(is_slave){ log_e("Bus is in Slave Mode"); @@ -373,7 +373,8 @@ uint8_t TwoWire::requestFrom(uint16_t address, uint8_t size, bool sendStop) nonStop = false; rxIndex = 0; rxLength = 0; - err = i2cWriteReadNonStop(num, address, txBuffer, txLength, rxBuffer, size, _timeOutMillis, &rxLength); + err = i2cWriteReadNonStop(num, address, txBuffer, txLength, rxBuffer, size, _timeOutMillis, & +); } else { #if !CONFIG_DISABLE_HAL_LOCKS //acquire lock @@ -447,40 +448,40 @@ void TwoWire::flush(void) uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) { - return requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop)); + return requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop)); } uint8_t TwoWire::requestFrom(uint16_t address, uint8_t quantity, uint8_t sendStop) { - return requestFrom(address, static_cast(quantity), static_cast(sendStop)); + return requestFrom(address, static_cast(quantity), static_cast(sendStop)); } /* Added to match the Arduino function definition: https://github.com/arduino/ArduinoCore-API/blob/173e8eadced2ad32eeb93bcbd5c49f8d6a055ea6/api/HardwareI2C.h#L39 * See: https://github.com/arduino-libraries/ArduinoECCX08/issues/25 */ -size_t TwoWire::requestFrom(uint8_t address, size_t len, bool stopBit) +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t len, bool stopBit) { - return requestFrom((uint16_t)address, (uint8_t)len, stopBit); + return requestFrom((uint16_t)address, (size_t)len, stopBit); } uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity) { - return requestFrom(static_cast(address), static_cast(quantity), true); + return requestFrom(static_cast(address), static_cast(quantity), true); } uint8_t TwoWire::requestFrom(uint16_t address, uint8_t quantity) { - return requestFrom(address, static_cast(quantity), true); + return requestFrom(address, static_cast(quantity), true); } uint8_t TwoWire::requestFrom(int address, int quantity) { - return requestFrom(static_cast(address), static_cast(quantity), true); + return requestFrom(static_cast(address), static_cast(quantity), true); } uint8_t TwoWire::requestFrom(int address, int quantity, int sendStop) { - return static_cast(requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop))); + return static_cast(requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop))); } void TwoWire::beginTransmission(int address) From 11ffcb06f932d23564ff939250423d32db5d7669 Mon Sep 17 00:00:00 2001 From: Alexandre-Jacques St-Jacques Date: Sat, 27 Nov 2021 22:06:09 -0500 Subject: [PATCH 2/8] Update libraries/Wire/src/Wire.cpp Co-authored-by: Flaviu Tamas --- libraries/Wire/src/Wire.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 6fac0cea6bf..b4fc68fcd66 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -373,7 +373,7 @@ size_t TwoWire::requestFrom(uint16_t address, size_t size, bool sendStop) nonStop = false; rxIndex = 0; rxLength = 0; - err = i2cWriteReadNonStop(num, address, txBuffer, txLength, rxBuffer, size, _timeOutMillis, & + err = i2cWriteReadNonStop(num, address, txBuffer, txLength, rxBuffer, size, _timeOutMillis, &rxLength ); } else { #if !CONFIG_DISABLE_HAL_LOCKS From d748de4c6167afdec3f4d7f3902449b0a7b7b621 Mon Sep 17 00:00:00 2001 From: Alexandre-Jacques St-Jacques Date: Sat, 27 Nov 2021 22:18:45 -0500 Subject: [PATCH 3/8] Adding new function prototype for compatibility --- libraries/Wire/src/Wire.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index b4fc68fcd66..89ee4e41c69 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -446,6 +446,11 @@ void TwoWire::flush(void) //i2cFlush(num); // cleanup } +size_t TwoWire::requestFrom(uint8_t address, size_t size, bool sendStop) +{ + return requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop)); +} + uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) { return requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop)); From e2c6266c7db09f7e96b3a058181af027cfc867d0 Mon Sep 17 00:00:00 2001 From: Alexandre-Jacques St-Jacques Date: Sat, 27 Nov 2021 22:18:53 -0500 Subject: [PATCH 4/8] Adding new function prototype for compatibility --- libraries/Wire/src/Wire.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/Wire/src/Wire.h b/libraries/Wire/src/Wire.h index da527b58ba0..b5c27ee6a2e 100644 --- a/libraries/Wire/src/Wire.h +++ b/libraries/Wire/src/Wire.h @@ -93,6 +93,7 @@ class TwoWire: public Stream uint8_t endTransmission(bool sendStop); uint8_t endTransmission(void); + size_t requestFrom(uint16_t address, size_t size, bool sendStop) uint8_t requestFrom(uint16_t address, uint8_t size, bool sendStop); uint8_t requestFrom(uint16_t address, uint8_t size, uint8_t sendStop); size_t requestFrom(uint8_t address, size_t len, bool stopBit); From 4c8e20610eb9517c2226b24de02127a4093dc3cd Mon Sep 17 00:00:00 2001 From: Alexandre-Jacques St-Jacques Date: Sat, 27 Nov 2021 22:22:42 -0500 Subject: [PATCH 5/8] Changing prototype to keep compatibility --- libraries/Wire/src/Wire.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 89ee4e41c69..d3a02333ab9 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -464,7 +464,7 @@ uint8_t TwoWire::requestFrom(uint16_t address, uint8_t quantity, uint8_t sendSto /* Added to match the Arduino function definition: https://github.com/arduino/ArduinoCore-API/blob/173e8eadced2ad32eeb93bcbd5c49f8d6a055ea6/api/HardwareI2C.h#L39 * See: https://github.com/arduino-libraries/ArduinoECCX08/issues/25 */ -uint8_t TwoWire::requestFrom(uint8_t address, uint8_t len, bool stopBit) +uint8_t TwoWire::requestFrom(uint16_t address, uint8_t len, bool stopBit) { return requestFrom((uint16_t)address, (size_t)len, stopBit); } From b8788f6b0b848e4c176ca9f22692050e9073cef4 Mon Sep 17 00:00:00 2001 From: Alexandre-Jacques St-Jacques Date: Wed, 1 Dec 2021 16:38:22 -0500 Subject: [PATCH 6/8] Fix typo --- libraries/Wire/src/Wire.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index d3a02333ab9..dd1458d52d1 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -373,8 +373,7 @@ size_t TwoWire::requestFrom(uint16_t address, size_t size, bool sendStop) nonStop = false; rxIndex = 0; rxLength = 0; - err = i2cWriteReadNonStop(num, address, txBuffer, txLength, rxBuffer, size, _timeOutMillis, &rxLength -); + err = i2cWriteReadNonStop(num, address, txBuffer, txLength, rxBuffer, size, _timeOutMillis, &rxLength); } else { #if !CONFIG_DISABLE_HAL_LOCKS //acquire lock From 3e777da9b765871f9d9cee7974c9df2f397431bb Mon Sep 17 00:00:00 2001 From: Me No Dev Date: Tue, 14 Dec 2021 15:58:09 +0200 Subject: [PATCH 7/8] Missing function declaration termination --- libraries/Wire/src/Wire.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Wire/src/Wire.h b/libraries/Wire/src/Wire.h index b5c27ee6a2e..ca048bb16c4 100644 --- a/libraries/Wire/src/Wire.h +++ b/libraries/Wire/src/Wire.h @@ -93,7 +93,7 @@ class TwoWire: public Stream uint8_t endTransmission(bool sendStop); uint8_t endTransmission(void); - size_t requestFrom(uint16_t address, size_t size, bool sendStop) + size_t requestFrom(uint16_t address, size_t size, bool sendStop); uint8_t requestFrom(uint16_t address, uint8_t size, bool sendStop); uint8_t requestFrom(uint16_t address, uint8_t size, uint8_t sendStop); size_t requestFrom(uint8_t address, size_t len, bool stopBit); From 9bbe1a42b994191499cb91f0369f3ed43189ea73 Mon Sep 17 00:00:00 2001 From: Me No Dev Date: Tue, 14 Dec 2021 16:07:51 +0200 Subject: [PATCH 8/8] Fix undefined variable --- libraries/Wire/src/Wire.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index dd1458d52d1..bc06ba5483a 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -445,19 +445,19 @@ void TwoWire::flush(void) //i2cFlush(num); // cleanup } -size_t TwoWire::requestFrom(uint8_t address, size_t size, bool sendStop) +size_t TwoWire::requestFrom(uint8_t address, size_t len, bool sendStop) { - return requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop)); + return requestFrom(static_cast(address), static_cast(len), static_cast(sendStop)); } -uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t len, uint8_t sendStop) { - return requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop)); + return requestFrom(static_cast(address), static_cast(len), static_cast(sendStop)); } -uint8_t TwoWire::requestFrom(uint16_t address, uint8_t quantity, uint8_t sendStop) +uint8_t TwoWire::requestFrom(uint16_t address, uint8_t len, uint8_t sendStop) { - return requestFrom(address, static_cast(quantity), static_cast(sendStop)); + return requestFrom(address, static_cast(len), static_cast(sendStop)); } /* Added to match the Arduino function definition: https://github.com/arduino/ArduinoCore-API/blob/173e8eadced2ad32eeb93bcbd5c49f8d6a055ea6/api/HardwareI2C.h#L39 @@ -468,24 +468,24 @@ uint8_t TwoWire::requestFrom(uint16_t address, uint8_t len, bool stopBit) return requestFrom((uint16_t)address, (size_t)len, stopBit); } -uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity) +uint8_t TwoWire::requestFrom(uint8_t address, uint8_t len) { - return requestFrom(static_cast(address), static_cast(quantity), true); + return requestFrom(static_cast(address), static_cast(len), true); } -uint8_t TwoWire::requestFrom(uint16_t address, uint8_t quantity) +uint8_t TwoWire::requestFrom(uint16_t address, uint8_t len) { - return requestFrom(address, static_cast(quantity), true); + return requestFrom(address, static_cast(len), true); } -uint8_t TwoWire::requestFrom(int address, int quantity) +uint8_t TwoWire::requestFrom(int address, int len) { - return requestFrom(static_cast(address), static_cast(quantity), true); + return requestFrom(static_cast(address), static_cast(len), true); } -uint8_t TwoWire::requestFrom(int address, int quantity, int sendStop) +uint8_t TwoWire::requestFrom(int address, int len, int sendStop) { - return static_cast(requestFrom(static_cast(address), static_cast(quantity), static_cast(sendStop))); + return static_cast(requestFrom(static_cast(address), static_cast(len), static_cast(sendStop))); } void TwoWire::beginTransmission(int address)