Skip to content

Commit d8c30c3

Browse files
bobh66Bob Haddleton
authored and
Bob Haddleton
committed
Add error handling and optimize FileIO::doBuffer() in the Bridge library
Update FileIO::doBuffer() to check for TRANSFER_TIMEOUT and set buffered to 0, and optimize by incrementing readPos instead of moving all of the data one byte to the left in the buffer to skip the error code byte.
1 parent 660c7d8 commit d8c30c3

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

libraries/Bridge/src/FileIO.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,15 @@ void File::doBuffer() {
119119
// Try to buffer up to BUFFER_SIZE characters
120120
readPos = 0;
121121
uint8_t cmd[] = {'G', handle, BUFFER_SIZE - 1};
122-
buffered = bridge.transfer(cmd, 3, buffer, BUFFER_SIZE) - 1;
122+
buffered = bridge.transfer(cmd, 3, buffer, BUFFER_SIZE);
123123
//err = buff[0]; // First byte is error code
124-
if (buffered > 0) {
125-
// Shift the reminder of buffer
126-
for (uint8_t i = 0; i < buffered; i++)
127-
buffer[i] = buffer[i + 1];
124+
if (BridgeClass::TRANSFER_TIMEOUT == buffered || 0 == buffered) {
125+
// transfer failed to retrieve any data
126+
buffered = 0;
127+
} else {
128+
// transfer retrieved at least one byte of data so skip the error code character
129+
readPos++;
130+
buffered--;
128131
}
129132
}
130133

0 commit comments

Comments
 (0)