diff options
| author | Cristian Maglie <c.maglie@bug.st> | 2012-01-04 15:14:51 +0100 | 
|---|---|---|
| committer | Cristian Maglie <c.maglie@bug.st> | 2012-01-04 15:14:51 +0100 | 
| commit | 8c2b5b979a75d109ae7cc306afc50d7ffe1e0366 (patch) | |
| tree | 19ac8d91c7209397e7dc890b432a254ae9a7cd62 /libraries/SD/File.cpp | |
| parent | be52c95820400d48e47615232d3c38236166fad3 (diff) | |
Moved libraries folder inside platform folder. Now libraries and examples are searched per board/platform
Diffstat (limited to 'libraries/SD/File.cpp')
| -rw-r--r-- | libraries/SD/File.cpp | 150 | 
1 files changed, 150 insertions, 0 deletions
| diff --git a/libraries/SD/File.cpp b/libraries/SD/File.cpp new file mode 100644 index 0000000..88d9e9a --- /dev/null +++ b/libraries/SD/File.cpp @@ -0,0 +1,150 @@ +/* + + 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> + +/* for debugging file open/close leaks +   uint8_t nfilecount=0; +*/ + +File::File(SdFile f, const char *n) { +  // oh man you are kidding me, new() doesnt exist? Ok we do it by hand! +  _file = (SdFile *)malloc(sizeof(SdFile));  +  if (_file) { +    memcpy(_file, &f, sizeof(SdFile)); +     +    strncpy(_name, n, 12); +    _name[12] = 0; +     +    /* for debugging file open/close leaks +       nfilecount++; +       Serial.print("Created \""); +       Serial.print(n); +       Serial.print("\": "); +       Serial.println(nfilecount, DEC); +    */ +  } +} + +File::File(void) { +  _file = 0; +  _name[0] = 0; +  //Serial.print("Created empty file object"); +} + +File::~File(void) { +  //  Serial.print("Deleted file object"); +} + +// returns a pointer to the file name +char *File::name(void) { +  return _name; +} + +// a directory is a special type of file +boolean File::isDirectory(void) { +  return (_file && _file->isDir()); +} + + +size_t File::write(uint8_t val) { +  return write(&val, 1); +} + +size_t File::write(const uint8_t *buf, size_t size) { +  size_t t; +  if (!_file) { +    setWriteError(); +    return 0; +  } +  _file->clearWriteError(); +  t = _file->write(buf, size); +  if (_file->getWriteError()) { +    setWriteError(); +    return 0; +  } +  return t; +} + +int File::peek() { +  if (! _file)  +    return 0; + +  int c = _file->read(); +  if (c != -1) _file->seekCur(-1); +  return c; +} + +int File::read() { +  if (_file)  +    return _file->read(); +  return -1; +} + +// buffered read for more efficient, high speed reading +int File::read(void *buf, uint16_t nbyte) { +  if (_file)  +    return _file->read(buf, nbyte); +  return 0; +} + +int File::available() { +  if (! _file) return 0; + +  uint32_t n = size() - position(); + +  return n > 0X7FFF ? 0X7FFF : n; +} + +void File::flush() { +  if (_file) +    _file->sync(); +} + +boolean File::seek(uint32_t pos) { +  if (! _file) return false; + +  return _file->seekSet(pos); +} + +uint32_t File::position() { +  if (! _file) return -1; +  return _file->curPosition(); +} + +uint32_t File::size() { +  if (! _file) return 0; +  return _file->fileSize(); +} + +void File::close() { +  if (_file) { +    _file->close(); +    free(_file);  +    _file = 0; + +    /* for debugging file open/close leaks +    nfilecount--; +    Serial.print("Deleted "); +    Serial.println(nfilecount, DEC); +    */ +  } +} + +File::operator bool() { +  if (_file)  +    return  _file->isOpen(); +  return false; +} + | 
