file-worker.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. #pragma once
  2. #include <m-string.h>
  3. #include <storage/storage.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. /**
  8. * @brief File operations helper class.
  9. * Automatically opens API records, shows error message on error.
  10. */
  11. typedef struct FileWorker FileWorker;
  12. /**
  13. * @brief Allocate FileWorker
  14. *
  15. * @param silent do not show errors except from file_worker_show_error fn
  16. * @return FileWorker*
  17. */
  18. FileWorker* file_worker_alloc(bool silent);
  19. /**
  20. * @brief free FileWorker
  21. *
  22. * @param file_worker
  23. */
  24. void file_worker_free(FileWorker* file_worker);
  25. /**
  26. * @brief Open file
  27. *
  28. * @param file_worker FileWorker instance
  29. * @param filename
  30. * @param access_mode
  31. * @param open_mode
  32. * @return true on success
  33. */
  34. bool file_worker_open(
  35. FileWorker* file_worker,
  36. const char* filename,
  37. FS_AccessMode access_mode,
  38. FS_OpenMode open_mode);
  39. /**
  40. * @brief Close file
  41. *
  42. * @param file_worker FileWorker instance
  43. * @return true on success
  44. */
  45. bool file_worker_close(FileWorker* file_worker);
  46. /**
  47. * @brief Creates a directory. Doesn't show error if directory exist.
  48. *
  49. * @param file_worker FileWorker instance
  50. * @param dirname
  51. * @return true on success
  52. */
  53. bool file_worker_mkdir(FileWorker* file_worker, const char* dirname);
  54. /**
  55. * @brief Removes the file. Doesn't show error if file doesn't exist.
  56. *
  57. * @param file_worker FileWorker instance
  58. * @param filename
  59. * @return true on success
  60. */
  61. bool file_worker_remove(FileWorker* file_worker, const char* filename);
  62. /**
  63. * @brief Reads data from a file.
  64. *
  65. * @param file_worker FileWorker instance
  66. * @param buffer
  67. * @param bytes_to_read
  68. * @return true on success
  69. */
  70. bool file_worker_read(FileWorker* file_worker, void* buffer, uint16_t bytes_to_read);
  71. /**
  72. * @brief Reads data from a file until separator or EOF is found.
  73. * Moves seek pointer to the next symbol after the separator. The separator is not included in the result.
  74. *
  75. * @param file_worker FileWorker instance
  76. * @param result
  77. * @param separator
  78. * @return true on success
  79. */
  80. bool file_worker_read_until(FileWorker* file_worker, string_t result, char separator);
  81. /**
  82. * @brief Reads data in hexadecimal space-delimited format. For example "AF FF" in a file - [175, 255] in a read buffer.
  83. *
  84. * @param file_worker FileWorker instance
  85. * @param buffer
  86. * @param bytes_to_read
  87. * @return true on success
  88. */
  89. bool file_worker_read_hex(FileWorker* file_worker, uint8_t* buffer, uint16_t bytes_to_read);
  90. /**
  91. * @brief Read seek pointer value
  92. *
  93. * @param file_worker FileWorker instance
  94. * @param position
  95. * @return true on success
  96. */
  97. bool file_worker_tell(FileWorker* file_worker, uint64_t* position);
  98. /**
  99. * @brief Set seek pointer value
  100. *
  101. * @param file_worker FileWorker instance
  102. * @param position
  103. * @param from_start
  104. * @return true on success
  105. */
  106. bool file_worker_seek(FileWorker* file_worker, uint64_t position, bool from_start);
  107. /**
  108. * @brief Write data to file.
  109. *
  110. * @param file_worker FileWorker instance
  111. * @param buffer
  112. * @param bytes_to_write
  113. * @return true on success
  114. */
  115. bool file_worker_write(FileWorker* file_worker, const void* buffer, uint16_t bytes_to_write);
  116. /**
  117. * @brief Write data to file in hexadecimal space-delimited format. For example [175, 255] in a write buffer - "AF FF" in a file.
  118. *
  119. * @param file_worker FileWorker instance
  120. * @param buffer
  121. * @param bytes_to_write
  122. * @return true on success
  123. */
  124. bool file_worker_write_hex(FileWorker* file_worker, const uint8_t* buffer, uint16_t bytes_to_write);
  125. /**
  126. * @brief Show system file error message
  127. *
  128. * @param file_worker FileWorker instance
  129. * @param error_text
  130. */
  131. void file_worker_show_error(FileWorker* file_worker, const char* error_text);
  132. /**
  133. * @brief Show system file select widget
  134. *
  135. * @param file_worker FileWorker instance
  136. * @param path path to directory
  137. * @param extension file extension to be offered for selection
  138. * @param selected_filename buffer where the selected filename will be saved
  139. * @param selected_filename_size and the size of this buffer
  140. * @param preselected_filename filename to be preselected
  141. * @return bool whether a file was selected
  142. */
  143. bool file_worker_file_select(
  144. FileWorker* file_worker,
  145. const char* path,
  146. const char* extension,
  147. char* selected_filename,
  148. uint8_t selected_filename_size,
  149. const char* preselected_filename);
  150. /**
  151. * @brief Reads data from a file until separator or EOF is found.
  152. * The separator is included in the result.
  153. *
  154. * @param file_worker FileWorker instance
  155. * @param str_result
  156. * @param file_buf
  157. * @param file_buf_cnt
  158. * @param max_length
  159. * @param separator
  160. * @return true on success
  161. */
  162. bool file_worker_read_until_buffered(
  163. FileWorker* file_worker,
  164. string_t str_result,
  165. char* file_buf,
  166. size_t* file_buf_cnt,
  167. size_t max_length,
  168. char separator);
  169. /**
  170. * @brief Check whether file exist or not
  171. *
  172. * @param file_worker FileWorker instance
  173. * @param filename
  174. * @param exist - flag to show file exist
  175. * @return true on success
  176. */
  177. bool file_worker_is_file_exist(FileWorker* file_worker, const char* filename, bool* exist);
  178. /**
  179. * @brief Rename file or directory
  180. *
  181. * @param file_worker FileWorker instance
  182. * @param old_filename
  183. * @param new_filename
  184. * @return true on success
  185. */
  186. bool file_worker_rename(FileWorker* file_worker, const char* old_path, const char* new_path);
  187. /**
  188. * @brief Check errors
  189. *
  190. * @param file_worker FileWorker instance
  191. * @return true on success
  192. */
  193. bool file_worker_check_errors(FileWorker* file_worker);
  194. #ifdef __cplusplus
  195. }
  196. #endif