luat_fs.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /******************************************************************************
  2. * ADC设备操作抽象层
  3. * @author wendal
  4. * @since 0.1.5
  5. *****************************************************************************/
  6. #ifndef LUAT_FS_H
  7. #define LUAT_FS_H
  8. //#include "luat_base.h"
  9. #include "stdio.h"
  10. #ifndef LUAT_WEAK
  11. #define LUAT_WEAK __attribute__((weak))
  12. #endif
  13. typedef struct luat_fs_conf {
  14. char* busname;
  15. char* type;
  16. char* filesystem;
  17. const char* mount_point;
  18. } luat_fs_conf_t;
  19. typedef struct luat_fs_info
  20. {
  21. char filesystem[8]; // 文件系统类型
  22. unsigned char type; // 连接方式, 片上,spi flash, tf卡等
  23. size_t total_block;
  24. size_t block_used;
  25. size_t block_size;
  26. }luat_fs_info_t;
  27. int luat_fs_init(void);
  28. int luat_fs_mkfs(luat_fs_conf_t *conf);
  29. int luat_fs_mount(luat_fs_conf_t *conf);
  30. int luat_fs_umount(luat_fs_conf_t *conf);
  31. int luat_fs_info(const char* path, luat_fs_info_t *conf);
  32. FILE* luat_fs_fopen(const char *filename, const char *mode);
  33. int luat_fs_getc(FILE* stream);
  34. int luat_fs_fseek(FILE* stream, long int offset, int origin);
  35. int luat_fs_ftell(FILE* stream);
  36. int luat_fs_fclose(FILE* stream);
  37. int luat_fs_feof(FILE* stream);
  38. int luat_fs_ferror(FILE *stream);
  39. size_t luat_fs_fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  40. size_t luat_fs_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
  41. int luat_fs_remove(const char *filename);
  42. int luat_fs_rename(const char *old_filename, const char *new_filename);
  43. size_t luat_fs_fsize(const char *filename);
  44. int luat_fs_fexist(const char *filename);
  45. int luat_fs_readline(char * buf, int bufsize, FILE * stream);
  46. // TODO 文件夹相关的API
  47. //int luat_fs_diropen(char const* _FileName);
  48. typedef struct luat_fs_dirent
  49. {
  50. unsigned char d_type;
  51. char d_name[255];
  52. }luat_fs_dirent_t;
  53. int luat_fs_mkdir(char const* _DirName);
  54. int luat_fs_rmdir(char const* _DirName);
  55. int luat_fs_lsdir(char const* _DirName, luat_fs_dirent_t* ents, size_t offset, size_t len);
  56. #ifdef LUAT_USE_FS_VFS
  57. #ifndef LUAT_VFS_FILESYSTEM_MAX
  58. #define LUAT_VFS_FILESYSTEM_MAX 4
  59. #endif
  60. #ifndef LUAT_VFS_FILESYSTEM_MOUNT_MAX
  61. #define LUAT_VFS_FILESYSTEM_MOUNT_MAX 4
  62. #endif
  63. #ifndef LUAT_VFS_FILESYSTEM_FD_MAX
  64. #define LUAT_VFS_FILESYSTEM_FD_MAX 16
  65. #endif
  66. struct luat_vfs_file_opts {
  67. FILE* (*fopen)(void* fsdata, const char *filename, const char *mode);
  68. int (*getc)(void* fsdata, FILE* stream);
  69. int (*fseek)(void* fsdata, FILE* stream, long int offset, int origin);
  70. int (*ftell)(void* fsdata, FILE* stream);
  71. int (*fclose)(void* fsdata, FILE* stream);
  72. int (*feof)(void* fsdata, FILE* stream);
  73. int (*ferror)(void* fsdata, FILE *stream);
  74. size_t (*fread)(void* fsdata, void *ptr, size_t size, size_t nmemb, FILE *stream);
  75. size_t (*fwrite)(void* fsdata, const void *ptr, size_t size, size_t nmemb, FILE *stream);
  76. };
  77. struct luat_vfs_filesystem_opts {
  78. int (*remove)(void* fsdata, const char *filename);
  79. int (*rename)(void* fsdata, const char *old_filename, const char *new_filename);
  80. size_t (*fsize)(void* fsdata, const char *filename);
  81. int (*fexist)(void* fsdata, const char *filename);
  82. int (*mkfs)(void* fsdata, luat_fs_conf_t *conf);
  83. int (*mount)(void** fsdata, luat_fs_conf_t *conf);
  84. int (*umount)(void* fsdata, luat_fs_conf_t *conf);
  85. int (*info)(void* fsdata, const char* path, luat_fs_info_t *conf);
  86. int (*mkdir)(void* fsdata, char const* _DirName);
  87. int (*rmdir)(void* fsdata, char const* _DirName);
  88. int (*lsdir)(void* fsdata, char const* _DirName, luat_fs_dirent_t* ents, size_t offset, size_t len);
  89. };
  90. typedef struct luat_vfs_filesystem {
  91. char name[16];
  92. struct luat_vfs_filesystem_opts opts;
  93. struct luat_vfs_file_opts fopts;
  94. }luat_vfs_filesystem_t;
  95. typedef struct luat_vfs_mount {
  96. struct luat_vfs_filesystem *fs;
  97. void *userdata;
  98. char prefix[16];
  99. int ok;
  100. } luat_vfs_mount_t;
  101. typedef struct luat_vfs_fd{
  102. FILE* fd;
  103. luat_vfs_mount_t *fsMount;
  104. }luat_vfs_fd_t;
  105. typedef struct luat_vfs
  106. {
  107. struct luat_vfs_filesystem* fsList[LUAT_VFS_FILESYSTEM_MAX];
  108. luat_vfs_mount_t mounted[LUAT_VFS_FILESYSTEM_MOUNT_MAX];
  109. luat_vfs_fd_t fds[LUAT_VFS_FILESYSTEM_FD_MAX+1];
  110. }luat_vfs_t;
  111. int luat_vfs_init(void* params);
  112. int luat_vfs_reg(const struct luat_vfs_filesystem* fs);
  113. FILE* luat_vfs_add_fd(FILE* fd, luat_vfs_mount_t * mount);
  114. int luat_vfs_rm_fd(FILE* fd);
  115. const char* luat_vfs_mmap(FILE* fd);
  116. #endif
  117. #endif