Local copy of the FatFileSystem.

Dependents:   SimpleWaveRecorderPlayer y_CameraC1098_ES_01 _test_SDHCFileSystem Application-SimpleWaveRecorderPlayerGenerator ... more

Committer:
shintamainjp
Date:
Sat Apr 14 02:24:08 2012 +0000
Revision:
0:8c55801ce311
Initial version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:8c55801ce311 1 /* mbed Microcontroller Library - FATFileHandle
shintamainjp 0:8c55801ce311 2 * Copyright (c) 2008, sford
shintamainjp 0:8c55801ce311 3 */
shintamainjp 0:8c55801ce311 4
shintamainjp 0:8c55801ce311 5 #include "FATFileHandle.h"
shintamainjp 0:8c55801ce311 6
shintamainjp 0:8c55801ce311 7 #include <stdio.h>
shintamainjp 0:8c55801ce311 8 #include <stdlib.h>
shintamainjp 0:8c55801ce311 9 #include "ff.h"
shintamainjp 0:8c55801ce311 10 #include "FATFileSystem.h"
shintamainjp 0:8c55801ce311 11
shintamainjp 0:8c55801ce311 12 namespace mbed {
shintamainjp 0:8c55801ce311 13
shintamainjp 0:8c55801ce311 14 #if FFSDEBUG_ENABLED
shintamainjp 0:8c55801ce311 15 static const char *FR_ERRORS[] = {
shintamainjp 0:8c55801ce311 16 "FR_OK = 0",
shintamainjp 0:8c55801ce311 17 "FR_NOT_READY",
shintamainjp 0:8c55801ce311 18 "FR_NO_FILE",
shintamainjp 0:8c55801ce311 19 "FR_NO_PATH",
shintamainjp 0:8c55801ce311 20 "FR_INVALID_NAME",
shintamainjp 0:8c55801ce311 21 "FR_INVALID_DRIVE",
shintamainjp 0:8c55801ce311 22 "FR_DENIED",
shintamainjp 0:8c55801ce311 23 "FR_EXIST",
shintamainjp 0:8c55801ce311 24 "FR_RW_ERROR",
shintamainjp 0:8c55801ce311 25 "FR_WRITE_PROTECTED",
shintamainjp 0:8c55801ce311 26 "FR_NOT_ENABLED",
shintamainjp 0:8c55801ce311 27 "FR_NO_FILESYSTEM",
shintamainjp 0:8c55801ce311 28 "FR_INVALID_OBJECT",
shintamainjp 0:8c55801ce311 29 "FR_MKFS_ABORTED"
shintamainjp 0:8c55801ce311 30 };
shintamainjp 0:8c55801ce311 31 #endif
shintamainjp 0:8c55801ce311 32
shintamainjp 0:8c55801ce311 33 FATFileHandle::FATFileHandle(FIL fh) {
shintamainjp 0:8c55801ce311 34 _fh = fh;
shintamainjp 0:8c55801ce311 35 }
shintamainjp 0:8c55801ce311 36
shintamainjp 0:8c55801ce311 37 int FATFileHandle::close() {
shintamainjp 0:8c55801ce311 38 FFSDEBUG("close\n");
shintamainjp 0:8c55801ce311 39 int retval = f_close(&_fh);
shintamainjp 0:8c55801ce311 40 delete this;
shintamainjp 0:8c55801ce311 41 return retval;
shintamainjp 0:8c55801ce311 42 }
shintamainjp 0:8c55801ce311 43
shintamainjp 0:8c55801ce311 44 ssize_t FATFileHandle::write(const void* buffer, size_t length) {
shintamainjp 0:8c55801ce311 45 FFSDEBUG("write(%d)\n", length);
shintamainjp 0:8c55801ce311 46 UINT n;
shintamainjp 0:8c55801ce311 47 FRESULT res = f_write(&_fh, buffer, length, &n);
shintamainjp 0:8c55801ce311 48 if(res) {
shintamainjp 0:8c55801ce311 49 FFSDEBUG("f_write() failed (%d, %s)", res, FR_ERRORS[res]);
shintamainjp 0:8c55801ce311 50 return -1;
shintamainjp 0:8c55801ce311 51 }
shintamainjp 0:8c55801ce311 52 return n;
shintamainjp 0:8c55801ce311 53 }
shintamainjp 0:8c55801ce311 54
shintamainjp 0:8c55801ce311 55 ssize_t FATFileHandle::read(void* buffer, size_t length) {
shintamainjp 0:8c55801ce311 56 FFSDEBUG("read(%d)\n", length);
shintamainjp 0:8c55801ce311 57 UINT n;
shintamainjp 0:8c55801ce311 58 FRESULT res = f_read(&_fh, buffer, length, &n);
shintamainjp 0:8c55801ce311 59 if(res) {
shintamainjp 0:8c55801ce311 60 FFSDEBUG("f_read() failed (%d, %s)\n", res, FR_ERRORS[res]);
shintamainjp 0:8c55801ce311 61 return -1;
shintamainjp 0:8c55801ce311 62 }
shintamainjp 0:8c55801ce311 63 return n;
shintamainjp 0:8c55801ce311 64 }
shintamainjp 0:8c55801ce311 65
shintamainjp 0:8c55801ce311 66 int FATFileHandle::isatty() {
shintamainjp 0:8c55801ce311 67 return 0;
shintamainjp 0:8c55801ce311 68 }
shintamainjp 0:8c55801ce311 69
shintamainjp 0:8c55801ce311 70 off_t FATFileHandle::lseek(off_t position, int whence) {
shintamainjp 0:8c55801ce311 71 FFSDEBUG("lseek(%i,%i)\n",position,whence);
shintamainjp 0:8c55801ce311 72 if(whence == SEEK_END) {
shintamainjp 0:8c55801ce311 73 position += _fh.fsize;
shintamainjp 0:8c55801ce311 74 } else if(whence==SEEK_CUR) {
shintamainjp 0:8c55801ce311 75 position += _fh.fptr;
shintamainjp 0:8c55801ce311 76 }
shintamainjp 0:8c55801ce311 77 FRESULT res = f_lseek(&_fh, position);
shintamainjp 0:8c55801ce311 78 if(res) {
shintamainjp 0:8c55801ce311 79 FFSDEBUG("lseek failed (%d, %s)\n", res, FR_ERRORS[res]);
shintamainjp 0:8c55801ce311 80 return -1;
shintamainjp 0:8c55801ce311 81 } else {
shintamainjp 0:8c55801ce311 82 FFSDEBUG("lseek OK, returning %i\n", _fh.fptr);
shintamainjp 0:8c55801ce311 83 return _fh.fptr;
shintamainjp 0:8c55801ce311 84 }
shintamainjp 0:8c55801ce311 85 }
shintamainjp 0:8c55801ce311 86
shintamainjp 0:8c55801ce311 87 int FATFileHandle::fsync() {
shintamainjp 0:8c55801ce311 88 FFSDEBUG("fsync()\n");
shintamainjp 0:8c55801ce311 89 FRESULT res = f_sync(&_fh);
shintamainjp 0:8c55801ce311 90 if (res) {
shintamainjp 0:8c55801ce311 91 FFSDEBUG("f_sync() failed (%d, %s)\n", res, FR_ERRORS[res]);
shintamainjp 0:8c55801ce311 92 return -1;
shintamainjp 0:8c55801ce311 93 }
shintamainjp 0:8c55801ce311 94 return 0;
shintamainjp 0:8c55801ce311 95 }
shintamainjp 0:8c55801ce311 96
shintamainjp 0:8c55801ce311 97 off_t FATFileHandle::flen() {
shintamainjp 0:8c55801ce311 98 FFSDEBUG("flen\n");
shintamainjp 0:8c55801ce311 99 return _fh.fsize;
shintamainjp 0:8c55801ce311 100 }
shintamainjp 0:8c55801ce311 101
shintamainjp 0:8c55801ce311 102 } // namespace mbed