Still won't work
Dependencies: mbed wave_player 4DGL-uLCD-SE MMA8452
FATFileSystem.cpp
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2006-2012 ARM Limited 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a copy 00005 * of this software and associated documentation files (the "Software"), to deal 00006 * in the Software without restriction, including without limitation the rights 00007 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00008 * copies of the Software, and to permit persons to whom the Software is 00009 * furnished to do so, subject to the following conditions: 00010 * 00011 * The above copyright notice and this permission notice shall be included in 00012 * all copies or substantial portions of the Software. 00013 * 00014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00017 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00019 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 00020 * SOFTWARE. 00021 */ 00022 #include "mbed.h" 00023 00024 #include "ffconf.h" 00025 #include "mbed_debug.h" 00026 00027 #include "FATFileSystem.h" 00028 #include "FATFileHandle.h" 00029 #include "FATDirHandle.h" 00030 00031 DWORD get_fattime(void) { 00032 time_t rawtime; 00033 time(&rawtime); 00034 struct tm *ptm = localtime(&rawtime); 00035 return (DWORD)(ptm->tm_year - 80) << 25 00036 | (DWORD)(ptm->tm_mon + 1 ) << 21 00037 | (DWORD)(ptm->tm_mday ) << 16 00038 | (DWORD)(ptm->tm_hour ) << 11 00039 | (DWORD)(ptm->tm_min ) << 5 00040 | (DWORD)(ptm->tm_sec/2 ); 00041 } 00042 00043 FATFileSystem *FATFileSystem::_ffs[_VOLUMES] = {0}; 00044 00045 FATFileSystem::FATFileSystem(const char* n) : FileSystemLike(n) { 00046 debug_if(FFS_DBG, "FATFileSystem(%s)\n", n); 00047 for(int i=0; i<_VOLUMES; i++) { 00048 if(_ffs[i] == 0) { 00049 _ffs[i] = this; 00050 _fsid = i; 00051 debug_if(FFS_DBG, "Mounting [%s] on ffs drive [%d]\n", _name, _fsid); 00052 f_mount(i, &_fs); 00053 return; 00054 } 00055 } 00056 error("Couldn't create %s in FATFileSystem::FATFileSystem\n", n); 00057 } 00058 00059 FATFileSystem::~FATFileSystem() { 00060 for (int i=0; i<_VOLUMES; i++) { 00061 if (_ffs[i] == this) { 00062 _ffs[i] = 0; 00063 f_mount(i, NULL); 00064 } 00065 } 00066 } 00067 00068 FileHandle *FATFileSystem::open(const char* name, int flags) { 00069 debug_if(FFS_DBG, "open(%s) on filesystem [%s], drv [%d]\n", name, _name, _fsid); 00070 char n[64]; 00071 sprintf(n, "%d:/%s", _fsid, name); 00072 00073 /* POSIX flags -> FatFS open mode */ 00074 BYTE openmode; 00075 if (flags & O_RDWR) { 00076 openmode = FA_READ|FA_WRITE; 00077 } else if(flags & O_WRONLY) { 00078 openmode = FA_WRITE; 00079 } else { 00080 openmode = FA_READ; 00081 } 00082 if(flags & O_CREAT) { 00083 if(flags & O_TRUNC) { 00084 openmode |= FA_CREATE_ALWAYS; 00085 } else { 00086 openmode |= FA_OPEN_ALWAYS; 00087 } 00088 } 00089 00090 FIL fh; 00091 FRESULT res = f_open(&fh, n, openmode); 00092 if (res) { 00093 debug_if(FFS_DBG, "f_open('w') failed: %d\n", res); 00094 return NULL; 00095 } 00096 if (flags & O_APPEND) { 00097 f_lseek(&fh, fh.fsize); 00098 } 00099 return new FATFileHandle(fh); 00100 } 00101 00102 int FATFileSystem::remove(const char *filename) { 00103 FRESULT res = f_unlink(filename); 00104 if (res) { 00105 debug_if(FFS_DBG, "f_unlink() failed: %d\n", res); 00106 return -1; 00107 } 00108 return 0; 00109 } 00110 00111 int FATFileSystem::format() { 00112 FRESULT res = f_mkfs(_fsid, 0, 512); // Logical drive number, Partitioning rule, Allocation unit size (bytes per cluster) 00113 if (res) { 00114 debug_if(FFS_DBG, "f_mkfs() failed: %d\n", res); 00115 return -1; 00116 } 00117 return 0; 00118 } 00119 00120 DirHandle *FATFileSystem::opendir(const char *name) { 00121 FATFS_DIR dir; 00122 FRESULT res = f_opendir(&dir, name); 00123 if (res != 0) { 00124 return NULL; 00125 } 00126 return new FATDirHandle(dir); 00127 } 00128 00129 int FATFileSystem::mkdir(const char *name, mode_t mode) { 00130 FRESULT res = f_mkdir(name); 00131 return res == 0 ? 0 : -1; 00132 }
Generated on Fri Aug 19 2022 16:39:02 by 1.7.2