forked

Dependents:   Lab3

Fork of FatFileSystemCpp by Igor Skochinsky

Committer:
YongChingTee
Date:
Wed Mar 06 00:19:18 2013 +0000
Revision:
2:5cdf6d5c3b68
Parent:
1:88f22c32a456
first commit

Who changed what in which revision?

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