This is SDFileSystem which corrected the bug for MiMicSDK.

Dependents:   MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more

Fork of SDFileSystem by mbed official

Committer:
nyatla
Date:
Sun Apr 28 08:54:19 2013 +0000
Revision:
7:5429e81addde
Parent:
5:2c7b6bd5b079
Child:
8:22ce3449b224
remove debug code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 5:2c7b6bd5b079 1 /*-----------------------------------------------------------------------*/
nyatla 5:2c7b6bd5b079 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
nyatla 5:2c7b6bd5b079 3 /*-----------------------------------------------------------------------*/
nyatla 5:2c7b6bd5b079 4 /* This is a stub disk I/O module that acts as front end of the existing */
nyatla 5:2c7b6bd5b079 5 /* disk I/O modules and attach it to FatFs module with common interface. */
nyatla 5:2c7b6bd5b079 6 /*-----------------------------------------------------------------------*/
nyatla 5:2c7b6bd5b079 7 #include "ffconf.h"
nyatla 5:2c7b6bd5b079 8 #include "diskio.h"
nyatla 5:2c7b6bd5b079 9
nyatla 5:2c7b6bd5b079 10 #include "FATFileSystem.h"
nyatla 5:2c7b6bd5b079 11
nyatla 7:5429e81addde 12 //#include "mbed_debug.h"
nyatla 7:5429e81addde 13 #define debug
nyatla 7:5429e81addde 14 #define debug_if
nyatla 7:5429e81addde 15
nyatla 5:2c7b6bd5b079 16 using namespace mbed;
nyatla 5:2c7b6bd5b079 17
nyatla 5:2c7b6bd5b079 18 DSTATUS disk_initialize (
nyatla 5:2c7b6bd5b079 19 BYTE drv /* Physical drive nmuber (0..) */
nyatla 5:2c7b6bd5b079 20 )
nyatla 5:2c7b6bd5b079 21 {
nyatla 5:2c7b6bd5b079 22 debug_if(FFS_DBG, "disk_initialize on drv [%d]\n", drv);
nyatla 5:2c7b6bd5b079 23 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_initialize();
nyatla 5:2c7b6bd5b079 24 }
nyatla 5:2c7b6bd5b079 25
nyatla 5:2c7b6bd5b079 26 DSTATUS disk_status (
nyatla 5:2c7b6bd5b079 27 BYTE drv /* Physical drive nmuber (0..) */
nyatla 5:2c7b6bd5b079 28 )
nyatla 5:2c7b6bd5b079 29 {
nyatla 5:2c7b6bd5b079 30 debug_if(FFS_DBG, "disk_status on drv [%d]\n", drv);
nyatla 5:2c7b6bd5b079 31 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_status();
nyatla 5:2c7b6bd5b079 32 }
nyatla 5:2c7b6bd5b079 33
nyatla 5:2c7b6bd5b079 34 DRESULT disk_read (
nyatla 5:2c7b6bd5b079 35 BYTE drv, /* Physical drive nmuber (0..) */
nyatla 5:2c7b6bd5b079 36 BYTE *buff, /* Data buffer to store read data */
nyatla 5:2c7b6bd5b079 37 DWORD sector, /* Sector address (LBA) */
nyatla 5:2c7b6bd5b079 38 BYTE count /* Number of sectors to read (1..255) */
nyatla 5:2c7b6bd5b079 39 )
nyatla 5:2c7b6bd5b079 40 {
nyatla 5:2c7b6bd5b079 41 debug_if(FFS_DBG, "disk_read(sector %d, count %d) on drv [%d]\n", sector, count, drv);
nyatla 5:2c7b6bd5b079 42 for(DWORD s=sector; s<sector+count; s++) {
nyatla 5:2c7b6bd5b079 43 debug_if(FFS_DBG, " disk_read(sector %d)\n", s);
nyatla 5:2c7b6bd5b079 44 int res = FATFileSystem::_ffs[drv]->disk_read((uint8_t*)buff, s);
nyatla 5:2c7b6bd5b079 45 if(res) {
nyatla 5:2c7b6bd5b079 46 return RES_PARERR;
nyatla 5:2c7b6bd5b079 47 }
nyatla 5:2c7b6bd5b079 48 buff += 512;
nyatla 5:2c7b6bd5b079 49 }
nyatla 5:2c7b6bd5b079 50 return RES_OK;
nyatla 5:2c7b6bd5b079 51 }
nyatla 5:2c7b6bd5b079 52
nyatla 5:2c7b6bd5b079 53 #if _READONLY == 0
nyatla 5:2c7b6bd5b079 54 DRESULT disk_write (
nyatla 5:2c7b6bd5b079 55 BYTE drv, /* Physical drive nmuber (0..) */
nyatla 5:2c7b6bd5b079 56 const BYTE *buff, /* Data to be written */
nyatla 5:2c7b6bd5b079 57 DWORD sector, /* Sector address (LBA) */
nyatla 5:2c7b6bd5b079 58 BYTE count /* Number of sectors to write (1..255) */
nyatla 5:2c7b6bd5b079 59 )
nyatla 5:2c7b6bd5b079 60 {
nyatla 5:2c7b6bd5b079 61 debug_if(FFS_DBG, "disk_write(sector %d, count %d) on drv [%d]\n", sector, count, drv);
nyatla 5:2c7b6bd5b079 62 for(DWORD s = sector; s < sector + count; s++) {
nyatla 5:2c7b6bd5b079 63 debug_if(FFS_DBG, " disk_write(sector %d)\n", s);
nyatla 5:2c7b6bd5b079 64 int res = FATFileSystem::_ffs[drv]->disk_write((uint8_t*)buff, s);
nyatla 5:2c7b6bd5b079 65 if(res) {
nyatla 5:2c7b6bd5b079 66 return RES_PARERR;
nyatla 5:2c7b6bd5b079 67 }
nyatla 5:2c7b6bd5b079 68 buff += 512;
nyatla 5:2c7b6bd5b079 69 }
nyatla 5:2c7b6bd5b079 70 return RES_OK;
nyatla 5:2c7b6bd5b079 71 }
nyatla 5:2c7b6bd5b079 72 #endif /* _READONLY */
nyatla 5:2c7b6bd5b079 73
nyatla 5:2c7b6bd5b079 74 DRESULT disk_ioctl (
nyatla 5:2c7b6bd5b079 75 BYTE drv, /* Physical drive nmuber (0..) */
nyatla 5:2c7b6bd5b079 76 BYTE ctrl, /* Control code */
nyatla 5:2c7b6bd5b079 77 void *buff /* Buffer to send/receive control data */
nyatla 5:2c7b6bd5b079 78 )
nyatla 5:2c7b6bd5b079 79 {
nyatla 5:2c7b6bd5b079 80 debug_if(FFS_DBG, "disk_ioctl(%d)\n", ctrl);
nyatla 5:2c7b6bd5b079 81 switch(ctrl) {
nyatla 5:2c7b6bd5b079 82 case CTRL_SYNC:
nyatla 5:2c7b6bd5b079 83 if(FATFileSystem::_ffs[drv] == NULL) {
nyatla 5:2c7b6bd5b079 84 return RES_NOTRDY;
nyatla 5:2c7b6bd5b079 85 } else if(FATFileSystem::_ffs[drv]->disk_sync()) {
nyatla 5:2c7b6bd5b079 86 return RES_ERROR;
nyatla 5:2c7b6bd5b079 87 }
nyatla 5:2c7b6bd5b079 88 return RES_OK;
nyatla 5:2c7b6bd5b079 89 case GET_SECTOR_COUNT:
nyatla 5:2c7b6bd5b079 90 if(FATFileSystem::_ffs[drv] == NULL) {
nyatla 5:2c7b6bd5b079 91 return RES_NOTRDY;
nyatla 5:2c7b6bd5b079 92 } else {
nyatla 5:2c7b6bd5b079 93 DWORD res = FATFileSystem::_ffs[drv]->disk_sectors();
nyatla 5:2c7b6bd5b079 94 if(res > 0) {
nyatla 5:2c7b6bd5b079 95 *((DWORD*)buff) = res; // minimum allowed
nyatla 5:2c7b6bd5b079 96 return RES_OK;
nyatla 5:2c7b6bd5b079 97 } else {
nyatla 5:2c7b6bd5b079 98 return RES_ERROR;
nyatla 5:2c7b6bd5b079 99 }
nyatla 5:2c7b6bd5b079 100 }
nyatla 5:2c7b6bd5b079 101 case GET_BLOCK_SIZE:
nyatla 5:2c7b6bd5b079 102 *((DWORD*)buff) = 1; // default when not known
nyatla 5:2c7b6bd5b079 103 return RES_OK;
nyatla 5:2c7b6bd5b079 104
nyatla 5:2c7b6bd5b079 105 }
nyatla 5:2c7b6bd5b079 106 return RES_PARERR;
nyatla 5:2c7b6bd5b079 107 }