Dependencies:   ChaNFSSD mbed BMP085 SHT2x

Committer:
tosihisa
Date:
Mon Feb 27 16:20:15 2012 +0000
Revision:
9:9ca3db7ed7cb
V0.89.2. GPS recv data is OK.

Who changed what in which revision?

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