From 7bb30b3cf82426a6b6947b9f69dffa3b8f95dbc1 Mon Sep 17 00:00:00 2001 From: Alexandre-Jacques St-Jacques Date: Tue, 14 Dec 2021 09:25:01 -0500 Subject: [PATCH] Refactoring TwoWire::requestFrom() headers in Wire.cpp (#5935) * 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. Co-authored-by: Flaviu Tamas Co-authored-by: Me No Dev --- libraries/Wire/src/Wire.cpp | 35 ++++++++++++++++++++--------------- libraries/Wire/src/Wire.h | 1 + 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 68d82833..bc06ba54 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"); @@ -445,42 +445,47 @@ void TwoWire::flush(void) //i2cFlush(num); // cleanup } -uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t 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 len, uint8_t 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 * 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(uint16_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) +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) diff --git a/libraries/Wire/src/Wire.h b/libraries/Wire/src/Wire.h index da527b58..ca048bb1 100644 --- a/libraries/Wire/src/Wire.h +++ b/libraries/Wire/src/Wire.h @@ -93,6 +93,7 @@ public: 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);