1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/sys/include/fs/devfs.h

95 lines
2.2 KiB
C

/*
* Copyright (C) 2016 Eistec AB
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup sys_fs_devfs DevFS device file system
* @ingroup sys_fs
* @brief Dynamic device file system
*
* This file system implementation allows devices to register file names for
* easier access to device drivers from shell commands etc.
*
* The idea is similar to the /dev directory on Unix.
*
* @{
* @file
* @brief DevFS public API
* @author Joakim Nohlgård <joakim.nohlgard@eistec.se>
*/
#ifndef FS_DEVFS_H
#define FS_DEVFS_H
#include "clist.h"
#include "vfs.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief DevFS node typedef
*/
typedef struct devfs devfs_t;
/**
* @brief A device "file" consists of a file name and an opaque pointer to device driver private data
*
* The file system is implemented as a linked list.
*/
struct devfs {
clist_node_t list_entry; /**< List item entry */
const char *path; /**< File system relative path to this node */
const vfs_file_ops_t *f_op; /**< Pointer to file operations table for this device */
void *private_data; /**< Pointer to device driver specific data */
};
/**
* @brief DevFS file system driver
*
* For use with vfs_mount
*/
extern const vfs_file_system_t devfs_file_system;
/**
* @brief Register a node in DevFS
*
* The node will immediately become available to @c vfs_open, if DevFS is already
* mounted somewhere.
*
* If DevFS is not mounted, the node will be registered and will become
* available to @c vfs_open when DevFS is mounted.
*
* @param[in] node DevFS node to register
*
* @return 0 on success
* @return <0 on error
*/
int devfs_register(devfs_t *node);
/**
* @brief Remove a registration from DevFS
*
* The node will no longer be available to @c vfs_open, but any already opened FDs
* will remain open.
*
* @param[in] node DevFS node to unregister
*
* @return 0 on success
* @return <0 on error
*/
int devfs_unregister(devfs_t *node);
#ifdef __cplusplus
}
#endif
#endif /* FS_DEVFS_H */
/** @} */