camera_suite_storage.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "camera_suite_storage.h"
  2. static Storage* camera_suite_open_storage() {
  3. return furi_record_open(RECORD_STORAGE);
  4. }
  5. static void camera_suite_close_storage() {
  6. furi_record_close(RECORD_STORAGE);
  7. }
  8. static void camera_suite_close_config_file(FlipperFormat* file) {
  9. if(file == NULL) return;
  10. flipper_format_file_close(file);
  11. flipper_format_free(file);
  12. }
  13. void camera_suite_save_settings(void* context) {
  14. CameraSuite* app = context;
  15. FURI_LOG_D(TAG, "Saving Settings");
  16. Storage* storage = camera_suite_open_storage();
  17. FlipperFormat* fff_file = flipper_format_file_alloc(storage);
  18. // Overwrite wont work, so delete first
  19. if(storage_file_exists(storage, BOILERPLATE_SETTINGS_SAVE_PATH)) {
  20. storage_simply_remove(storage, BOILERPLATE_SETTINGS_SAVE_PATH);
  21. }
  22. // Open File, create if not exists
  23. if(!storage_common_stat(storage, BOILERPLATE_SETTINGS_SAVE_PATH, NULL) == FSE_OK) {
  24. FURI_LOG_D(
  25. TAG, "Config file %s is not found. Will create new.", BOILERPLATE_SETTINGS_SAVE_PATH);
  26. if(storage_common_stat(storage, CONFIG_FILE_DIRECTORY_PATH, NULL) == FSE_NOT_EXIST) {
  27. FURI_LOG_D(
  28. TAG, "Directory %s doesn't exist. Will create new.", CONFIG_FILE_DIRECTORY_PATH);
  29. if(!storage_simply_mkdir(storage, CONFIG_FILE_DIRECTORY_PATH)) {
  30. FURI_LOG_E(TAG, "Error creating directory %s", CONFIG_FILE_DIRECTORY_PATH);
  31. }
  32. }
  33. }
  34. if(!flipper_format_file_open_new(fff_file, BOILERPLATE_SETTINGS_SAVE_PATH)) {
  35. //totp_close_config_file(fff_file);
  36. FURI_LOG_E(TAG, "Error creating new file %s", BOILERPLATE_SETTINGS_SAVE_PATH);
  37. camera_suite_close_storage();
  38. return;
  39. }
  40. // Store Settings
  41. flipper_format_write_header_cstr(
  42. fff_file, BOILERPLATE_SETTINGS_HEADER, BOILERPLATE_SETTINGS_FILE_VERSION);
  43. flipper_format_write_uint32(
  44. fff_file, BOILERPLATE_SETTINGS_KEY_ORIENTATION, &app->orientation, 1);
  45. flipper_format_write_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_DITHER, &app->dither, 1);
  46. flipper_format_write_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_FLASH, &app->flash, 1);
  47. flipper_format_write_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
  48. flipper_format_write_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_SPEAKER, &app->speaker, 1);
  49. flipper_format_write_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_LED, &app->led, 1);
  50. if(!flipper_format_rewind(fff_file)) {
  51. camera_suite_close_config_file(fff_file);
  52. FURI_LOG_E(TAG, "Rewind error");
  53. camera_suite_close_storage();
  54. return;
  55. }
  56. camera_suite_close_config_file(fff_file);
  57. camera_suite_close_storage();
  58. }
  59. void camera_suite_read_settings(void* context) {
  60. CameraSuite* app = context;
  61. Storage* storage = camera_suite_open_storage();
  62. FlipperFormat* fff_file = flipper_format_file_alloc(storage);
  63. if(storage_common_stat(storage, BOILERPLATE_SETTINGS_SAVE_PATH, NULL) != FSE_OK) {
  64. camera_suite_close_config_file(fff_file);
  65. camera_suite_close_storage();
  66. return;
  67. }
  68. uint32_t file_version;
  69. FuriString* temp_str = furi_string_alloc();
  70. if(!flipper_format_file_open_existing(fff_file, BOILERPLATE_SETTINGS_SAVE_PATH)) {
  71. FURI_LOG_E(TAG, "Cannot open file %s", BOILERPLATE_SETTINGS_SAVE_PATH);
  72. camera_suite_close_config_file(fff_file);
  73. camera_suite_close_storage();
  74. return;
  75. }
  76. if(!flipper_format_read_header(fff_file, temp_str, &file_version)) {
  77. FURI_LOG_E(TAG, "Missing Header Data");
  78. camera_suite_close_config_file(fff_file);
  79. camera_suite_close_storage();
  80. return;
  81. }
  82. if(file_version < BOILERPLATE_SETTINGS_FILE_VERSION) {
  83. FURI_LOG_I(TAG, "old config version, will be removed.");
  84. camera_suite_close_config_file(fff_file);
  85. camera_suite_close_storage();
  86. return;
  87. }
  88. // Read settings
  89. flipper_format_read_uint32(
  90. fff_file, BOILERPLATE_SETTINGS_KEY_ORIENTATION, &app->orientation, 1);
  91. flipper_format_read_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_DITHER, &app->dither, 1);
  92. flipper_format_read_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_FLASH, &app->flash, 1);
  93. flipper_format_read_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
  94. flipper_format_read_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_SPEAKER, &app->speaker, 1);
  95. flipper_format_read_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_LED, &app->led, 1);
  96. flipper_format_rewind(fff_file);
  97. camera_suite_close_config_file(fff_file);
  98. camera_suite_close_storage();
  99. }