LCD1289Serial_Ethenet

Dependencies:   EthernetInterface FatFileSystemCpp SDFileSystem mbed-rtos mbed

Committer:
shindo
Date:
Wed Nov 07 06:42:34 2012 +0000
Revision:
0:a5367e4d8591
LCD1289Serial_Ethenet

Who changed what in which revision?

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