SDFileSystem Library

Dependents:   ECE2035_SUM17_Project

Committer:
kennyainny
Date:
Fri Jul 14 21:42:13 2017 +0000
Revision:
0:71be9322f4eb
no changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kennyainny 0:71be9322f4eb 1 /* mbed Microcontroller Library
kennyainny 0:71be9322f4eb 2 * Copyright (c) 2006-2012 ARM Limited
kennyainny 0:71be9322f4eb 3 *
kennyainny 0:71be9322f4eb 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
kennyainny 0:71be9322f4eb 5 * of this software and associated documentation files (the "Software"), to deal
kennyainny 0:71be9322f4eb 6 * in the Software without restriction, including without limitation the rights
kennyainny 0:71be9322f4eb 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
kennyainny 0:71be9322f4eb 8 * copies of the Software, and to permit persons to whom the Software is
kennyainny 0:71be9322f4eb 9 * furnished to do so, subject to the following conditions:
kennyainny 0:71be9322f4eb 10 *
kennyainny 0:71be9322f4eb 11 * The above copyright notice and this permission notice shall be included in
kennyainny 0:71be9322f4eb 12 * all copies or substantial portions of the Software.
kennyainny 0:71be9322f4eb 13 *
kennyainny 0:71be9322f4eb 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
kennyainny 0:71be9322f4eb 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
kennyainny 0:71be9322f4eb 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
kennyainny 0:71be9322f4eb 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
kennyainny 0:71be9322f4eb 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kennyainny 0:71be9322f4eb 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
kennyainny 0:71be9322f4eb 20 * SOFTWARE.
kennyainny 0:71be9322f4eb 21 */
kennyainny 0:71be9322f4eb 22 #include "ff.h"
kennyainny 0:71be9322f4eb 23 #include "ffconf.h"
kennyainny 0:71be9322f4eb 24 #include "mbed_debug.h"
kennyainny 0:71be9322f4eb 25
kennyainny 0:71be9322f4eb 26 #include "FATFileHandle.h"
kennyainny 0:71be9322f4eb 27
kennyainny 0:71be9322f4eb 28 FATFileHandle::FATFileHandle(FIL fh) {
kennyainny 0:71be9322f4eb 29 _fh = fh;
kennyainny 0:71be9322f4eb 30 }
kennyainny 0:71be9322f4eb 31
kennyainny 0:71be9322f4eb 32 int FATFileHandle::close() {
kennyainny 0:71be9322f4eb 33 int retval = f_close(&_fh);
kennyainny 0:71be9322f4eb 34 delete this;
kennyainny 0:71be9322f4eb 35 return retval;
kennyainny 0:71be9322f4eb 36 }
kennyainny 0:71be9322f4eb 37
kennyainny 0:71be9322f4eb 38 ssize_t FATFileHandle::write(const void* buffer, size_t length) {
kennyainny 0:71be9322f4eb 39 UINT n;
kennyainny 0:71be9322f4eb 40 FRESULT res = f_write(&_fh, buffer, length, &n);
kennyainny 0:71be9322f4eb 41 if (res) {
kennyainny 0:71be9322f4eb 42 debug_if(FFS_DBG, "f_write() failed: %d", res);
kennyainny 0:71be9322f4eb 43 return -1;
kennyainny 0:71be9322f4eb 44 }
kennyainny 0:71be9322f4eb 45 return n;
kennyainny 0:71be9322f4eb 46 }
kennyainny 0:71be9322f4eb 47
kennyainny 0:71be9322f4eb 48 ssize_t FATFileHandle::read(void* buffer, size_t length) {
kennyainny 0:71be9322f4eb 49 debug_if(FFS_DBG, "read(%d)\n", length);
kennyainny 0:71be9322f4eb 50 UINT n;
kennyainny 0:71be9322f4eb 51 FRESULT res = f_read(&_fh, buffer, length, &n);
kennyainny 0:71be9322f4eb 52 if (res) {
kennyainny 0:71be9322f4eb 53 debug_if(FFS_DBG, "f_read() failed: %d\n", res);
kennyainny 0:71be9322f4eb 54 return -1;
kennyainny 0:71be9322f4eb 55 }
kennyainny 0:71be9322f4eb 56 return n;
kennyainny 0:71be9322f4eb 57 }
kennyainny 0:71be9322f4eb 58
kennyainny 0:71be9322f4eb 59 int FATFileHandle::isatty() {
kennyainny 0:71be9322f4eb 60 return 0;
kennyainny 0:71be9322f4eb 61 }
kennyainny 0:71be9322f4eb 62
kennyainny 0:71be9322f4eb 63 off_t FATFileHandle::lseek(off_t position, int whence) {
kennyainny 0:71be9322f4eb 64 if (whence == SEEK_END) {
kennyainny 0:71be9322f4eb 65 position += _fh.fsize;
kennyainny 0:71be9322f4eb 66 } else if(whence==SEEK_CUR) {
kennyainny 0:71be9322f4eb 67 position += _fh.fptr;
kennyainny 0:71be9322f4eb 68 }
kennyainny 0:71be9322f4eb 69 FRESULT res = f_lseek(&_fh, position);
kennyainny 0:71be9322f4eb 70 if (res) {
kennyainny 0:71be9322f4eb 71 debug_if(FFS_DBG, "lseek failed: %d\n", res);
kennyainny 0:71be9322f4eb 72 return -1;
kennyainny 0:71be9322f4eb 73 } else {
kennyainny 0:71be9322f4eb 74 debug_if(FFS_DBG, "lseek OK, returning %i\n", _fh.fptr);
kennyainny 0:71be9322f4eb 75 return _fh.fptr;
kennyainny 0:71be9322f4eb 76 }
kennyainny 0:71be9322f4eb 77 }
kennyainny 0:71be9322f4eb 78
kennyainny 0:71be9322f4eb 79 int FATFileHandle::fsync() {
kennyainny 0:71be9322f4eb 80 FRESULT res = f_sync(&_fh);
kennyainny 0:71be9322f4eb 81 if (res) {
kennyainny 0:71be9322f4eb 82 debug_if(FFS_DBG, "f_sync() failed: %d\n", res);
kennyainny 0:71be9322f4eb 83 return -1;
kennyainny 0:71be9322f4eb 84 }
kennyainny 0:71be9322f4eb 85 return 0;
kennyainny 0:71be9322f4eb 86 }
kennyainny 0:71be9322f4eb 87
kennyainny 0:71be9322f4eb 88 off_t FATFileHandle::flen() {
kennyainny 0:71be9322f4eb 89 return _fh.fsize;
kennyainny 0:71be9322f4eb 90 }