mirror of
				https://github.com/esp8266/Arduino.git
				synced 2025-11-03 14:33:37 +03:00 
			
		
		
		
	* added new boards * corrected block size error * added board to last commit working well * override of readString for File class Stream::readString requires a timeout of 1 seconds + multiple memory resize * correct indent return if size 0 before reserve * correct indent * good indent * stricter test for end of string * same implementation than Stream by replacing timeRead by read * reading file by block of 256 * make sure there is an end of string * fixed bug for file size multiple of 256 string::concate(char*) needs a string terminator to work
		
			
				
	
	
		
			151 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 FS.h - file system wrapper
 | 
						|
 Copyright (c) 2015 Ivan Grokhotkov. All rights reserved.
 | 
						|
 This file is part of the esp8266 core for Arduino environment.
 | 
						|
 | 
						|
 This library is free software; you can redistribute it and/or
 | 
						|
 modify it under the terms of the GNU Lesser General Public
 | 
						|
 License as published by the Free Software Foundation; either
 | 
						|
 version 2.1 of the License, or (at your option) any later version.
 | 
						|
 | 
						|
 This library is distributed in the hope that it will be useful,
 | 
						|
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
 Lesser General Public License for more details.
 | 
						|
 | 
						|
 You should have received a copy of the GNU Lesser General Public
 | 
						|
 License along with this library; if not, write to the Free Software
 | 
						|
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef FS_H
 | 
						|
#define FS_H
 | 
						|
 | 
						|
#include <memory>
 | 
						|
#include <Arduino.h>
 | 
						|
 | 
						|
namespace fs {
 | 
						|
 | 
						|
class File;
 | 
						|
class Dir;
 | 
						|
 | 
						|
class FileImpl;
 | 
						|
typedef std::shared_ptr<FileImpl> FileImplPtr;
 | 
						|
class FSImpl;
 | 
						|
typedef std::shared_ptr<FSImpl> FSImplPtr;
 | 
						|
class DirImpl;
 | 
						|
typedef std::shared_ptr<DirImpl> DirImplPtr;
 | 
						|
 | 
						|
template <typename Tfs>
 | 
						|
bool mount(Tfs& fs, const char* mountPoint);
 | 
						|
 | 
						|
enum SeekMode {
 | 
						|
    SeekSet = 0,
 | 
						|
    SeekCur = 1,
 | 
						|
    SeekEnd = 2
 | 
						|
};
 | 
						|
 | 
						|
class File : public Stream
 | 
						|
{
 | 
						|
public:
 | 
						|
    File(FileImplPtr p = FileImplPtr()) : _p(p) {}
 | 
						|
 | 
						|
    // Print methods:
 | 
						|
    size_t write(uint8_t) override;
 | 
						|
    size_t write(const uint8_t *buf, size_t size) override;
 | 
						|
 | 
						|
    // Stream methods:
 | 
						|
    int available() override;
 | 
						|
    int read() override;
 | 
						|
    int peek() override;
 | 
						|
    void flush() override;
 | 
						|
    size_t readBytes(char *buffer, size_t length)  override {
 | 
						|
        return read((uint8_t*)buffer, length);
 | 
						|
    }
 | 
						|
    size_t read(uint8_t* buf, size_t size);
 | 
						|
    bool seek(uint32_t pos, SeekMode mode);
 | 
						|
    bool seek(uint32_t pos) {
 | 
						|
        return seek(pos, SeekSet);
 | 
						|
    }
 | 
						|
    size_t position() const;
 | 
						|
    size_t size() const;
 | 
						|
    void close();
 | 
						|
    operator bool() const;
 | 
						|
    const char* name() const;
 | 
						|
    String readString() override;
 | 
						|
	
 | 
						|
protected:
 | 
						|
    FileImplPtr _p;
 | 
						|
};
 | 
						|
 | 
						|
class Dir {
 | 
						|
public:
 | 
						|
    Dir(DirImplPtr impl = DirImplPtr()): _impl(impl) { }
 | 
						|
 | 
						|
    File openFile(const char* mode);
 | 
						|
    String fileName();
 | 
						|
    size_t fileSize();
 | 
						|
    bool next();
 | 
						|
 | 
						|
protected:
 | 
						|
    DirImplPtr _impl;
 | 
						|
};
 | 
						|
 | 
						|
struct FSInfo {
 | 
						|
    size_t totalBytes;
 | 
						|
    size_t usedBytes;
 | 
						|
    size_t blockSize;
 | 
						|
    size_t pageSize;
 | 
						|
    size_t maxOpenFiles;
 | 
						|
    size_t maxPathLength;
 | 
						|
};
 | 
						|
 | 
						|
class FS
 | 
						|
{
 | 
						|
public:
 | 
						|
    FS(FSImplPtr impl) : _impl(impl) { }
 | 
						|
 | 
						|
    bool begin();
 | 
						|
    void end();
 | 
						|
    
 | 
						|
    bool format();
 | 
						|
    bool info(FSInfo& info);
 | 
						|
 | 
						|
    File open(const char* path, const char* mode);
 | 
						|
    File open(const String& path, const char* mode);
 | 
						|
 | 
						|
    bool exists(const char* path);
 | 
						|
    bool exists(const String& path);
 | 
						|
 | 
						|
    Dir openDir(const char* path);
 | 
						|
    Dir openDir(const String& path);
 | 
						|
 | 
						|
    bool remove(const char* path);
 | 
						|
    bool remove(const String& path);
 | 
						|
 | 
						|
    bool rename(const char* pathFrom, const char* pathTo);
 | 
						|
    bool rename(const String& pathFrom, const String& pathTo);
 | 
						|
 | 
						|
protected:
 | 
						|
    FSImplPtr _impl;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace fs
 | 
						|
 | 
						|
#ifndef FS_NO_GLOBALS
 | 
						|
using fs::FS;
 | 
						|
using fs::File;
 | 
						|
using fs::Dir;
 | 
						|
using fs::SeekMode;
 | 
						|
using fs::SeekSet;
 | 
						|
using fs::SeekCur;
 | 
						|
using fs::SeekEnd;
 | 
						|
using fs::FSInfo;
 | 
						|
#endif //FS_NO_GLOBALS
 | 
						|
 | 
						|
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SPIFFS)
 | 
						|
extern fs::FS SPIFFS;
 | 
						|
#endif
 | 
						|
 | 
						|
#endif //FS_H
 |