Michael Spencer / Smoothie

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Michael J. Spencer
Date:
Fri Feb 28 18:52:52 2014 -0800
Revision:
2:1df0b61d3b5a
Update to latest Smoothie.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 /* mbed Microcontroller Library - FATDirHandle
Michael J. Spencer 2:1df0b61d3b5a 2 * Copyright (c) 2008, sford
Michael J. Spencer 2:1df0b61d3b5a 3 */
Michael J. Spencer 2:1df0b61d3b5a 4
Michael J. Spencer 2:1df0b61d3b5a 5 #include <stdio.h>
Michael J. Spencer 2:1df0b61d3b5a 6 #include <stdlib.h>
Michael J. Spencer 2:1df0b61d3b5a 7 #include <string.h>
Michael J. Spencer 2:1df0b61d3b5a 8 #include "ff.h"
Michael J. Spencer 2:1df0b61d3b5a 9 #include "FATDirHandle.h"
Michael J. Spencer 2:1df0b61d3b5a 10 #include "FATFileSystem.h"
Michael J. Spencer 2:1df0b61d3b5a 11
Michael J. Spencer 2:1df0b61d3b5a 12 namespace mbed {
Michael J. Spencer 2:1df0b61d3b5a 13
Michael J. Spencer 2:1df0b61d3b5a 14 FATDirHandle::FATDirHandle(const DIR_t &the_dir) {
Michael J. Spencer 2:1df0b61d3b5a 15 dir = the_dir;
Michael J. Spencer 2:1df0b61d3b5a 16 }
Michael J. Spencer 2:1df0b61d3b5a 17
Michael J. Spencer 2:1df0b61d3b5a 18 int FATDirHandle::closedir() {
Michael J. Spencer 2:1df0b61d3b5a 19 delete this;
Michael J. Spencer 2:1df0b61d3b5a 20 return 0;
Michael J. Spencer 2:1df0b61d3b5a 21 }
Michael J. Spencer 2:1df0b61d3b5a 22
Michael J. Spencer 2:1df0b61d3b5a 23 struct dirent *FATDirHandle::readdir() {
Michael J. Spencer 2:1df0b61d3b5a 24 FILINFO finfo;
Michael J. Spencer 2:1df0b61d3b5a 25 #if _USE_LFN
Michael J. Spencer 2:1df0b61d3b5a 26 static char lfn[_MAX_LFN * (_LFN_UNICODE ? 2 : 1) + 1];
Michael J. Spencer 2:1df0b61d3b5a 27 finfo.lfname = lfn;
Michael J. Spencer 2:1df0b61d3b5a 28 finfo.lfsize = sizeof(lfn);
Michael J. Spencer 2:1df0b61d3b5a 29 #endif
Michael J. Spencer 2:1df0b61d3b5a 30 FRESULT res = f_readdir(&dir, &finfo);
Michael J. Spencer 2:1df0b61d3b5a 31 if(res != 0 || finfo.fname[0]==0) {
Michael J. Spencer 2:1df0b61d3b5a 32 return NULL;
Michael J. Spencer 2:1df0b61d3b5a 33 } else {
Michael J. Spencer 2:1df0b61d3b5a 34 char* fn;
Michael J. Spencer 2:1df0b61d3b5a 35 int stringSize = 0;
Michael J. Spencer 2:1df0b61d3b5a 36 #if _USE_LFN
Michael J. Spencer 2:1df0b61d3b5a 37 fn = *finfo.lfname ? finfo.lfname : finfo.fname;
Michael J. Spencer 2:1df0b61d3b5a 38 stringSize = finfo.lfsize;
Michael J. Spencer 2:1df0b61d3b5a 39 #else
Michael J. Spencer 2:1df0b61d3b5a 40 fn = fno.fname;
Michael J. Spencer 2:1df0b61d3b5a 41 stringSize = sizeof(finfo.fname);
Michael J. Spencer 2:1df0b61d3b5a 42 #endif
Michael J. Spencer 2:1df0b61d3b5a 43 memcpy(cur_entry.d_name, fn, stringSize);
Michael J. Spencer 2:1df0b61d3b5a 44 return &cur_entry;
Michael J. Spencer 2:1df0b61d3b5a 45 }
Michael J. Spencer 2:1df0b61d3b5a 46 }
Michael J. Spencer 2:1df0b61d3b5a 47
Michael J. Spencer 2:1df0b61d3b5a 48 void FATDirHandle::rewinddir() {
Michael J. Spencer 2:1df0b61d3b5a 49 dir.index = 0;
Michael J. Spencer 2:1df0b61d3b5a 50 }
Michael J. Spencer 2:1df0b61d3b5a 51
Michael J. Spencer 2:1df0b61d3b5a 52 off_t FATDirHandle::telldir() {
Michael J. Spencer 2:1df0b61d3b5a 53 return dir.index;
Michael J. Spencer 2:1df0b61d3b5a 54 }
Michael J. Spencer 2:1df0b61d3b5a 55
Michael J. Spencer 2:1df0b61d3b5a 56 void FATDirHandle::seekdir(off_t location) {
Michael J. Spencer 2:1df0b61d3b5a 57 dir.index = location;
Michael J. Spencer 2:1df0b61d3b5a 58 }
Michael J. Spencer 2:1df0b61d3b5a 59
Michael J. Spencer 2:1df0b61d3b5a 60 }
Michael J. Spencer 2:1df0b61d3b5a 61