Michael Spencer / Mbed 2 deprecated LaOS

Dependencies:   mbed

Committer:
Michael J. Spencer
Date:
Wed Mar 05 06:14:02 2014 -0800
Revision:
1:f5ac63519541
Initial commit.

Who changed what in which revision?

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