Demonstration of a very simple unix-like shell. Based on integrating both Klaus Bu\'s SDHCFileSystem and the FATFileSystem library out of Thomas Hamilton\'s SDCard program. Result: you get high capacity + a plethora of filesystem functions.

Dependencies:   mbed

Committer:
shimniok
Date:
Tue Oct 11 15:13:42 2011 +0000
Revision:
0:792bddcf799d
Initial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shimniok 0:792bddcf799d 1 /*-----------------------------------------------------------------------*/
shimniok 0:792bddcf799d 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
shimniok 0:792bddcf799d 3 /*-----------------------------------------------------------------------*/
shimniok 0:792bddcf799d 4 /* This is a stub disk I/O module that acts as front end of the existing */
shimniok 0:792bddcf799d 5 /* disk I/O modules and attach it to FatFs module with common interface. */
shimniok 0:792bddcf799d 6 /*-----------------------------------------------------------------------*/
shimniok 0:792bddcf799d 7
shimniok 0:792bddcf799d 8 //Modified by Thomas Hamilton, Copyright 2010
shimniok 0:792bddcf799d 9
shimniok 0:792bddcf799d 10 #include "diskio.h"
shimniok 0:792bddcf799d 11
shimniok 0:792bddcf799d 12 DSTATUS disk_initialize(BYTE drv)
shimniok 0:792bddcf799d 13 {
shimniok 0:792bddcf799d 14 if (FATFileSystem::DriveArray[drv])
shimniok 0:792bddcf799d 15 {
shimniok 0:792bddcf799d 16 return (DSTATUS)FATFileSystem::DriveArray[drv]->disk_initialize();
shimniok 0:792bddcf799d 17 }
shimniok 0:792bddcf799d 18 else
shimniok 0:792bddcf799d 19 {
shimniok 0:792bddcf799d 20 return STA_NOINIT;
shimniok 0:792bddcf799d 21 }
shimniok 0:792bddcf799d 22 }
shimniok 0:792bddcf799d 23
shimniok 0:792bddcf799d 24 DSTATUS disk_status(BYTE drv)
shimniok 0:792bddcf799d 25 {
shimniok 0:792bddcf799d 26 if (FATFileSystem::DriveArray[drv])
shimniok 0:792bddcf799d 27 {
shimniok 0:792bddcf799d 28 return (DSTATUS)FATFileSystem::DriveArray[drv]->disk_status();
shimniok 0:792bddcf799d 29 }
shimniok 0:792bddcf799d 30 else
shimniok 0:792bddcf799d 31 {
shimniok 0:792bddcf799d 32 return STA_NOINIT;
shimniok 0:792bddcf799d 33 }
shimniok 0:792bddcf799d 34 }
shimniok 0:792bddcf799d 35
shimniok 0:792bddcf799d 36 DRESULT disk_read(BYTE drv, BYTE* buff, DWORD sector, BYTE count)
shimniok 0:792bddcf799d 37 {
shimniok 0:792bddcf799d 38 if (FATFileSystem::DriveArray[drv])
shimniok 0:792bddcf799d 39 {
shimniok 0:792bddcf799d 40 return (DRESULT)FATFileSystem::DriveArray[drv]->disk_read((unsigned char*)buff,
shimniok 0:792bddcf799d 41 (unsigned long)sector, (unsigned char)count);
shimniok 0:792bddcf799d 42 }
shimniok 0:792bddcf799d 43 else
shimniok 0:792bddcf799d 44 {
shimniok 0:792bddcf799d 45 return RES_NOTRDY;
shimniok 0:792bddcf799d 46 }
shimniok 0:792bddcf799d 47 }
shimniok 0:792bddcf799d 48
shimniok 0:792bddcf799d 49 #if _READONLY == 0
shimniok 0:792bddcf799d 50 DRESULT disk_write(BYTE drv, const BYTE* buff, DWORD sector, BYTE count)
shimniok 0:792bddcf799d 51 {
shimniok 0:792bddcf799d 52 if (FATFileSystem::DriveArray[drv])
shimniok 0:792bddcf799d 53 {
shimniok 0:792bddcf799d 54 return (DRESULT)FATFileSystem::DriveArray[drv]->disk_write((const unsigned char*)buff,
shimniok 0:792bddcf799d 55 (unsigned long)sector, (unsigned char)count);
shimniok 0:792bddcf799d 56 }
shimniok 0:792bddcf799d 57 else
shimniok 0:792bddcf799d 58 {
shimniok 0:792bddcf799d 59 return RES_NOTRDY;
shimniok 0:792bddcf799d 60 }
shimniok 0:792bddcf799d 61 }
shimniok 0:792bddcf799d 62 #endif
shimniok 0:792bddcf799d 63
shimniok 0:792bddcf799d 64 DRESULT disk_ioctl(BYTE drv, BYTE ctrl, void* buff)
shimniok 0:792bddcf799d 65 {
shimniok 0:792bddcf799d 66 switch (ctrl)
shimniok 0:792bddcf799d 67 {
shimniok 0:792bddcf799d 68 case CTRL_SYNC:
shimniok 0:792bddcf799d 69 if (FATFileSystem::DriveArray[drv])
shimniok 0:792bddcf799d 70 {
shimniok 0:792bddcf799d 71 return (DRESULT)FATFileSystem::DriveArray[drv]->disk_sync();
shimniok 0:792bddcf799d 72 }
shimniok 0:792bddcf799d 73 else
shimniok 0:792bddcf799d 74 {
shimniok 0:792bddcf799d 75 return RES_NOTRDY;
shimniok 0:792bddcf799d 76 }
shimniok 0:792bddcf799d 77
shimniok 0:792bddcf799d 78 case GET_SECTOR_SIZE:
shimniok 0:792bddcf799d 79 if (FATFileSystem::DriveArray[drv])
shimniok 0:792bddcf799d 80 {
shimniok 0:792bddcf799d 81 WORD Result = FATFileSystem::DriveArray[drv]->disk_sector_size();
shimniok 0:792bddcf799d 82 if (Result > 0)
shimniok 0:792bddcf799d 83 {
shimniok 0:792bddcf799d 84 *((WORD*)buff) = Result;
shimniok 0:792bddcf799d 85 return RES_OK;
shimniok 0:792bddcf799d 86 }
shimniok 0:792bddcf799d 87 else
shimniok 0:792bddcf799d 88 {
shimniok 0:792bddcf799d 89 return RES_ERROR;
shimniok 0:792bddcf799d 90 }
shimniok 0:792bddcf799d 91 }
shimniok 0:792bddcf799d 92 else
shimniok 0:792bddcf799d 93 {
shimniok 0:792bddcf799d 94 return RES_NOTRDY;
shimniok 0:792bddcf799d 95 }
shimniok 0:792bddcf799d 96
shimniok 0:792bddcf799d 97 case GET_SECTOR_COUNT:
shimniok 0:792bddcf799d 98 if (FATFileSystem::DriveArray[drv])
shimniok 0:792bddcf799d 99 {
shimniok 0:792bddcf799d 100 DWORD Result = FATFileSystem::DriveArray[drv]->disk_sector_count();
shimniok 0:792bddcf799d 101 if (Result > 0)
shimniok 0:792bddcf799d 102 {
shimniok 0:792bddcf799d 103 *((DWORD*)buff) = Result;
shimniok 0:792bddcf799d 104 return RES_OK;
shimniok 0:792bddcf799d 105 }
shimniok 0:792bddcf799d 106 else
shimniok 0:792bddcf799d 107 {
shimniok 0:792bddcf799d 108 return RES_ERROR;
shimniok 0:792bddcf799d 109 }
shimniok 0:792bddcf799d 110 }
shimniok 0:792bddcf799d 111 else
shimniok 0:792bddcf799d 112 {
shimniok 0:792bddcf799d 113 return RES_NOTRDY;
shimniok 0:792bddcf799d 114 }
shimniok 0:792bddcf799d 115
shimniok 0:792bddcf799d 116 case GET_BLOCK_SIZE:
shimniok 0:792bddcf799d 117 if (FATFileSystem::DriveArray[drv])
shimniok 0:792bddcf799d 118 {
shimniok 0:792bddcf799d 119 DWORD Result = FATFileSystem::DriveArray[drv]->disk_block_size();
shimniok 0:792bddcf799d 120 if (Result > 0)
shimniok 0:792bddcf799d 121 {
shimniok 0:792bddcf799d 122 *((DWORD*)buff) = Result;
shimniok 0:792bddcf799d 123 return RES_OK;
shimniok 0:792bddcf799d 124 }
shimniok 0:792bddcf799d 125 else
shimniok 0:792bddcf799d 126 {
shimniok 0:792bddcf799d 127 return RES_ERROR;
shimniok 0:792bddcf799d 128 }
shimniok 0:792bddcf799d 129 }
shimniok 0:792bddcf799d 130 else
shimniok 0:792bddcf799d 131 {
shimniok 0:792bddcf799d 132 return RES_NOTRDY;
shimniok 0:792bddcf799d 133 }
shimniok 0:792bddcf799d 134
shimniok 0:792bddcf799d 135 default:
shimniok 0:792bddcf799d 136 return RES_PARERR;
shimniok 0:792bddcf799d 137 }
shimniok 0:792bddcf799d 138 }