// Copyright 2011 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program 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 General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// -----------------------------------------------------------------------------
//
// FatFS wrappers.
#ifndef AVRLIBX_FILESYSTEM_FILE_H_
#define AVRLIBX_FILESYSTEM_FILE_H_
#include
#include "avrlibx/avrlibx.h"
#include "avrlibx/filesystem/filesystem.h"
namespace avrlibx {
enum FileAttributes {
FS_READ = FA_READ,
FS_WRITE = FA_WRITE,
FS_OPEN_EXISTING = FA_OPEN_EXISTING,
FS_OPEN_ALWAYS = FA_OPEN_ALWAYS,
FS_CREATE_NEW = FA_CREATE_NEW,
FS_CREATE_ALWAYS = FA_CREATE_ALWAYS
};
class File {
public:
File();
~File();
FilesystemStatus Open(const char* file_name, const char* mode) {
return Open(file_name, mode, 0);
}
FilesystemStatus Open(const char* file_name, uint8_t attributes) {
return Open(file_name, attributes, 0);
}
FilesystemStatus Open(
const char* file_name,
const char* mode,
uint16_t retry_timeout);
FilesystemStatus Open(
const char* file_name,
uint8_t attributes,
uint16_t retry_timeout);
FilesystemStatus Seek(uint32_t position);
FilesystemStatus Close();
FilesystemStatus Truncate();
FilesystemStatus Sync();
FilesystemStatus Read(uint8_t* data, uint16_t size, uint16_t* read);
FilesystemStatus Write(
const uint8_t* data,
uint16_t size,
uint16_t* written);
FilesystemStatus Write(
const char* data,
uint16_t size,
uint16_t* written) {
return Write(static_cast(static_cast(
data)), size, written);
}
FilesystemStatus Read(
char* data,
uint16_t size,
uint16_t* read) {
return Read(static_cast(static_cast(
data)), size, read);
}
uint16_t Read(uint8_t* data, uint16_t size) {
uint16_t read;
return Read(data, size, &read) == FS_OK ? read : 0;
}
uint16_t Write(const uint8_t* data, uint16_t size) {
uint16_t written;
return Write(data, size, &written) == FS_OK ? written : 0;
}
uint8_t eof() const { return f_eof(&f_); }
uint8_t error() const { return f_error(&f_); }
uint32_t tell() const { return f_tell(&f_); }
uint32_t size() const { return f_size(&f_); }
private:
uint8_t opened_;
FIL f_;
DISALLOW_COPY_AND_ASSIGN(File);
};
} // namespace avrlibx
#endif // AVRLIBX_FILESYSTEM_FILE_H_