Web server based weather station using Sparkfun Weather Meters.

Dependencies:   FatFileSystem mbed WeatherMeters SDFileSystem

Committer:
AdamGreen
Date:
Thu Feb 23 21:38:39 2012 +0000
Revision:
0:616601bde9fb

        

Who changed what in which revision?

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