dd

Dependencies:   C12832 LM75B mbed

Committer:
pfe
Date:
Tue Apr 21 10:16:20 2015 +0000
Revision:
0:05a20e3e3179
dd

Who changed what in which revision?

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