From 68103fcc6c81b78355c44fd6eb0eca6f4cbb91a0 Mon Sep 17 00:00:00 2001 From: Alec Woods Date: Thu, 16 Apr 2020 11:13:43 -0400 Subject: [PATCH 1/2] Match function prototypes from TwoWire This allows the overloads to be called correctly through a TwoWire pointer. In particular, endTransmission and RequestFrom didn't match the TwoWire prototypes, which causes issues when attempting to call through a pointer. --- SoftwareWire.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/SoftwareWire.h b/SoftwareWire.h index c7f2f7d..5b73922 100644 --- a/SoftwareWire.h +++ b/SoftwareWire.h @@ -33,9 +33,15 @@ class SoftwareWire : public TwoWire void setClock(uint32_t clock); void beginTransmission(uint8_t address); void beginTransmission(int address); - uint8_t endTransmission(boolean sendStop = true); - uint8_t requestFrom(uint8_t address, uint8_t size, boolean sendStop = true); - uint8_t requestFrom(int address, int size, boolean sendStop = true); + uint8_t endTransmission(boolean sendStop); + uint8_t endTransmission(uint8_t sendStop) override; + uint8_t endTransmission() override; + uint8_t requestFrom(uint8_t address, uint8_t size, boolean sendStop); + uint8_t requestFrom(uint8_t, uint8_t) override; + uint8_t requestFrom(uint8_t, uint8_t, uint8_t) override; + uint8_t requestFrom(int address, int size, boolean sendStop); + uint8_t requestFrom(int, int) override; + uint8_t requestFrom(int, int, int) override; size_t write(uint8_t data) override; size_t write(const uint8_t *data, size_t quantity) override; int available(void) override; From 8ec4b3481adc08c6c8901407601d68a06cd94d8c Mon Sep 17 00:00:00 2001 From: Alec Woods Date: Thu, 16 Apr 2020 11:24:44 -0400 Subject: [PATCH 2/2] Update functions to match prototypes --- SoftwareWire.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/SoftwareWire.cpp b/SoftwareWire.cpp index fe464b3..0798fa5 100644 --- a/SoftwareWire.cpp +++ b/SoftwareWire.cpp @@ -235,6 +235,17 @@ uint8_t SoftwareWire::endTransmission(boolean sendStop) return(_transmission); // return the transmission status that was set during writing address and data } +// +uint8_t SoftwareWire::endTransmission(uint8_t sendStop) +{ + return endTransmission((boolean) sendStop); +} + +// +uint8_t SoftwareWire::endTransmission() +{ + return endTransmission(true); +} // // The requestFrom() read the data from the I2C bus and stores it in a buffer. @@ -292,6 +303,17 @@ uint8_t SoftwareWire::requestFrom(uint8_t address, uint8_t size, boolean sendSto return( n); } +// +uint8_t SoftwareWire::requestFrom(uint8_t address, uint8_t size) +{ + return requestFrom(address, size, true) +} + +// +uint8_t SoftwareWire::requestFrom(uint8_t address, uint8_t size, uint8_t sendStop) +{ + return requestFrom(address, size, (boolean) sendStop) +} // uint8_t SoftwareWire::requestFrom(int address, int size, boolean sendStop) @@ -299,6 +321,17 @@ uint8_t SoftwareWire::requestFrom(int address, int size, boolean sendStop) return requestFrom( (uint8_t) address, (uint8_t) size, sendStop); } +// +uint8_t SoftwareWire::requestFrom(int address, int size) +{ + return requestFrom(address, size, true) +} + +// +uint8_t SoftwareWire::requestFrom(int address, int size, uint8_t sendStop) +{ + return requestFrom(address, size, (boolean) sendStop) +} // must be called in: // slave tx event callback