hattori&ide

Dependencies:   mbed

Committer:
hattori_atsushi
Date:
Sun Dec 18 08:16:01 2022 +0000
Revision:
0:f77369cabd75
hattori

Who changed what in which revision?

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