Jackson Lv
/
SD
SD
SD.h@0:405b46e831df, 2015-07-14 (annotated)
- Committer:
- Jackson_lv
- Date:
- Tue Jul 14 01:58:28 2015 +0000
- Revision:
- 0:405b46e831df
SD
Who changed what in which revision?
User | Revision | Line number | New 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 |