From 5a73ea36d8c957c9c1041dcad676c1f6347767c7 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Thu, 3 Jan 2013 11:29:55 +0000 Subject: [PATCH] File system abstract interface added. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5024 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- demos/ARMCM4-STM32F407-DISCOVERY-G++/Makefile | 2 +- demos/ARMCM4-STM32F407-DISCOVERY-G++/main.cpp | 1 + os/fs/fs.hpp | 194 ++++++++++++++++++ readme.txt | 6 + 4 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 os/fs/fs.hpp diff --git a/demos/ARMCM4-STM32F407-DISCOVERY-G++/Makefile b/demos/ARMCM4-STM32F407-DISCOVERY-G++/Makefile index 0dd07d61b..55f9bb261 100644 --- a/demos/ARMCM4-STM32F407-DISCOVERY-G++/Makefile +++ b/demos/ARMCM4-STM32F407-DISCOVERY-G++/Makefile @@ -117,7 +117,7 @@ ASMSRC = $(PORTASM) INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ $(HALINC) $(PLATFORMINC) $(BOARDINC) \ $(CHCPPINC) \ - $(CHIBIOS)/os/various + $(CHIBIOS)/os/various $(CHIBIOS)/os/fs # # Project, sources and paths diff --git a/demos/ARMCM4-STM32F407-DISCOVERY-G++/main.cpp b/demos/ARMCM4-STM32F407-DISCOVERY-G++/main.cpp index 0caee9bc4..3834a1046 100644 --- a/demos/ARMCM4-STM32F407-DISCOVERY-G++/main.cpp +++ b/demos/ARMCM4-STM32F407-DISCOVERY-G++/main.cpp @@ -19,6 +19,7 @@ */ #include "ch.hpp" +#include "fs.hpp" #include "hal.h" #include "test.h" diff --git a/os/fs/fs.hpp b/os/fs/fs.hpp new file mode 100644 index 000000000..599205ff5 --- /dev/null +++ b/os/fs/fs.hpp @@ -0,0 +1,194 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010, + 2011,2012 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT 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. + + ChibiOS/RT 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 . +*/ + +/** + * @file fs.hpp + * @brief File System interfaces header. + * + * @addtogroup fs_interface + * @{ + */ + +#ifndef _FS_HPP_ +#define _FS_HPP_ + +#include + +/** + * @brief No error return code. + */ +#define FILE_OK 0 + +/** + * @brief Error code from the file stream methods. + */ +#define FILE_ERROR 0xFFFFFFFFUL + +namespace chibios_fs { + + /** + * @brief File offset type. + */ + typedef uint32_t fileoffset_t; + + /*------------------------------------------------------------------------* + * chibios_fs::BaseFileStreamInterface * + *------------------------------------------------------------------------*/ + /** + * @brief Interface of an abstract file object. + */ + class BaseFileStreamInterface : public chibios_rt::BaseSequentialStreamInterface { + public: + /** + * @brief File close and object destruction. + * + * @api + */ + virtual ~BaseFileStreamInterface(void) = 0; + + /** + * @brief Returns an implementation dependent error code. + * + * @return An implementation-dependent error code. + * + * @api + */ + virtual uint32_t getAndClearLastError(void) = 0; + + /** + * @brief Returns the current file size. + * + * @return The file size. + * @retval FILE_ERROR if the operation failed. + * + * @api + */ + virtual fileoffset_t getSize(void) = 0; + + /** + * @brief Returns the current file pointer position. + * + * @return The current position inside the file. + * @retval FILE_ERROR if the operation failed. + * + * @api + */ + virtual fileoffset_t getPosition(void) = 0; + + /** + * @brief sets the current file pointer position. + * + * @param[in] offset new absolute position + * @return The operation status. + * @retval FILE_OK if no error. + * @retval FILE_ERROR if the operation failed. + * + * @api + */ + virtual uint32_t setPosition(fileoffset_t offset) = 0; + }; + + /*------------------------------------------------------------------------* + * chibios_fs::BaseFileSystemInterface * + *------------------------------------------------------------------------*/ + /** + * @brief Interface of an abstract file system object. + * @note The interface only exposes common features, the implementing + * classes can offer an extended interface. + */ + class BaseFileSystemInterface { + /** + * @brief File system unmount and object destruction. + */ + virtual ~BaseFileSystemInterface() = 0; + + /** + * @brief Returns an implementation dependent error code. + * + * @return An implementation-dependent error code. + * + * @api + */ + virtual uint32_t getAndClearLastError(void) = 0; + + /** + * @brief Synchronizes caches with media device. + */ + virtual void synchronize(void) = 0; + + /** + * @brief Removes a file. + * + * @param[in] fname file name + * + * @api + */ + virtual void remove(const char *fname) = 0; + + /** + * @brief Opens a file for read and write. + * + * @param[in] fname file name + * @return An interface of a file object. + * @retval NULL if the operation failed. + * + * @api + */ + virtual BaseFileStreamInterface *open(const char *fname) = 0; + + /** + * @brief Opens a file for read only. + * + * @param[in] fname file name + * @return An interface of a file object. + * @retval NULL if the operation failed. + * + * @api + */ + virtual BaseFileStreamInterface *openForRead(const char *fname) = 0; + + /** + * @brief Opens a file for write only. + * + * @param[in] fname file name + * @return An interface of a file object. + * @retval NULL if the operation failed. + * + * @api + */ + virtual BaseFileStreamInterface *openForWrite(const char *fname) = 0; + + /** + * @brief Creates a file and opens it for write only. + * @details If a file with the same name already exists then it is + * overwritten. + * + * @param[in] fname file name + * @return An interface of a file object. + * @retval NULL if the operation failed. + * + * @api + */ + virtual BaseFileStreamInterface *create(const char *fname) = 0; + }; +} +#endif /* _FS_HPP_ */ + +/** @} */ diff --git a/readme.txt b/readme.txt index fc4c0510c..ff4690fd9 100644 --- a/readme.txt +++ b/readme.txt @@ -90,6 +90,12 @@ (backported to 2.4.3). - FIX: Fixed wrong SPI path in platform_f105_f107.mk (bug 3598151). - FIX: Fixed PHY powerdown issues not fixed (bug 3596911). +- NEW: Added an abstract file system interface written in C++, no + implementations yet. + TODO: Create a FatFS wrapper implementing the interface and using a server + thread for synchronization. + TODO: Create an implementation over a read-only file system in code space. + TODO: Create a descendant interface for hyerarchical file systems. - NEW: Added new C++ demo for the STM32F4-Discovery. - NEW: Updated C++ wrapper with a much more logical classes structure. TODO: Opdate older C++ demos.