SD

Dependencies:   utility

Committer:
Jackson_lv
Date:
Tue Jul 14 01:58:28 2015 +0000
Revision:
0:405b46e831df
SD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jackson_lv 0:405b46e831df 1 /*
Jackson_lv 0:405b46e831df 2
Jackson_lv 0:405b46e831df 3 SD - a slightly more friendly wrapper for sdfatlib
Jackson_lv 0:405b46e831df 4
Jackson_lv 0:405b46e831df 5 This library aims to expose a subset of SD card functionality
Jackson_lv 0:405b46e831df 6 in the form of a higher level "wrapper" object.
Jackson_lv 0:405b46e831df 7
Jackson_lv 0:405b46e831df 8 License: GNU General Public License V3
Jackson_lv 0:405b46e831df 9 (Because sdfatlib is licensed with this.)
Jackson_lv 0:405b46e831df 10
Jackson_lv 0:405b46e831df 11 (C) Copyright 2010 SparkFun Electronics
Jackson_lv 0:405b46e831df 12
Jackson_lv 0:405b46e831df 13 */
Jackson_lv 0:405b46e831df 14
Jackson_lv 0:405b46e831df 15 #ifndef __SD_H__
Jackson_lv 0:405b46e831df 16 #define __SD_H__
Jackson_lv 0:405b46e831df 17
Jackson_lv 0:405b46e831df 18 #include "mbed.h"
Jackson_lv 0:405b46e831df 19
Jackson_lv 0:405b46e831df 20 #include <utility/SdFat.h>
Jackson_lv 0:405b46e831df 21 #include <utility/SdFatUtil.h>
Jackson_lv 0:405b46e831df 22
Jackson_lv 0:405b46e831df 23 #define FILE_READ O_READ
Jackson_lv 0:405b46e831df 24 #define FILE_WRITE (O_READ | O_WRITE | O_CREAT)
Jackson_lv 0:405b46e831df 25
Jackson_lv 0:405b46e831df 26 class File : public Stream {
Jackson_lv 0:405b46e831df 27 private:
Jackson_lv 0:405b46e831df 28 char _name[13]; // our name
Jackson_lv 0:405b46e831df 29 SdFile *_file; // underlying file pointer
Jackson_lv 0:405b46e831df 30
Jackson_lv 0:405b46e831df 31 public:
Jackson_lv 0:405b46e831df 32 File(SdFile f, const char *name); // wraps an underlying SdFile
Jackson_lv 0:405b46e831df 33 File(void); // 'empty' constructor
Jackson_lv 0:405b46e831df 34 ~File(void); // destructor
Jackson_lv 0:405b46e831df 35 virtual size_t write(uint8_t);
Jackson_lv 0:405b46e831df 36 virtual size_t write(const uint8_t *buf, size_t size);
Jackson_lv 0:405b46e831df 37 virtual int read();
Jackson_lv 0:405b46e831df 38 virtual int peek();
Jackson_lv 0:405b46e831df 39 virtual int available();
Jackson_lv 0:405b46e831df 40 virtual void flush();
Jackson_lv 0:405b46e831df 41 int read(void *buf, uint16_t nbyte);
Jackson_lv 0:405b46e831df 42 boolean seek(uint32_t pos);
Jackson_lv 0:405b46e831df 43 uint32_t position();
Jackson_lv 0:405b46e831df 44 uint32_t size();
Jackson_lv 0:405b46e831df 45 void close();
Jackson_lv 0:405b46e831df 46 operator bool();
Jackson_lv 0:405b46e831df 47 char * name();
Jackson_lv 0:405b46e831df 48
Jackson_lv 0:405b46e831df 49 boolean isDirectory(void);
Jackson_lv 0:405b46e831df 50 File openNextFile(uint8_t mode = O_RDONLY);
Jackson_lv 0:405b46e831df 51 void rewindDirectory(void);
Jackson_lv 0:405b46e831df 52
Jackson_lv 0:405b46e831df 53 using Print::write;
Jackson_lv 0:405b46e831df 54 };
Jackson_lv 0:405b46e831df 55
Jackson_lv 0:405b46e831df 56 class SDClass {
Jackson_lv 0:405b46e831df 57
Jackson_lv 0:405b46e831df 58 private:
Jackson_lv 0:405b46e831df 59 // These are required for initialisation and use of sdfatlib
Jackson_lv 0:405b46e831df 60 Sd2Card card;
Jackson_lv 0:405b46e831df 61 SdVolume volume;
Jackson_lv 0:405b46e831df 62 SdFile root;
Jackson_lv 0:405b46e831df 63
Jackson_lv 0:405b46e831df 64 // my quick&dirty iterator, should be replaced
Jackson_lv 0:405b46e831df 65 SdFile getParentDir(const char *filepath, int *indx);
Jackson_lv 0:405b46e831df 66 public:
Jackson_lv 0:405b46e831df 67 // This needs to be called to set up the connection to the SD card
Jackson_lv 0:405b46e831df 68 // before other methods are used.
Jackson_lv 0:405b46e831df 69 boolean begin(uint8_t csPin = SD_CHIP_SELECT_PIN);
Jackson_lv 0:405b46e831df 70
Jackson_lv 0:405b46e831df 71 // Open the specified file/directory with the supplied mode (e.g. read or
Jackson_lv 0:405b46e831df 72 // write, etc). Returns a File object for interacting with the file.
Jackson_lv 0:405b46e831df 73 // Note that currently only one file can be open at a time.
Jackson_lv 0:405b46e831df 74 File open(const char *filename, uint8_t mode = FILE_READ);
Jackson_lv 0:405b46e831df 75
Jackson_lv 0:405b46e831df 76 // Methods to determine if the requested file path exists.
Jackson_lv 0:405b46e831df 77 boolean exists(char *filepath);
Jackson_lv 0:405b46e831df 78
Jackson_lv 0:405b46e831df 79 // Create the requested directory heirarchy--if intermediate directories
Jackson_lv 0:405b46e831df 80 // do not exist they will be created.
Jackson_lv 0:405b46e831df 81 boolean mkdir(char *filepath);
Jackson_lv 0:405b46e831df 82
Jackson_lv 0:405b46e831df 83 // Delete the file.
Jackson_lv 0:405b46e831df 84 boolean remove(char *filepath);
Jackson_lv 0:405b46e831df 85
Jackson_lv 0:405b46e831df 86 boolean rmdir(char *filepath);
Jackson_lv 0:405b46e831df 87
Jackson_lv 0:405b46e831df 88 private:
Jackson_lv 0:405b46e831df 89
Jackson_lv 0:405b46e831df 90 // This is used to determine the mode used to open a file
Jackson_lv 0:405b46e831df 91 // it's here because it's the easiest place to pass the
Jackson_lv 0:405b46e831df 92 // information through the directory walking function. But
Jackson_lv 0:405b46e831df 93 // it's probably not the best place for it.
Jackson_lv 0:405b46e831df 94 // It shouldn't be set directly--it is set via the parameters to `open`.
Jackson_lv 0:405b46e831df 95 int fileOpenMode;
Jackson_lv 0:405b46e831df 96
Jackson_lv 0:405b46e831df 97 friend class File;
Jackson_lv 0:405b46e831df 98 friend boolean callback_openPath(SdFile&, char *, boolean, void *);
Jackson_lv 0:405b46e831df 99 };
Jackson_lv 0:405b46e831df 100
Jackson_lv 0:405b46e831df 101 extern SDClass SD;
Jackson_lv 0:405b46e831df 102
Jackson_lv 0:405b46e831df 103 #endif