SD Card Interface class. Log raw data bytes to memory addresses of your choice, or format the card and use the FAT file system to write files.

Dependencies:   mbed

Committer:
Blaze513
Date:
Sat Aug 07 18:32:30 2010 +0000
Revision:
1:94c648931f84
Child:
2:716abfa4a4d0

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Blaze513 1:94c648931f84 1 /* mbed Microcontroller Library - FATFileSystem
Blaze513 1:94c648931f84 2 Copyright (c) 2008, sford */
Blaze513 1:94c648931f84 3
Blaze513 1:94c648931f84 4 #include "FATFileSystem.h"
Blaze513 1:94c648931f84 5 #include "mbed.h"
Blaze513 1:94c648931f84 6
Blaze513 1:94c648931f84 7 DWORD get_fattime(void)
Blaze513 1:94c648931f84 8 {
Blaze513 1:94c648931f84 9 return 35719201;
Blaze513 1:94c648931f84 10 }
Blaze513 1:94c648931f84 11
Blaze513 1:94c648931f84 12 FATFileSystem* FATFileSystem::DriveArray[_DRIVES] = {0};
Blaze513 1:94c648931f84 13
Blaze513 1:94c648931f84 14 FATFileSystem::FATFileSystem(const char* SystemName) : FileSystemLike(SystemName)
Blaze513 1:94c648931f84 15 {
Blaze513 1:94c648931f84 16 for (unsigned char i = 0; i < _DRIVES; i++)
Blaze513 1:94c648931f84 17 {
Blaze513 1:94c648931f84 18 if(DriveArray[i] == 0)
Blaze513 1:94c648931f84 19 {
Blaze513 1:94c648931f84 20 DriveArray[i] = this;
Blaze513 1:94c648931f84 21 Drive = i;
Blaze513 1:94c648931f84 22 f_mount((BYTE)i, &FileSystemObject);
Blaze513 1:94c648931f84 23 return;
Blaze513 1:94c648931f84 24 }
Blaze513 1:94c648931f84 25 }
Blaze513 1:94c648931f84 26 }
Blaze513 1:94c648931f84 27
Blaze513 1:94c648931f84 28 FATFileSystem::~FATFileSystem()
Blaze513 1:94c648931f84 29 {
Blaze513 1:94c648931f84 30 for (unsigned char i = 0; i < _DRIVES; i++)
Blaze513 1:94c648931f84 31 {
Blaze513 1:94c648931f84 32 if (DriveArray[i] == this)
Blaze513 1:94c648931f84 33 {
Blaze513 1:94c648931f84 34 DriveArray[i] = NULL;
Blaze513 1:94c648931f84 35 f_mount((BYTE)i, NULL);
Blaze513 1:94c648931f84 36 }
Blaze513 1:94c648931f84 37 }
Blaze513 1:94c648931f84 38 }
Blaze513 1:94c648931f84 39
Blaze513 1:94c648931f84 40 FileHandle* FATFileSystem::open(const char* filename, int flags)
Blaze513 1:94c648931f84 41 {
Blaze513 1:94c648931f84 42 FAT_FIL FileObject;
Blaze513 1:94c648931f84 43 char FileName[64];
Blaze513 1:94c648931f84 44 BYTE ModeFlags = 0;
Blaze513 1:94c648931f84 45
Blaze513 1:94c648931f84 46 sprintf(FileName, "%d:/%s", Drive, filename);
Blaze513 1:94c648931f84 47 switch (flags & 3)
Blaze513 1:94c648931f84 48 {
Blaze513 1:94c648931f84 49 case O_RDONLY: ModeFlags = FA_READ; break;
Blaze513 1:94c648931f84 50 case O_WRONLY: ModeFlags = FA_WRITE; break;
Blaze513 1:94c648931f84 51 case O_RDWR: ModeFlags = FA_READ | FA_WRITE; break;
Blaze513 1:94c648931f84 52 }
Blaze513 1:94c648931f84 53 if(flags & O_CREAT)
Blaze513 1:94c648931f84 54 {
Blaze513 1:94c648931f84 55 if(flags & O_TRUNC)
Blaze513 1:94c648931f84 56 {
Blaze513 1:94c648931f84 57 ModeFlags |= FA_CREATE_ALWAYS;
Blaze513 1:94c648931f84 58 }
Blaze513 1:94c648931f84 59 else
Blaze513 1:94c648931f84 60 {
Blaze513 1:94c648931f84 61 ModeFlags |= FA_OPEN_ALWAYS;
Blaze513 1:94c648931f84 62 }
Blaze513 1:94c648931f84 63 }
Blaze513 1:94c648931f84 64 else
Blaze513 1:94c648931f84 65 {
Blaze513 1:94c648931f84 66 ModeFlags |= FA_OPEN_EXISTING;
Blaze513 1:94c648931f84 67 }
Blaze513 1:94c648931f84 68 if (f_open(&FileObject, (const TCHAR*)FileName, ModeFlags))
Blaze513 1:94c648931f84 69 {
Blaze513 1:94c648931f84 70 return NULL;
Blaze513 1:94c648931f84 71 }
Blaze513 1:94c648931f84 72 else
Blaze513 1:94c648931f84 73 {
Blaze513 1:94c648931f84 74 if (flags & O_APPEND)
Blaze513 1:94c648931f84 75 {
Blaze513 1:94c648931f84 76 f_lseek(&FileObject, (DWORD)FileObject.fsize);
Blaze513 1:94c648931f84 77 }
Blaze513 1:94c648931f84 78 return new FATFileHandle(FileObject);
Blaze513 1:94c648931f84 79 }
Blaze513 1:94c648931f84 80 }
Blaze513 1:94c648931f84 81
Blaze513 1:94c648931f84 82 int FATFileSystem::remove(const char* filename)
Blaze513 1:94c648931f84 83 {
Blaze513 1:94c648931f84 84 char FileName[64];
Blaze513 1:94c648931f84 85
Blaze513 1:94c648931f84 86 sprintf(FileName, "%d:/%s", Drive, filename);
Blaze513 1:94c648931f84 87 if (f_unlink((const TCHAR*)FileName))
Blaze513 1:94c648931f84 88 {
Blaze513 1:94c648931f84 89 return -1;
Blaze513 1:94c648931f84 90 }
Blaze513 1:94c648931f84 91 else
Blaze513 1:94c648931f84 92 {
Blaze513 1:94c648931f84 93 return 0;
Blaze513 1:94c648931f84 94 }
Blaze513 1:94c648931f84 95 }
Blaze513 1:94c648931f84 96
Blaze513 1:94c648931f84 97 int FATFileSystem::rename(const char* oldname, const char* newname)
Blaze513 1:94c648931f84 98 {
Blaze513 1:94c648931f84 99 char OldName[64];
Blaze513 1:94c648931f84 100
Blaze513 1:94c648931f84 101 sprintf(OldName, "%d:/%s", Drive, oldname);
Blaze513 1:94c648931f84 102 if (f_rename((const TCHAR*)OldName, (const TCHAR*)newname))
Blaze513 1:94c648931f84 103 {
Blaze513 1:94c648931f84 104 return -1;
Blaze513 1:94c648931f84 105 }
Blaze513 1:94c648931f84 106 else
Blaze513 1:94c648931f84 107 {
Blaze513 1:94c648931f84 108 return 0;
Blaze513 1:94c648931f84 109 }
Blaze513 1:94c648931f84 110 }
Blaze513 1:94c648931f84 111
Blaze513 1:94c648931f84 112 DirHandle* FATFileSystem::opendir(const char* name)
Blaze513 1:94c648931f84 113 {
Blaze513 1:94c648931f84 114 FAT_DIR DirectoryObject;
Blaze513 1:94c648931f84 115 char DirectoryName[64];
Blaze513 1:94c648931f84 116
Blaze513 1:94c648931f84 117 sprintf(DirectoryName, "%d:%s", Drive, name);
Blaze513 1:94c648931f84 118 if (f_opendir(&DirectoryObject, (const TCHAR*)DirectoryName))
Blaze513 1:94c648931f84 119 {
Blaze513 1:94c648931f84 120 return NULL;
Blaze513 1:94c648931f84 121 }
Blaze513 1:94c648931f84 122 else
Blaze513 1:94c648931f84 123 {
Blaze513 1:94c648931f84 124 return new FATDirHandle(DirectoryObject);
Blaze513 1:94c648931f84 125 }
Blaze513 1:94c648931f84 126 }
Blaze513 1:94c648931f84 127
Blaze513 1:94c648931f84 128 int FATFileSystem::mkdir(const char* name, mode_t mode)
Blaze513 1:94c648931f84 129 {
Blaze513 1:94c648931f84 130 char DirectoryName[64];
Blaze513 1:94c648931f84 131
Blaze513 1:94c648931f84 132 sprintf(DirectoryName, "%d:%s", Drive, name);
Blaze513 1:94c648931f84 133 if (f_mkdir((const TCHAR*)DirectoryName))
Blaze513 1:94c648931f84 134 {
Blaze513 1:94c648931f84 135 return -1;
Blaze513 1:94c648931f84 136 }
Blaze513 1:94c648931f84 137 else
Blaze513 1:94c648931f84 138 {
Blaze513 1:94c648931f84 139 return 0;
Blaze513 1:94c648931f84 140 }
Blaze513 1:94c648931f84 141 }