diff options
Diffstat (limited to 'os/ex/subsystems/mfs')
-rw-r--r-- | os/ex/subsystems/mfs/mfs.c | 104 | ||||
-rw-r--r-- | os/ex/subsystems/mfs/mfs.h | 111 | ||||
-rw-r--r-- | os/ex/subsystems/mfs/mfs.mk | 5 |
3 files changed, 220 insertions, 0 deletions
diff --git a/os/ex/subsystems/mfs/mfs.c b/os/ex/subsystems/mfs/mfs.c new file mode 100644 index 000000000..7380c34a3 --- /dev/null +++ b/os/ex/subsystems/mfs/mfs.c @@ -0,0 +1,104 @@ +/* + Managed Flash Storage - Copyright (C) 2016 Giovanni Di Sirio + + This file is part of ChibiOS. + + ChibiOS 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 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 <http://www.gnu.org/licenses/>. +*/ + +/** + * @file mfs.c + * @brief Managed Flash Storage module code. + * + * @addtogroup mfs + * @{ + */ + +#include "hal.h" + +#include "mfs.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Initializes an instance. + * + * @param[out] devp pointer to the @p MFSDriver object + * + * @init + */ +void mfsObjectInit(MFSDriver *devp) { + + osalDbgCheck(devp != NULL); + + devp->state = MFS_STOP; + devp->config = NULL; +} + +/** + * @brief Configures and activates a MFS driver. + * + * @param[in] devp pointer to the @p MFSDriver object + * @param[in] config pointer to the configuration + * + * @api + */ +void mfsStart(MFSDriver *devp, const MFSConfig *config) { + + osalDbgCheck((devp != NULL) && (config != NULL)); + osalDbgAssert(devp->state != MFS_UNINIT, "invalid state"); + + if (devp->state == MFS_STOP) { + + devp->state = MFS_READY; + } +} + +/** + * @brief Deactivates a MFS driver. + * + * @param[in] devp pointer to the @p MFSDriver object + * + * @api + */ +void mfsStop(MFSDriver *devp) { + + osalDbgCheck(devp != NULL); + osalDbgAssert(devp->state != MFS_UNINIT, "invalid state"); + + if (devp->state != MFS_STOP) { + + devp->state = MFS_STOP; + } +} + +/** @} */ diff --git a/os/ex/subsystems/mfs/mfs.h b/os/ex/subsystems/mfs/mfs.h new file mode 100644 index 000000000..a47c25c47 --- /dev/null +++ b/os/ex/subsystems/mfs/mfs.h @@ -0,0 +1,111 @@ +/* + Managed Flash Storage - Copyright (C) 2016 Giovanni Di Sirio + + This file is part of ChibiOS. + + ChibiOS 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 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 <http://www.gnu.org/licenses/>. +*/ + +/** + * @file mfs.h + * @brief Managed Flash Storage module header. + * + * @{ + */ + +#ifndef MFS_H +#define MFS_H + +#include "hal_flash.h" + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @name Configuration options + * @{ + */ +/** @} */ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Driver state machine possible states. + */ +typedef enum { + MFS_UNINIT = 0, + MFS_STOP = 1, + MFS_READY = 2, + MFS_ACTIVE = 3 +} mfs_state_t; + +/** + * @brief Type of a MFS configuration structure. + */ +typedef struct { + /** + * @brief Flash driver associated to this MFS instance. + */ + BaseFlash *flashp; +} MFSConfig; + +/** + * @extends BaseFlash + * + * @brief Type of an MFS instance. + */ +typedef struct { + /** + * @brief Driver state. + */ + mfs_state_t state; + /** + * @brief Current configuration data. + */ + const MFSConfig *config; +} MFSDriver; + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void mfsObjectInit(MFSDriver *devp); + void mfsStart(MFSDriver *devp, const MFSConfig *config); + void mfsStop(MFSDriver *devp); +#ifdef __cplusplus +} +#endif + +#endif /* MFS_H */ + +/** @} */ + diff --git a/os/ex/subsystems/mfs/mfs.mk b/os/ex/subsystems/mfs/mfs.mk new file mode 100644 index 000000000..488977e70 --- /dev/null +++ b/os/ex/subsystems/mfs/mfs.mk @@ -0,0 +1,5 @@ +# List of all the MFS subsystem files.
+MFSSRC := $(CHIBIOS)/os/ex/subsystems/mfs/mfs.c
+
+# Required include directories
+MFSINC := $(CHIBIOS)/os/ex/subsystems/mfs
\ No newline at end of file |