EA BaseBoard, playing wav, PC see\'s SD-card through USB port.

Dependencies:   mbed

Committer:
Lerche
Date:
Tue Nov 22 05:45:58 2011 +0000
Revision:
0:fef366d2ed20
Thanks to those who provided EA_WavPlayer and USB_MSC

Who changed what in which revision?

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