USBMSD SD card Hello World for Mbed platforms

Dependencies:   mbed USBMSD_SD USBDevice

Committer:
samux
Date:
Mon Nov 14 12:08:32 2011 +0000
Revision:
7:6494da2a5c60
will try to use ChaNFSSD

Who changed what in which revision?

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