Revising SD library API.

Open now returns a file object (which has a close() method); exists() no longer accepts a parent directory.
This commit is contained in:
David A. Mellis 2010-11-19 22:30:40 -05:00
parent 06d3d85143
commit a5898ae26a
3 changed files with 72 additions and 23 deletions

39
libraries/SD/File.cpp Normal file
View File

@ -0,0 +1,39 @@
/*
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
*/
#include <SD.h>
void File::write(uint8_t val) {
SD.file.write(val);
}
void File::write(const char *str) {
SD.file.write(str);
}
void File::write(const uint8_t *buf, size_t size) {
SD.file.write(buf, size);
}
int File::read() {
return SD.file.read();
}
void File::close() {
SD.file.close();
}
File::operator bool() {
return SD.file.isOpen();
}

View File

@ -327,7 +327,7 @@ void SDClass::begin(uint8_t csPin) {
}
boolean SDClass::open(char *filepath,
File SDClass::open(char *filepath,
boolean write, boolean append) {
/*
@ -368,19 +368,19 @@ boolean SDClass::open(char *filepath,
fileOpenMode = oflag;
walkPath(filepath, root, callback_openPath, this);
// TODO: Actually return something useful.
return File();
}
boolean SDClass::close() {
/*
Closes the file opened by the `open` method.
*/
file.close();
}
//boolean SDClass::close() {
// /*
//
// Closes the file opened by the `open` method.
//
// */
// file.close();
//}
boolean SDClass::exists(char *filepath) {
@ -389,19 +389,19 @@ boolean SDClass::exists(char *filepath) {
Returns true if the supplied file path exists.
*/
return exists(filepath, root);
return walkPath(filepath, root, callback_pathExists);
}
boolean SDClass::exists(char *filepath, SdFile& parentDir) {
/*
Returns true if the supplied file path rooted at `parentDir`
exists.
*/
return walkPath(filepath, parentDir, callback_pathExists);
}
//boolean SDClass::exists(char *filepath, SdFile& parentDir) {
// /*
//
// Returns true if the supplied file path rooted at `parentDir`
// exists.
//
// */
// return walkPath(filepath, parentDir, callback_pathExists);
//}
boolean SDClass::makeDir(char *filepath) {

View File

@ -23,6 +23,16 @@
// Use this to configure the chip select pin of the SD card.
#define SD_CARD_CHIP_SELECT_PIN 4 // For use with Arduino Ethernet Shield
class File : public Print {
public:
virtual void write(uint8_t);
virtual void write(const char *str);
virtual void write(const uint8_t *buf, size_t size);
int read();
void close();
operator bool();
};
class SDClass {
private:
@ -40,14 +50,14 @@ class SDClass {
// Open the specified file/directory with the supplied mode (e.g. read or
// write, etc). Once opened the file can be accessed via the
// `MemoryCard.file` field which is a standard `sdfatlib` file object.
boolean open(char *filename, boolean write = false, boolean append = true);
File open(char *filename, boolean write = false, boolean append = true);
// Close an opened file object.
boolean close();
//boolean close();
// Methods to determine if the requested file path exists.
boolean exists(char *filepath);
boolean exists(char *filepath, SdFile& parentDir);
//boolean exists(char *filepath, SdFile& parentDir);
// Create the requested directory heirarchy--if intermediate directories
// do not exist they will be created.