|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /*
-
- SD - a slightly more friendly wrapper for sdfatlib
-
- This library aims to expose a subset of SD card functionality
- in the form of a higher level "wrapper" object.
-
- License: GNU General Public License V3
- (Because sdfatlib is licensed with this.)
-
- (C) Copyright 2010 SparkFun Electronics
-
- */
-
- #ifndef __SD_H__
- #define __SD_H__
-
- #include <Arduino.h>
-
- #include <utility/SdFat.h>
- #include <utility/SdFatUtil.h>
-
- #define FILE_READ O_READ
- #define FILE_WRITE (O_READ | O_WRITE | O_CREAT)
-
- class File : public Stream {
- private:
- char _name[13]; // our name
- SdFile *_file; // underlying file pointer
-
- public:
- File(SdFile f, const char *name); // wraps an underlying SdFile
- File(void); // 'empty' constructor
- ~File(void); // destructor
- virtual size_t write(uint8_t);
- virtual size_t write(const uint8_t *buf, size_t size);
- virtual int read();
- virtual int peek();
- virtual int available();
- virtual void flush();
- int read(void *buf, uint16_t nbyte);
- boolean seek(uint32_t pos);
- uint32_t position();
- uint32_t size();
- void close();
- operator bool();
- char * name();
-
- boolean isDirectory(void);
- File openNextFile(uint8_t mode = O_RDONLY);
- void rewindDirectory(void);
-
- using Print::write;
- };
-
- class SDClass {
-
- private:
- // These are required for initialisation and use of sdfatlib
- Sd2Card card;
- SdVolume volume;
- SdFile root;
-
- // my quick&dirty iterator, should be replaced
- SdFile getParentDir(const char *filepath, int *indx);
- public:
- // This needs to be called to set up the connection to the SD card
- // before other methods are used.
- boolean begin(uint8_t csPin = SD_CHIP_SELECT_PIN);
-
- // Open the specified file/directory with the supplied mode (e.g. read or
- // write, etc). Returns a File object for interacting with the file.
- // Note that currently only one file can be open at a time.
- File open(const char *filename, uint8_t mode = FILE_READ);
-
- // Methods to determine if the requested file path exists.
- boolean exists(char *filepath);
-
- // Create the requested directory heirarchy--if intermediate directories
- // do not exist they will be created.
- boolean mkdir(char *filepath);
-
- // Delete the file.
- boolean remove(char *filepath);
-
- boolean rmdir(char *filepath);
-
- private:
-
- // This is used to determine the mode used to open a file
- // it's here because it's the easiest place to pass the
- // information through the directory walking function. But
- // it's probably not the best place for it.
- // It shouldn't be set directly--it is set via the parameters to `open`.
- int fileOpenMode;
-
- friend class File;
- friend boolean callback_openPath(SdFile&, char *, boolean, void *);
- };
-
- extern SDClass SD;
-
- #endif
|