sdfile.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. #ifndef _SDFILE_H_
  2. #define _SDFILE_H_
  3. #include "typedef.h"
  4. //=======================================================//
  5. // 默认宏配置定义 //
  6. //=======================================================//
  7. #ifndef SDFILE_STORAGE
  8. #define SDFILE_STORAGE 0
  9. #endif /* #ifndef SDFILE_STORAGE */
  10. #define NOR_SDFILE_ENABLE 1
  11. /********* sdfile 文件头 **********/
  12. #define SDFILE_NAME_LEN 16
  13. typedef struct sdfile_file_head {
  14. u16 head_crc;
  15. u16 data_crc;
  16. u32 addr;
  17. u32 len;
  18. u8 attr;
  19. u8 res;
  20. u16 index;
  21. char name[SDFILE_NAME_LEN];
  22. } SDFILE_FILE_HEAD;
  23. #if 0
  24. ////////////////////////////sdfile_file_head成员详细说明///////////////////////////////////////
  25. typedef struct SDFILEJL_FILE_HEAD {
  26. u16 u16Crc; // 结构体自身校验码
  27. u16 u16DataCrc; // 文件数据校验码
  28. u32 u32Address; // 数据存储地址
  29. u32 u32Length; // 数据长度
  30. u8 u8Attribute; // 属性
  31. u8 u8Res; // 保留数据
  32. u16 u16Index; // 文件编号,从大到小排列,编号为0时,代表后面没有文件
  33. char szFileName[16];// 文件名
  34. } JL_SDFILE_HEAD;
  35. ////////////////////////////flash_head成员详细说明///////////////////////////////////////
  36. typedef struct SDFILEJL_FLASH_HEAD_V2 {
  37. u16 u16Crc; // 结构体自身校验码
  38. u16 u16SizeForBurner; // 为烧写器保留的空间大小
  39. char vid[4]; // 存放VID信息,长度是4个byte
  40. u32 u32FlashSize; // FLASH大小,由isd_download计算得出
  41. u8 u8FsVersion; // flash类型:BR18(0)/BR22(1)
  42. u8 u8BlockAlingnModulus;// 对齐系数,对齐的值=对齐系数*256
  43. u8 u8Res; // 保留
  44. u8 u8SpecialOptFlag; // 用于标记是否需要生成2种flash格式的标记位,目前只用1位
  45. char pid[16]; // 存放PID信息,长度是16个byte
  46. } SDFILEJL_FLASH_HEAD_V2;
  47. #endif
  48. struct sdfile_dir {
  49. u16 file_num;
  50. struct sdfile_file_head head;
  51. };
  52. enum sdfile_err_table {
  53. SDFILE_DIR_NOT_EXIST = -0xFF,
  54. SDFILE_FILE_NOT_EXIST,
  55. SDFILE_MALLOC_ERR,
  56. SDFILE_VM_NOT_FIND,
  57. SDFILE_DATA_CRC_ERR,
  58. SDFILE_WRITE_AREA_NEED_ERASE_ERR,
  59. SDFILE_SUSS = 0,
  60. SDFILE_END,
  61. };
  62. #if (VFS_ENABLE == 1)
  63. #if SDFILE_STORAGE
  64. #define SDFILE_MAX_DEEPTH 2
  65. struct sdfile_folder {
  66. u32 saddr;
  67. u32 addr;
  68. u32 len;
  69. };
  70. struct sdfile_scn {
  71. u8 subpath;
  72. u8 cycle_mode;
  73. u8 attr;
  74. u8 deepth;
  75. u16 dirCounter;
  76. u16 fileCounter;
  77. u16 fileNumber; // 当前文件序号
  78. u16 totalFileNumber;
  79. u16 last_file_number;
  80. u16 fileTotalInDir; // 当前目录的根下有效文件的个数
  81. u16 fileTotalOutDir; // 当前目录前的文件总数,目录循环模式下,需要用它来计算文件序号
  82. u32 sclust_id;
  83. const char *ftypes;
  84. struct sdfile_file_head head;
  85. struct sdfile_folder folder[SDFILE_MAX_DEEPTH];
  86. };
  87. #endif
  88. typedef struct sdfile_file_t {
  89. u32 fptr;
  90. struct sdfile_file_head head;
  91. #if SDFILE_STORAGE
  92. struct sdfile_scn *pscn;
  93. #endif
  94. } SDFILE;
  95. #else
  96. typedef struct sdfile_file_t {
  97. u32 fptr;
  98. struct sdfile_file_head head;
  99. } SDFILE, FILE;
  100. struct vfs_attr {
  101. u8 attr; //属性
  102. u32 fsize; //文件大小
  103. u32 sclust; //地址
  104. };
  105. SDFILE *sdfile_open(const char *path, const char *mode);
  106. int sdfile_read(SDFILE *fp, void *buf, u32 len);
  107. int sdfile_write(SDFILE *fp, void *buf, u32 len);
  108. int sdfile_seek(SDFILE *fp, u32 offset, u32 fromwhere);
  109. int sdfile_close(SDFILE *fp);
  110. int sdfile_pos(SDFILE *fp);
  111. int sdfile_len(SDFILE *fp);
  112. int sdfile_get_name(SDFILE *fp, u8 *name, int len);
  113. int sdfile_get_attrs(SDFILE *fp, struct vfs_attr *attr);
  114. #if 0
  115. #define fopen sdfile_open
  116. #define fread sdfile_read
  117. #define fseek sdfile_seek
  118. #define fclose sdfile_close
  119. #define fwrite sdfile_write
  120. #define flen sdfile_len
  121. #define fpos sdfile_pos
  122. #define fget_name sdfile_get_name
  123. #define fget_attrs sdfile_get_attrs
  124. #else
  125. static inline SDFILE *fopen(const char *path, const char *mode)
  126. {
  127. return sdfile_open(path, mode);
  128. }
  129. static inline int fread(SDFILE *fp, void *buf, u32 len)
  130. {
  131. return sdfile_read(fp, buf, len);
  132. }
  133. static inline int fwrite(SDFILE *fp, void *buf, u32 len)
  134. {
  135. return sdfile_write(fp, buf, len);
  136. }
  137. static inline int fseek(SDFILE *fp, u32 offset, u32 fromwhere)
  138. {
  139. return sdfile_seek(fp, offset, fromwhere);
  140. }
  141. static inline int fclose(SDFILE *fp)
  142. {
  143. return sdfile_close(fp);
  144. }
  145. static inline int fpos(SDFILE *fp)
  146. {
  147. return sdfile_pos(fp);
  148. }
  149. static inline int flen(SDFILE *fp)
  150. {
  151. return sdfile_len(fp);
  152. }
  153. static inline int fget_name(SDFILE *fp, u8 *name, int len)
  154. {
  155. return sdfile_get_name(fp, name, len);
  156. }
  157. static inline int fget_attrs(SDFILE *fp, struct vfs_attr *attr)
  158. {
  159. return sdfile_get_attrs(fp, attr);
  160. }
  161. #endif
  162. #endif /* VFS_ENABLE */
  163. int sdfile_delete_data(SDFILE *fp);
  164. #define fdel_data sdfile_delete_data
  165. #ifndef SDFILE_MOUNT_PATH
  166. #define SDFILE_MOUNT_PATH "mnt/sdfile"
  167. #endif /* #ifndef SDFILE_MOUNT_PATH */
  168. #if (USE_SDFILE_NEW)
  169. #ifndef SDFILE_APP_ROOT_PATH
  170. #define SDFILE_APP_ROOT_PATH SDFILE_MOUNT_PATH"/app/" //app分区
  171. #endif /* #ifndef SDFILE_APP_ROOT_PATH */
  172. #ifndef SDFILE_RES_ROOT_PATH
  173. #define SDFILE_RES_ROOT_PATH SDFILE_MOUNT_PATH"/res/" //资源文件分区
  174. #endif /* #ifndef SDFILE_RES_ROOT_PATH */
  175. #else
  176. #ifndef SDFILE_RES_ROOT_PATH
  177. #define SDFILE_RES_ROOT_PATH SDFILE_MOUNT_PATH"/C/"
  178. #endif /* #ifndef SDFILE_RES_ROOT_PATH */
  179. #endif /* #if (USE_SDFILE_NEW) */
  180. //获取flash物理大小, 单位: Byte
  181. u32 sdfile_get_disk_capacity(void);
  182. //flash addr -> cpu addr
  183. u32 sdfile_flash_addr2cpu_addr(u32 offset);
  184. //cpu addr -> flash addr
  185. u32 sdfile_cpu_addr2flash_addr(u32 offset);
  186. void sdfile_head_addr_get(char *name, u32 *addr, u32 *len);
  187. u32 init_norsdfile_hdl(void);
  188. int set_res_startaddr(int offset);
  189. int sdfile_check_write_protect(u32 addr, u32 size);
  190. #endif /* _SDFILE_H_ */