git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9609 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
Giovanni Di Sirio 2016-06-09 09:29:03 +00:00
parent 5a3cec6d00
commit 562e6c0313
3 changed files with 131 additions and 6 deletions

View File

@ -90,7 +90,7 @@ void mfsStart(MFSDriver *devp, const MFSConfig *config) {
/**
* @brief Deactivates a MFS driver.
*
* @param[in] devp pointer to the @p MFSDriver object
* @param[in] devp pointer to the @p MFSDriver object
*
* @api
*/
@ -105,4 +105,89 @@ void mfsStop(MFSDriver *devp) {
}
}
/**
* @brief Mounts a managed flash storage.
* @details This functions checks the storage internal state and eventually
* performs the required initialization or repair operations.
*
* @param[in] devp pointer to the @p MFSDriver object
*
* @api
*/
mfs_error_t mfsMount(MFSDriver *devp) {
(void)devp;
return MFS_NOERROR;
}
/**
* @brief Unmounts a manage flash storage.
*/
mfs_error_t mfsUnmount(MFSDriver *devp) {
(void)devp;
return MFS_NOERROR;
}
/**
* @brief Retrieves and reads a data record.
*
* @param[in] devp pointer to the @p MFSDriver object
* @param[in] id record numeric identifier
* @param[in,out] np on input is the maximum buffer size, on return it is
* the size of the data copied into the buffer
* @param[in] buffer pointer to a buffer for record data
*
* @api
*/
mfs_error_t mfsReadRecord(MFSDriver *devp, uint32_t id,
uint32_t *np, uint8_t *buffer) {
(void)devp;
(void)id;
(void)np;
(void)buffer;
return MFS_NOERROR;
}
/**
* @brief Creates or updates a data record.
*
* @param[in] devp pointer to the @p MFSDriver object
* @param[in] id record numeric identifier
* @param[in] n size of data to be written, it cannot be zero
* @param[in] buffer pointer to a buffer for record data
*
* @api
*/
mfs_error_t mfsUpdateRecord(MFSDriver *devp, uint32_t id,
uint32_t n, const uint8_t *buffer) {
(void)devp;
(void)id;
(void)n;
(void)buffer;
return MFS_NOERROR;
}
/**
* @brief Erases a data record.
*
* @param[in] devp pointer to the @p MFSDriver object
* @param[in] id record numeric identifier
*
* @api
*/
mfs_error_t mfsEraseRecord(MFSDriver *devp, uint32_t id) {
(void)devp;
(void)id;
return MFS_NOERROR;
}
/** @} */

View File

@ -52,17 +52,32 @@
/*===========================================================================*/
/**
* @brief Driver state machine possible states.
* @brief Type of driver state machine states.
*/
typedef enum {
MFS_UNINIT = 0,
MFS_STOP = 1,
MFS_READY = 2,
MFS_ACTIVE = 3
MFS_MOUNTED = 3,
MFS_ACTIVE = 4
} mfs_state_t;
/**
* @brief Bank header.
* @brief Type of an MFS error code.
* @note Errors are negative integers, informative warnings are positive
* integers.
*/
typedef enum {
MFS_NOERROR = 0,
MFS_REPAIR_WARNING = 1,
MFS_GC_WARNING = 2,
MFS_ID_NOT_FOUND = -1,
MFS_CRC_ERROR = -2,
MFS_FLASH_FAILURE = -3
} mfs_error_t;
/**
* @brief Type of a bank header.
* @note The header resides in the first 16 bytes of a bank extending
* to the next page boundary.
*/
@ -86,7 +101,7 @@ typedef struct {
} mfs_bank_header_t;
/**
* @brief Data block header.
* @brief Type of a data block header.
*/
typedef union {
struct {
@ -119,6 +134,22 @@ typedef struct {
* @brief Flash driver associated to this MFS instance.
*/
BaseFlash *flashp;
/**
* @brief Base sector index for bank 0.
*/
flash_sector_t bank0_start;
/**
* #brief Number of sectors for bank 0.
*/
flash_sector_t bank0_sectors;
/**
* @brief Base sector index for bank 1.
*/
flash_sector_t bank1_start;
/**
* #brief Number of sectors for bank 1.
*/
flash_sector_t bank1_sectors;
} MFSConfig;
/**
@ -151,6 +182,13 @@ extern "C" {
void mfsObjectInit(MFSDriver *devp);
void mfsStart(MFSDriver *devp, const MFSConfig *config);
void mfsStop(MFSDriver *devp);
mfs_error_t mfsMount(MFSDriver *devp);
mfs_error_t mfsUnmount(MFSDriver *devp);
mfs_error_t mfsReadRecord(MFSDriver *devp, uint32_t id,
uint32_t *np, uint8_t *buffer);
mfs_error_t mfsUpdateRecord(MFSDriver *devp, uint32_t id,
uint32_t n, const uint8_t *buffer);
mfs_error_t mfsEraseRecord(MFSDriver *devp, uint32_t id);
#ifdef __cplusplus
}
#endif

View File

@ -99,6 +99,7 @@ include $(CHIBIOS)/os/rt/rt.mk
include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk
# Other files (optional).
include $(CHIBIOS)/os/ex/Micron/m25q.mk
include $(CHIBIOS)/os/ex/subsystems/mfs/mfs.mk
include $(CHIBIOS)/os/hal/lib/streams/streams.mk
# Define linker script file here
@ -115,6 +116,7 @@ CSRC = $(STARTUPSRC) \
$(BOARDSRC) \
$(STREAMSSRC) \
$(M25QSRC) \
$(MFSSRC) \
main.c
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
@ -148,7 +150,7 @@ ASMXSRC = $(STARTUPASM) $(PORTASM) $(OSALASM)
INCDIR = $(CHIBIOS)/os/license \
$(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
$(HALINC) $(PLATFORMINC) $(BOARDINC) $(M25QINC) \
$(STREAMSINC) $(CHIBIOS)/os/various
$(MFSINC) $(STREAMSINC) $(CHIBIOS)/os/various
#
# Project, sources and paths