diff options
author | Clyne Sullivan <tullivan99@gmail.com> | 2019-02-28 17:04:22 -0500 |
---|---|---|
committer | Clyne Sullivan <tullivan99@gmail.com> | 2019-02-28 17:04:22 -0500 |
commit | d6869d1ec4bd24cd2c3eafa534f0849b25ec5607 (patch) | |
tree | 79e54ed27b39c31864895535d11399708d5a45c0 /arduino/libraries/FileSystem/src/Bluefruit_FileIO.cpp | |
parent | 614ee97bf3a2270c413527a7f35c54cbecd9e601 (diff) |
added basic code
Diffstat (limited to 'arduino/libraries/FileSystem/src/Bluefruit_FileIO.cpp')
-rwxr-xr-x | arduino/libraries/FileSystem/src/Bluefruit_FileIO.cpp | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/arduino/libraries/FileSystem/src/Bluefruit_FileIO.cpp b/arduino/libraries/FileSystem/src/Bluefruit_FileIO.cpp new file mode 100755 index 0000000..189d305 --- /dev/null +++ b/arduino/libraries/FileSystem/src/Bluefruit_FileIO.cpp @@ -0,0 +1,195 @@ +/**************************************************************************/ +/*! + @file Bluefruit_FileIO.cpp + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2018, Adafruit Industries (adafruit.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ + +#include <Arduino.h> +#include "Bluefruit_FileIO.h" + +namespace BluefruitFS +{ + +File::File (FileSystemClass &fs) +{ + _fs = &fs; + _hdl = NULL; + _path = NULL; + _is_dir = false; +} + +File::File (char const *filename, uint8_t mode, FileSystemClass &fs) +{ + _fs = &fs; + _hdl = NULL; + _path = NULL; + _is_dir = false; + + open(filename, mode); +} + +File& File::operator = (const File &rhs) +{ + // close if currently opened + if ( _hdl ) close(); + memcpy(this, &rhs, sizeof(File)); + return *this; +} + +File::~File () +{ + +} + +bool File::open (char const *filename, uint8_t mode) +{ + // close if currently opened + if ( _hdl ) close(); + + *this = _fs->open(filename, mode); + return _hdl != NULL; +} + +size_t File::write (uint8_t ch) +{ + VERIFY(!_is_dir, 0); + return write(&ch, 1); +} + +size_t File::write (uint8_t const *buf, size_t size) +{ + VERIFY(!_is_dir, 0); + return _fs->_f_write(_hdl, buf, size); +} + +int File::read (void) +{ + VERIFY(!_is_dir, -1); + uint8_t ch; + return (read(&ch, 1) > 0) ? ch : -1; +} + +int File::read (void *buf, uint16_t nbyte) +{ + VERIFY(!_is_dir, 0); + return _fs->_f_read(_hdl, buf, nbyte); +} + +int File::peek (void) +{ + VERIFY(!_is_dir, -1); + + int ch = read(); + uint32_t pos = position(); + seek((pos > 0) ? (pos - 1) : 0); + return ch; +} + +int File::available (void) +{ + return size() - position(); +} + +bool File::seek (uint32_t pos) +{ + VERIFY(!_is_dir, false); + return _fs->_f_seek(_hdl, pos); +} + +uint32_t File::position (void) +{ + VERIFY(!_is_dir, 0); + return _fs->_f_position(_hdl); +} + +uint32_t File::size (void) +{ + VERIFY(!_is_dir, 0); + return _fs->_f_size(_hdl); +} + +void File::flush (void) +{ + VERIFY(!_is_dir,); + _fs->_f_flush(_hdl); +} + +void File::close (void) +{ + if ( _hdl ) + { + _fs->_f_close(_hdl, _is_dir); + rtos_free(_hdl); + } + + if ( _path ) rtos_free(_path); + + _hdl = NULL; + _path = NULL; +} + +File::operator bool (void) +{ + return _hdl != NULL; +} + +char const* File::name (void) +{ + // return barename only + char* barename = strrchr(_path, '/'); + return barename ? (barename + 1) : _path; +} + +char const* File::path (void) +{ + return _path; +} + +bool File::isDirectory (void) +{ + return _is_dir; +} + +File File::openNextFile (uint8_t mode) +{ + if ( !_is_dir ) return File(*_fs); + return _fs->_f_openNextFile(_hdl, _path, mode); +} + +void File::rewindDirectory (void) +{ + _fs->_f_rewindDirectory(_hdl); +} + + +} |