First working version of a FATFileSystem compatible Chan FAT v0.8 implementation. This is intended to use with long file names and RTOS support. For now long file names work but RTOS support is still untested.

Dependents:   USB_MSC USB_CDC_MSD_Hello TFTPServerTest DMXStation ... more

FATDirHandle.cpp

Committer:
NeoBelerophon
Date:
2011-02-04
Revision:
2:629e4be333f3
Parent:
0:8ea634413549

File content as of revision 2:629e4be333f3:

/* mbed Microcontroller Library - FATDirHandle
 * Copyright (c) 2008, sford
 */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ff.h"
#include "FATDirHandle.h"
#include "FATFileSystem.h"

namespace mbed {

FATDirHandle::FATDirHandle(const DIR_t &the_dir) {
    dir = the_dir;
}

int FATDirHandle::closedir() {
    delete this;
    return 0;
}

struct dirent *FATDirHandle::readdir() {
    FILINFO finfo;
#if _USE_LFN
    static char lfn[_MAX_LFN * (_LFN_UNICODE ? 2 : 1) + 1];
    finfo.lfname = lfn;
    finfo.lfsize = sizeof(lfn);
#endif
    FRESULT res = f_readdir(&dir, &finfo);
    if(res != 0 || finfo.fname[0]==0) {
        return NULL;
    } else {
        char* fn;
        int stringSize = 0;
#if _USE_LFN
        fn = *finfo.lfname ? finfo.lfname : finfo.fname;
        stringSize = finfo.lfsize;
#else
        fn = fno.fname;
        stringSize =  sizeof(finfo.fname);
#endif
        memcpy(cur_entry.d_name, fn, stringSize);
        return &cur_entry;
    }
}

void FATDirHandle::rewinddir() {
    dir.index = 0;
}

off_t FATDirHandle::telldir() {
    return dir.index;
}

void FATDirHandle::seekdir(off_t location) {
    dir.index = location;
}

}