From 5da9146558db50d46b8c34a51149464e51115111 Mon Sep 17 00:00:00 2001 From: Alex Brudner <101155592+SFE-Brudnerd@users.noreply.github.com> Date: Tue, 5 Dec 2023 13:31:44 -0700 Subject: [PATCH 1/4] Add git files. --- .gitattributes | 2 ++ .gitignore | 3 +++ 2 files changed, 5 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..eba1110 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..737bcf8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# VSCode directories +.vscode + From 9b7a93aad87c95b695a08d31ece767e58b89e435 Mon Sep 17 00:00:00 2001 From: Alex Brudner <101155592+SFE-Brudnerd@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:09:18 -0700 Subject: [PATCH 2/4] Update readRegisterRegion. Returns a proper error code now. ReadBytes returns number of bytes read. --- src/sfeTk/sfeTkIBus.h | 2 +- src/sfeTkArdI2C.cpp | 16 ++++++++++++---- src/sfeTkArdI2C.h | 8 +++++--- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/sfeTk/sfeTkIBus.h b/src/sfeTk/sfeTkIBus.h index 5499f37..cc8f1da 100644 --- a/src/sfeTk/sfeTkIBus.h +++ b/src/sfeTk/sfeTkIBus.h @@ -121,7 +121,7 @@ class sfeTkIBus @retval int returns kSTkErrOk on success, or kSTkErrFail code */ - virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes) = 0; + virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes, size_t *readBytes) = 0; }; //}; diff --git a/src/sfeTkArdI2C.cpp b/src/sfeTkArdI2C.cpp index dc553e1..e5bf936 100644 --- a/src/sfeTkArdI2C.cpp +++ b/src/sfeTkArdI2C.cpp @@ -200,9 +200,11 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead) if (!_i2cPort) return kSTkErrBusNotInit; - uint32_t nRead = readRegisterRegion(devReg, (uint8_t *)&dataToRead, sizeof(uint16_t)); + uint16_t nRead = 0; - return (nRead == 2 ? kSTkErrOk : kSTkErrFail); + sfeTkError_t result = readRegisterRegion(devReg, (uint8_t *)&dataToRead, sizeof(uint16_t), &nRead); + + return nRead == 2 ? kSTkErrOk : result; } //--------------------------------------------------------------------------------- @@ -212,12 +214,16 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead) // // Returns the number of bytes read, < 0 is an error // -int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes) +int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t *readBytes) { // got port if (!_i2cPort) return kSTkErrBusNotInit; + // Are buffers valid? + if (!data || !readBytes) + return kSTkErrBusNullBuffer; + uint16_t nOrig = numBytes; // original number of bytes. uint8_t nChunk; uint16_t nReturned; @@ -257,5 +263,7 @@ int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t nu } // end while - return nOrig - numBytes; // Success + *readBytes = nOrig - numBytes; // Bytes read. + + return (*readBytes == nOrig) ? kSTkErrOk : kSTkErrBusUnderRead; // Success } diff --git a/src/sfeTkArdI2C.h b/src/sfeTkArdI2C.h index 34f3327..94ab558 100644 --- a/src/sfeTkArdI2C.h +++ b/src/sfeTkArdI2C.h @@ -168,11 +168,13 @@ class sfeTkArdI2C : public sfeTkII2C @note This method is virtual to allow it to be overridden to support a device that requires a unique impl @param devReg The device's register's address. - @param data Data to write. + @param data Data being read. + @param numBytes Number of bytes to read. + @param readBytes Number of bytes read. - @retval kStkErrOk on success + @retval kSTkErrOk on success */ - sfeTkError_t readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes); + sfeTkError_t readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t *readBytes); // Buffer size chunk getter/setter /*-------------------------------------------------------------------------- From 39a5116973c91a6bf1bb3d8f194e1aeda4aeb989 Mon Sep 17 00:00:00 2001 From: Alex Brudner <101155592+SFE-Brudnerd@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:21:12 -0700 Subject: [PATCH 3/4] Made ref instead of ptr. --- src/sfeTk/sfeTkIBus.h | 2 +- src/sfeTkArdI2C.cpp | 10 +++++----- src/sfeTkArdI2C.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/sfeTk/sfeTkIBus.h b/src/sfeTk/sfeTkIBus.h index cc8f1da..7889d38 100644 --- a/src/sfeTk/sfeTkIBus.h +++ b/src/sfeTk/sfeTkIBus.h @@ -121,7 +121,7 @@ class sfeTkIBus @retval int returns kSTkErrOk on success, or kSTkErrFail code */ - virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes, size_t *readBytes) = 0; + virtual sfeTkError_t readRegisterRegion(uint8_t reg, uint8_t *data, size_t numBytes, size_t &readBytes) = 0; }; //}; diff --git a/src/sfeTkArdI2C.cpp b/src/sfeTkArdI2C.cpp index e5bf936..4fd1c8c 100644 --- a/src/sfeTkArdI2C.cpp +++ b/src/sfeTkArdI2C.cpp @@ -214,14 +214,14 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead) // // Returns the number of bytes read, < 0 is an error // -int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t *readBytes) +int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes) { // got port if (!_i2cPort) return kSTkErrBusNotInit; - // Are buffers valid? - if (!data || !readBytes) + // Buffer valid? + if (!data) return kSTkErrBusNullBuffer; uint16_t nOrig = numBytes; // original number of bytes. @@ -263,7 +263,7 @@ int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t nu } // end while - *readBytes = nOrig - numBytes; // Bytes read. + readBytes = nOrig - numBytes; // Bytes read. - return (*readBytes == nOrig) ? kSTkErrOk : kSTkErrBusUnderRead; // Success + return (readBytes == nOrig) ? kSTkErrOk : kSTkErrBusUnderRead; // Success } diff --git a/src/sfeTkArdI2C.h b/src/sfeTkArdI2C.h index 94ab558..a95e701 100644 --- a/src/sfeTkArdI2C.h +++ b/src/sfeTkArdI2C.h @@ -174,7 +174,7 @@ class sfeTkArdI2C : public sfeTkII2C @retval kSTkErrOk on success */ - sfeTkError_t readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t *readBytes); + sfeTkError_t readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes); // Buffer size chunk getter/setter /*-------------------------------------------------------------------------- From aba6692c25e88a89d06d04acff9ff5495bc8ab02 Mon Sep 17 00:00:00 2001 From: Alex Brudner <101155592+SFE-Brudnerd@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:24:16 -0700 Subject: [PATCH 4/4] retype readRegisterRegion --- src/sfeTkArdI2C.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sfeTkArdI2C.cpp b/src/sfeTkArdI2C.cpp index 4fd1c8c..6402c68 100644 --- a/src/sfeTkArdI2C.cpp +++ b/src/sfeTkArdI2C.cpp @@ -214,7 +214,7 @@ sfeTkError_t sfeTkArdI2C::readRegisterWord(uint8_t devReg, uint16_t &dataToRead) // // Returns the number of bytes read, < 0 is an error // -int32_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes) +sfeTkError_t sfeTkArdI2C::readRegisterRegion(uint8_t devReg, uint8_t *data, size_t numBytes, size_t &readBytes) { // got port if (!_i2cPort)