Tentative VFS subsystem.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15114 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
Giovanni Di Sirio 2021-11-19 16:24:21 +00:00
parent 1566238b27
commit 656692ac4d
7 changed files with 535 additions and 0 deletions

84
os/vfs/include/vfs.h Normal file
View File

@ -0,0 +1,84 @@
/*
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014,
2015,2016,2017,2018,2019,2020,2021 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 version 3 of the License.
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 vfs/include/vfs.h
* @brief VFS main header file.
* @details Main header of the ChibiOS Virtual File System.
*
* @addtogroup VFS
* @{
*/
#ifndef VFS_H
#define VFS_H
/**
* @brief ChibiOS/VFS identification macro.
*/
#define __CHIBIOS_VFS__
/**
* @brief Stable release flag.
*/
#define CH_VFS_STABLE 0
/**
* @name ChibiOS/VFS version identification
* @{
*/
/**
* @brief Kernel version string.
*/
#define CH_VFS_VERSION "1.0.0"
/**
* @brief Kernel version major number.
*/
#define CH_VFS_MAJOR 1
/**
* @brief Kernel version minor number.
*/
#define CH_VFS_MINOR 0
/**
* @brief Kernel version patch number.
*/
#define CH_VFS_PATCH 0
/** @} */
/* Dependencies.*/
#include "ch.h"
/* License.*/
#include "chlicense.h"
/* Configuration headers, checks and licensing restrictions.*/
#include "vfsconf.h"
#include "vfschecks.h"
/* Base VFS headers.*/
#include "vfsnodes.h"
#include "vfsdrivers.h"
#include "vfssystem.h"
#endif /* VFS_H */
/** @} */

View File

@ -0,0 +1,82 @@
/*
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014,
2015,2016,2017,2018,2019,2020,2021 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 version 3 of the License.
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 vfs/include/vfschchecks.h
* @brief Configuration file checks header.
*
* @addtogroup VFS_CHECKS
* @details This module performs a series of checks on configuration data,
* it is able to detect and reject obsolete or incomplete
* @p vfsconf.h files.
* @{
*/
#ifndef VFSCHECKS_H
#define VFSCHECKS_H
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/* Configuration file checks.*/
#if !defined(_CHIBIOS_VFS_CONF_)
#error "invalid configuration file"
#endif
#if !defined(_CHIBIOS_VFS_CONF_VER_1_0_)
#error "obsolete or unknown configuration file"
#endif
/* Configuration options checks.*/
#if !defined(VFS_CFG_MAX_DRIVERS)
#error "VFS_CFG_MAX_DRIVERS not defined in chconf.h"
#endif
#if (VFS_CFG_MAX_DRIVERS < 1) || (VFS_CFG_MAX_DRIVERS > 16)
#error "invalid value for VFS_CFG_MAX_DRIVERS"
#endif
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
#endif /* VFSCHECKS_H */
/** @} */

View File

@ -0,0 +1,97 @@
/*
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014,
2015,2016,2017,2018,2019,2020,2021 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 version 3 of the License.
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 vfs/include/vfsdrivers.h
* @brief VFS drivers header file.
*
* @addtogroup VFS_DRIVERS
* @{
*/
#ifndef VFSDRIVERS_H
#define VFSDRIVERS_H
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/**
* @brief @p vfs_node_t specific methods.
*/
#define __vfs_driver_methods \
/* Instance offset, used for multiple inheritance, normally zero. It
represents the offset between the current object and the container
object*/ \
size_t instance_offset;
/**
* @brief @p vfs_node_t specific data.
*/
#define __vfs_driver_data
/**
* @brief @p vfs_node_t virtual methods table.
*/
struct vfs_driver_vmt {
__vfs_driver_methods
};
/**
* @brief Type of a structure representing a VFS driver.
*/
typedef struct vfs_driver {
/**
* @brief Virtual Methods Table.
*/
const struct vfs_driver_vmt *vmt;
__vfs_driver_data
} vfs_driver_t;
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif /* VFSDRIVERS_H */
/** @} */

118
os/vfs/include/vfsnodes.h Normal file
View File

@ -0,0 +1,118 @@
/*
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014,
2015,2016,2017,2018,2019,2020,2021 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 version 3 of the License.
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 vfs/include/vfsnodes.h
* @brief VFS nodes header file.
*
* @addtogroup VFS_NODES
* @{
*/
#ifndef VFSNODES_H
#define VFSNODES_H
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/* Forward declaration because nodes holds references to drivers.*/
typedef struct vfs_driver vfs_driver_t;
/**
* @brief Type of a VFS node.
*/
typedef enum {
VFS_NODE_TYPE_DIRECTORY = 0,/**< VFS_NODE_TYPE_DIRECTORY */
VFS_NODE_TYPE_FILE = 1 /**< VFS_NODE_TYPE_FILE */
} vfs_node_type_t;
/**
* @brief @p vfs_node_t specific methods.
*/
#define __vfs_node_methods \
/* Instance offset, used for multiple inheritance, normally zero. It
represents the offset between the current object and the container
object*/ \
size_t instance_offset; \
/* Node release, the object is disposed when the counter reaches zero.*/ \
void (*release)(void *instance); \
/* Node type getter function.*/ \
vfs_node_type_t (*get_type)(void *instance); \
/* Node name getter function.*/ \
char (*get_name)(void *instance);
/**
* @brief @p vfs_node_t specific data.
*/
#define __vfs_node_data \
/* Number of references to this node.*/ \
unsigned references_counter; \
/* Driver handling this node.*/ \
vfs_driver_t *driver;
/**
* @brief @p vfs_node_t virtual methods table.
*/
struct vfs_node_vmt {
__vfs_node_methods
};
/**
* @brief Type of a structure representing a VFS node.
*/
typedef struct vfs_node {
/**
* @brief Virtual Methods Table.
*/
const struct vfs_node_vmt *vmt;
__vfs_node_data
} vfs_node_t;
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif /* VFSNODES_H */
/** @} */

105
os/vfs/include/vfssystem.h Normal file
View File

@ -0,0 +1,105 @@
/*
ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013,2014,
2015,2016,2017,2018,2019,2020,2021 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 version 3 of the License.
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 vfs/include/vfssystem.h
* @brief VFS system header file.
*
* @addtogroup VFS_NODES
* @{
*/
#ifndef VFSSYSTEM_H
#define VFSSYSTEM_H
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/**
* @brief @p vfs_system_node_t specific methods.
*/
#define __vfs_system_node_methods \
__vfs_node_methods
/**
* @brief @p vfs_system_node_t specific data.
*/
#define __vfs_system_node_data \
__vfs_node_data
/**
* @brief @p vfs_system_node_t virtual methods table.
*/
struct vfs_system_node_vmt {
__vfs_system_node_methods
};
/**
* @brief Type of a structure representing a VFS system node.
*/
typedef struct vfs_system_node {
/**
* @brief Virtual Methods Table.
*/
const struct vfs_system_node_vmt *vmt;
__vfs_system_node_data
} vfs_system_node_t;
/**
* @brief Type of a structure representing the VFS system.
*/
typedef struct vfs_system {
/**
* @brief Absolute root node.
*/
vfs_node_t *root_node;
} vfs_system_t;
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif /* VFSSYSTEM_H */
/** @} */

View File

@ -0,0 +1,40 @@
/*
ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* @file templates/vfsconf.h
* @brief VFS configuration header.
*
* @addtogroup VFS_CONF
* @{
*/
#ifndef VFSCONF_H
#define VFSCONF_H
#define _CHIBIOS_VFS_CONF_
#define _CHIBIOS_VFS_CONF_VER_1_0_
/**
* @brief Maximum of drivers to be registered in VFS.
*/
#if !defined(VFS_CFG_MAX_DRIVERS) || defined(__DOXYGEN__)
#define VFS_CFG_MAX_DRIVERS 2
#endif
#endif /* VFSCONF_H */
/** @} */

9
os/vfs/vfs.mk Normal file
View File

@ -0,0 +1,9 @@
# List of all the ChibiOS/VFS files.
VFSSRC := #$(CHIBIOS)/os/vfs/src/vfs.c
# Required include directories
VFSINC := $(CHIBIOS)/os/vfs/include
# Shared variables
ALLCSRC += $(VFSSRC)
ALLINC += $(VFSINC)