|
|
|
|
|
|
|
|
* read() called before a file has been opened, corrupt file system
|
|
|
* read() called before a file has been opened, corrupt file system
|
|
|
* or an I/O error occurred.
|
|
|
* or an I/O error occurred.
|
|
|
*/
|
|
|
*/
|
|
|
int16_t SdFile::read(void* buf, uint16_t nbyte) {
|
|
|
|
|
|
|
|
|
int32_t SdFile::read(void* buf, size_t nbyte) {
|
|
|
uint8_t* dst = reinterpret_cast<uint8_t*>(buf);
|
|
|
uint8_t* dst = reinterpret_cast<uint8_t*>(buf);
|
|
|
|
|
|
|
|
|
// error if not open or write only
|
|
|
// error if not open or write only
|
|
|
|
|
|
|
|
|
if (nbyte > (fileSize_ - curPosition_)) nbyte = fileSize_ - curPosition_;
|
|
|
if (nbyte > (fileSize_ - curPosition_)) nbyte = fileSize_ - curPosition_;
|
|
|
|
|
|
|
|
|
// amount left to read
|
|
|
// amount left to read
|
|
|
uint16_t toRead = nbyte;
|
|
|
|
|
|
|
|
|
uint32_t toRead = nbyte;
|
|
|
while (toRead > 0) {
|
|
|
while (toRead > 0) {
|
|
|
uint32_t block; // raw device block number
|
|
|
uint32_t block; // raw device block number
|
|
|
uint16_t offset = curPosition_ & 0X1FF; // offset in block
|
|
|
uint16_t offset = curPosition_ & 0X1FF; // offset in block
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
block = vol_->clusterStartBlock(curCluster_) + blockOfCluster;
|
|
|
block = vol_->clusterStartBlock(curCluster_) + blockOfCluster;
|
|
|
}
|
|
|
}
|
|
|
uint16_t n = toRead;
|
|
|
|
|
|
|
|
|
int32_t n = toRead;
|
|
|
|
|
|
|
|
|
// amount to be read from current block
|
|
|
// amount to be read from current block
|
|
|
if (n > (512 - offset)) n = 512 - offset;
|
|
|
if (n > (512 - offset)) n = 512 - offset;
|