git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15154 27425a3e-05d8-49a3-a47f-9c15f0e5edd8

This commit is contained in:
Giovanni Di Sirio 2021-11-29 15:32:00 +00:00
parent ab568fd909
commit 1b3d34696d
6 changed files with 73 additions and 65 deletions

View File

@ -111,6 +111,13 @@
#define DRV_CFG_FATFS_FILE_NODES_NUM 2
#endif
/**
* @brief Mount mode for FatFS.
*/
#if !defined(DRV_CFG_FATFS_MOUNT_MODE) || defined(__DOXYGEN__)
#define DRV_CFG_FATFS_MOUNT_MODE 1
#endif
/** @} */
#endif /* VFSCONF_H */

View File

@ -111,6 +111,13 @@
#define DRV_CFG_FATFS_FILE_NODES_NUM 2
#endif
/**
* @brief Mount mode for FatFS.
*/
#if !defined(DRV_CFG_FATFS_MOUNT_MODE) || defined(__DOXYGEN__)
#define DRV_CFG_FATFS_MOUNT_MODE 1
#endif
/** @} */
#endif /* VFSCONF_H */

View File

@ -229,7 +229,7 @@ int main(void) {
sdStart(&PORTAB_SD1, NULL);
nullObjectInit(&nullstream);
/* Initializing an overlay VFS object as a root, bo overlaid driver,
/* Initializing an overlay VFS object as a root, no overlaid driver,
no need for a name.*/
drvOverlayObjectInit(&vfs_root, NULL, "");

View File

@ -34,58 +34,6 @@
/* Module local definitions. */
/*===========================================================================*/
/**
* @brief Number of directory nodes pre-allocated in the pool.
*/
#define DRV_DIR_NODES_NUM 1
/**
* @brief Number of file nodes pre-allocated in the pool.
*/
#define DRV_FILE_NODES_NUM 2
/**
* @brief @p vfs_fatfs_driver_t specific methods.
*/
#define __vfs_fatfs_driver_methods \
__vfs_driver_methods
/**
* @brief @p vfs_fatfs_driver_t specific data.
*/
#define __vfs_fatfs_driver_data \
__vfs_driver_data \
memory_pool_t file_nodes_pool; \
memory_pool_t dir_nodes_pool; \
memory_pool_t info_nodes_pool;
/**
* @brief @p vfs_fatfs_dir_node_t specific methods.
*/
#define __vfs_fatfs_dir_node_methods \
__vfs_directory_node_methods
/**
* @brief @p vfs_fatfs_dir_node_t specific data.
*/
#define __vfs_fatfs_dir_node_data \
__vfs_directory_node_data \
DIR dir;
/**
* @brief @p vfs_fatfs_file_node_t specific methods.
*/
#define __vfs_fatfs_file_node_methods \
__vfs_file_node_methods
/**
* @brief @p vfs_fatfs_file_node_t specific data.
*/
#define __vfs_fatfs_file_node_data \
__vfs_file_node_data \
FIL file; \
BaseSequentialStream *stream;
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
@ -139,8 +87,8 @@ static const struct vfs_fatfs_file_node_vmt file_node_vmt = {
.file_getsize = node_file_getsize
};
static vfs_fatfs_dir_node_t drv_dir_nodes[DRV_DIR_NODES_NUM];
static vfs_fatfs_file_node_t drv_file_nodes[DRV_FILE_NODES_NUM];
static vfs_fatfs_dir_node_t drv_dir_nodes[DRV_CFG_FATFS_DIR_NODES_NUM];
static vfs_fatfs_file_node_t drv_file_nodes[DRV_CFG_FATFS_FILE_NODES_NUM];
/*===========================================================================*/
/* Module local functions. */
@ -335,19 +283,19 @@ static void node_file_release(void *instance) {
static BaseSequentialStream *node_file_get_stream(void *instance) {
vfs_fatfs_file_node_t *fffnp = (vfs_fatfs_file_node_t *)instance;
return fffnp->stream;
return &fffnp->stream;
}
static ssize_t node_file_read(void *instance, uint8_t *buf, size_t n) {
vfs_fatfs_file_node_t *fffnp = (vfs_fatfs_file_node_t *)instance;
return streamRead(fffnp->stream, buf, n);
return streamRead(&fffnp->stream, buf, n);
}
static ssize_t node_file_write(void *instance, const uint8_t *buf, size_t n) {
vfs_fatfs_file_node_t *fffnp = (vfs_fatfs_file_node_t *)instance;
return streamWrite(fffnp->stream, buf, n);
return streamWrite(&fffnp->stream, buf, n);
}
static msg_t node_file_setpos(void *instance, vfs_offset_t offset) {
@ -379,13 +327,13 @@ static vfs_offset_t node_file_getsize(void *instance) {
/**
* @brief VFS FatFS object initialization.
*
* @param[out] vodp pointer to a @p vfs_fatfs_driver_t structure
* @param[out] ffdp pointer to a @p vfs_fatfs_driver_t structure
* @param[in] rootname name to be attributed to this object
* @return A pointer to this initialized object.
*
* @api
*/
vfs_driver_t *drvFatfsObjectInit(vfs_fatfs_driver_t *ffdp,
vfs_driver_t *drvFatFSObjectInit(vfs_fatfs_driver_t *ffdp,
const char *rootname) {
ffdp->vmt = &driver_vmt;
@ -405,12 +353,40 @@ vfs_driver_t *drvFatfsObjectInit(vfs_fatfs_driver_t *ffdp,
/* Preloading pools.*/
chPoolLoadArray(&ffdp->dir_nodes_pool,
drv_dir_nodes,
DRV_DIR_NODES_NUM);
DRV_CFG_FATFS_DIR_NODES_NUM);
chPoolLoadArray(&ffdp->file_nodes_pool,
drv_file_nodes,
DRV_FILE_NODES_NUM);
DRV_CFG_FATFS_FILE_NODES_NUM);
return (vfs_driver_t *)ffdp;
}
/**
* @brief Mounts a FatFS volume.
*
* @param[in] ffdp pointer to a @p vfs_fatfs_driver_t structure
* @return The operation result.
*
* @api
*/
msg_t drvFatFSMount(vfs_fatfs_driver_t *ffdp) {
return translate_error(f_mount(&ffdp->fs,
ffdp->rootname,
DRV_CFG_FATFS_MOUNT_MODE));
}
/**
* @brief Unmounts a FatFS volume.
*
* @param[in] ffdp pointer to a @p vfs_fatfs_driver_t structure
* @return The operation result.
*
* @api
*/
msg_t drvFatFSUnmount(vfs_fatfs_driver_t *ffdp) {
return translate_error(f_unmount(ffdp->rootname));
}
/** @} */

View File

@ -51,6 +51,10 @@
#error "DRV_CFG_FATFS_FILE_NODES_NUM not defined in vfsconf.h"
#endif
#if !defined(DRV_CFG_FATFS_MOUNT_MODE)
#error "DRV_CFG_FATFS_MOUNT_MODE not defined in vfsconf.h"
#endif
#if DRV_CFG_FATFS_DIR_NODES_NUM < 1
#error "invalid value for DRV_CFG_FATFS_DIR_NODES_NUM"
#endif
@ -59,6 +63,10 @@
#error "invalid value for DRV_CFG_FATFS_FILE_NODES_NUM"
#endif
#if (DRV_CFG_FATFS_MOUNT_MODE < 0) || (DRV_CFG_FATFS_MOUNT_MODE > 1)
#error "invalid value for DRV_CFG_FATFS_MOUNT_MODE"
#endif
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
@ -106,7 +114,7 @@ typedef struct vfs_fatfs_dir_node {
#define __vfs_fatfs_file_node_data \
__vfs_file_node_data \
FIL file; \
BaseSequentialStream *stream;
BaseSequentialStream stream;
/**
* @brief @p vfs_fatfs_file_node_t virtual methods table.
@ -139,7 +147,8 @@ typedef struct vfs_fatfs_file_node {
__vfs_driver_data \
memory_pool_t file_nodes_pool; \
memory_pool_t dir_nodes_pool; \
memory_pool_t info_nodes_pool;
memory_pool_t info_nodes_pool; \
FATFS fs;
/**
* @brief @p vfs_fatfs_driver_t virtual methods table.
@ -170,8 +179,10 @@ typedef struct vfs_drv_streams {
#ifdef __cplusplus
extern "C" {
#endif
vfs_driver_t *drvFatfsObjectInit(vfs_fatfs_driver_t *ffdp,
vfs_driver_t *drvFatFSObjectInit(vfs_fatfs_driver_t *ffdp,
const char *rootname);
msg_t drvFatFSMount(vfs_fatfs_driver_t *ffdp);
msg_t drvFatFSUnmount(vfs_fatfs_driver_t *ffdp);
#ifdef __cplusplus
}
#endif

View File

@ -111,6 +111,13 @@
#define DRV_CFG_FATFS_FILE_NODES_NUM 2
#endif
/**
* @brief Mount mode for FatFS.
*/
#if !defined(DRV_CFG_FATFS_MOUNT_MODE) || defined(__DOXYGEN__)
#define DRV_CFG_FATFS_MOUNT_MODE 1
#endif
/** @} */
#endif /* VFSCONF_H */