xref: /nrf52832-nimble/rt-thread/components/dfs/include/dfs.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2005-02-22     Bernard      The first version.
9*10465441SEvalZero  */
10*10465441SEvalZero 
11*10465441SEvalZero #ifndef __DFS_H__
12*10465441SEvalZero #define __DFS_H__
13*10465441SEvalZero 
14*10465441SEvalZero #include <stdio.h>
15*10465441SEvalZero #include <stdint.h>
16*10465441SEvalZero #include <stdlib.h>
17*10465441SEvalZero #include <string.h>
18*10465441SEvalZero 
19*10465441SEvalZero #include <time.h>
20*10465441SEvalZero #include <rtthread.h>
21*10465441SEvalZero #include <rtdevice.h>
22*10465441SEvalZero 
23*10465441SEvalZero #ifndef DFS_FILESYSTEMS_MAX
24*10465441SEvalZero #define DFS_FILESYSTEMS_MAX     2
25*10465441SEvalZero #endif
26*10465441SEvalZero 
27*10465441SEvalZero #ifndef DFS_FD_MAX
28*10465441SEvalZero #define DFS_FD_MAX              4
29*10465441SEvalZero #endif
30*10465441SEvalZero 
31*10465441SEvalZero /*
32*10465441SEvalZero  * skip stdin/stdout/stderr normally
33*10465441SEvalZero  */
34*10465441SEvalZero #ifndef DFS_FD_OFFSET
35*10465441SEvalZero #define DFS_FD_OFFSET           3
36*10465441SEvalZero #endif
37*10465441SEvalZero 
38*10465441SEvalZero #ifndef DFS_PATH_MAX
39*10465441SEvalZero #define DFS_PATH_MAX             256
40*10465441SEvalZero #endif
41*10465441SEvalZero 
42*10465441SEvalZero #ifndef SECTOR_SIZE
43*10465441SEvalZero #define SECTOR_SIZE              512
44*10465441SEvalZero #endif
45*10465441SEvalZero 
46*10465441SEvalZero #ifndef DFS_FILESYSTEM_TYPES_MAX
47*10465441SEvalZero #define DFS_FILESYSTEM_TYPES_MAX 2
48*10465441SEvalZero #endif
49*10465441SEvalZero 
50*10465441SEvalZero #define DFS_FS_FLAG_DEFAULT     0x00    /* default flag */
51*10465441SEvalZero #define DFS_FS_FLAG_FULLPATH    0x01    /* set full path to underlaying file system */
52*10465441SEvalZero 
53*10465441SEvalZero /* File types */
54*10465441SEvalZero #define FT_REGULAR               0   /* regular file */
55*10465441SEvalZero #define FT_SOCKET                1   /* socket file  */
56*10465441SEvalZero #define FT_DIRECTORY             2   /* directory    */
57*10465441SEvalZero #define FT_USER                  3   /* user defined */
58*10465441SEvalZero 
59*10465441SEvalZero /* File flags */
60*10465441SEvalZero #define DFS_F_OPEN              0x01000000
61*10465441SEvalZero #define DFS_F_DIRECTORY         0x02000000
62*10465441SEvalZero #define DFS_F_EOF               0x04000000
63*10465441SEvalZero #define DFS_F_ERR               0x08000000
64*10465441SEvalZero 
65*10465441SEvalZero #ifdef __cplusplus
66*10465441SEvalZero extern "C" {
67*10465441SEvalZero #endif
68*10465441SEvalZero 
69*10465441SEvalZero struct statfs
70*10465441SEvalZero {
71*10465441SEvalZero     size_t f_bsize;   /* block size */
72*10465441SEvalZero     size_t f_blocks;  /* total data blocks in file system */
73*10465441SEvalZero     size_t f_bfree;   /* free blocks in file system */
74*10465441SEvalZero };
75*10465441SEvalZero 
76*10465441SEvalZero struct dirent
77*10465441SEvalZero {
78*10465441SEvalZero     uint8_t d_type;           /* The type of the file */
79*10465441SEvalZero     uint8_t d_namlen;         /* The length of the not including the terminating null file name */
80*10465441SEvalZero     uint16_t d_reclen;        /* length of this record */
81*10465441SEvalZero     char d_name[DFS_PATH_MAX];   /* The null-terminated file name */
82*10465441SEvalZero };
83*10465441SEvalZero 
84*10465441SEvalZero struct dfs_fdtable
85*10465441SEvalZero {
86*10465441SEvalZero     uint32_t maxfd;
87*10465441SEvalZero     struct dfs_fd **fds;
88*10465441SEvalZero };
89*10465441SEvalZero 
90*10465441SEvalZero /* Initialization of dfs */
91*10465441SEvalZero int dfs_init(void);
92*10465441SEvalZero 
93*10465441SEvalZero char *dfs_normalize_path(const char *directory, const char *filename);
94*10465441SEvalZero const char *dfs_subdir(const char *directory, const char *filename);
95*10465441SEvalZero 
96*10465441SEvalZero void dfs_lock(void);
97*10465441SEvalZero void dfs_unlock(void);
98*10465441SEvalZero 
99*10465441SEvalZero /* FD APIs */
100*10465441SEvalZero int fd_new(void);
101*10465441SEvalZero struct dfs_fd *fd_get(int fd);
102*10465441SEvalZero void fd_put(struct dfs_fd *fd);
103*10465441SEvalZero int fd_is_open(const char *pathname);
104*10465441SEvalZero 
105*10465441SEvalZero struct dfs_fdtable* dfs_fdtable_get(void);
106*10465441SEvalZero 
107*10465441SEvalZero #ifdef __cplusplus
108*10465441SEvalZero }
109*10465441SEvalZero #endif
110*10465441SEvalZero 
111*10465441SEvalZero #endif
112