ECE 2036 Project

Dependencies:   mbed wave_player 4DGL-uLCD-SE

Committer:
abraha2d
Date:
Thu Nov 21 16:10:57 2019 +0000
Revision:
2:2042f29de6b7
Parent:
0:cf4396614a79
Because other peeps is wanting dis...

Who changed what in which revision?

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