A version of the USBMSD_SD library that doesn't try to connect in the constructor. I made this change to support an operation mode where USB MSD can be enabled later in program operation without hanging.
Fork of USBMSD_SD by
Diff: USBMSD_SD.cpp
- Revision:
- 3:cce1e689c548
- Parent:
- 2:055119ccf5a7
- Child:
- 4:46888c9d5cd7
diff -r 055119ccf5a7 -r cce1e689c548 USBMSD_SD.cpp --- a/USBMSD_SD.cpp Mon Jan 21 10:40:05 2013 +0000 +++ b/USBMSD_SD.cpp Wed Nov 16 18:24:52 2016 +0000 @@ -222,25 +222,33 @@ return 0; } -int USBMSD_SD::disk_write(const uint8_t *buffer, uint64_t block_number) { - // set write address for single block (CMD24) - if (_cmd(24, block_number * cdv) != 0) { - return 1; +int USBMSD_SD::disk_write(const uint8_t* buffer, uint64_t block_number, uint8_t count) { + for (uint64_t b = block_number; b < block_number + count; b++) { + // set write address for single block (CMD24) + if (_cmd(24, b * cdv) != 0) { + return 1; + } + + // send the data block + _write(buffer, 512); + buffer += 512; } - // send the data block - _write(buffer, 512); return 0; } -int USBMSD_SD::disk_read(uint8_t *buffer, uint64_t block_number) { - // set read address for single block (CMD17) - if (_cmd(17, block_number * cdv) != 0) { - return 1; +int USBMSD_SD::disk_read(uint8_t* buffer, uint64_t block_number, uint8_t count) { + for (uint64_t b = block_number; b < block_number + count; b++) { + // set read address for single block (CMD17) + if (_cmd(17, b * cdv) != 0) { + return 1; + } + + // receive the data + _read(buffer, 512); + buffer += 512; } - - // receive the data - _read(buffer, 512); + return 0; }