| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- #include "meal_pager_storage.h"
- static Storage* meal_pager_open_storage() {
- return furi_record_open(RECORD_STORAGE);
- }
- static void meal_pager_close_storage() {
- furi_record_close(RECORD_STORAGE);
- }
- static void meal_pager_close_config_file(FlipperFormat* file) {
- if(file == NULL) return;
- flipper_format_rewind(file);
- flipper_format_file_close(file);
- flipper_format_free(file);
- }
- bool meal_pager_save_subghz_buffer_file_start(
- void* context,
- FlipperFormat* ff,
- Storage* storage,
- char* frequency) {
- // SubGhz TXRX can only be loaded with files, makes sense as to save RAM
- Meal_Pager* app = context;
- UNUSED(app);
- bool success = false;
- FURI_LOG_D(TAG, "Creating Temp File");
- //Storage* storage = furi_record_open(RECORD_STORAGE);
- //FlipperFormat* ff = flipper_format_file_alloc(storage);
- // Overwrite wont work, so delete first
- if(storage_file_exists(storage, MEAL_PAGER_TMP_FILE)) {
- bool stored = storage_simply_remove(storage, MEAL_PAGER_TMP_FILE);
- if(!stored) {
- FURI_LOG_D(TAG, "Cannot remove file, seems to be open");
- return success;
- }
- }
- // Open File, create if not exists
- if(!storage_common_stat(storage, MEAL_PAGER_TMP_FILE, NULL) == FSE_OK) {
- FURI_LOG_D(
- TAG, "Config file %s is not found. Will create new.", MEAL_PAGER_SETTINGS_SAVE_PATH);
- if(storage_common_stat(storage, CONFIG_FILE_DIRECTORY_PATH, NULL) == FSE_NOT_EXIST) {
- FURI_LOG_D(
- TAG, "Directory %s doesn't exist. Will create new.", CONFIG_FILE_DIRECTORY_PATH);
- if(!storage_simply_mkdir(storage, CONFIG_FILE_DIRECTORY_PATH)) {
- FURI_LOG_D(TAG, "Error creating directory %s", CONFIG_FILE_DIRECTORY_PATH);
- }
- }
- }
- if(!flipper_format_file_open_new(ff, MEAL_PAGER_TMP_FILE)) {
- //totp_close_config_file(fff_file);
- FURI_LOG_D(TAG, "Error creating new file %s", MEAL_PAGER_TMP_FILE);
- meal_pager_close_storage();
- return success;
- }
- success = flipper_format_write_header_cstr(
- ff, MEAL_PAGER_SUBGHZ_FILE_TYPE, MEAL_PAGER_SUBGHZ_FILE_VERSION) &&
- flipper_format_write_string_cstr(ff, "Frequency", frequency) &&
- flipper_format_write_string_cstr(ff, "Preset", MEAL_PAGER_SUBGHZ_FILE_PRESET) &&
- flipper_format_write_string_cstr(ff, "Protocol", MEAL_PAGER_SUBGHZ_FILE_Protocol);
- return success;
- }
- void meal_pager_save_subghz_buffer_stop(void* context, FlipperFormat* ff) {
- Meal_Pager* app = context;
- UNUSED(app);
- FURI_LOG_D(TAG, "Closing Temp File");
- if(!flipper_format_rewind(ff)) {
- meal_pager_close_config_file(ff);
- FURI_LOG_E(TAG, "Rewind error");
- meal_pager_close_storage();
- return;
- }
- meal_pager_close_config_file(ff);
- meal_pager_close_storage();
- }
- void meal_pager_save_settings(void* context) {
- Meal_Pager* app = context;
- if(app->save_settings == 0) {
- FURI_LOG_D(TAG, "Skipping Save because Disabled");
- return;
- }
- FURI_LOG_D(TAG, "Saving Settings to File");
- Storage* storage = meal_pager_open_storage();
- FlipperFormat* fff_file = flipper_format_file_alloc(storage);
- // Overwrite wont work, so delete first
- if(storage_file_exists(storage, MEAL_PAGER_SETTINGS_SAVE_PATH)) {
- storage_simply_remove(storage, MEAL_PAGER_SETTINGS_SAVE_PATH);
- }
- // Open File, create if not exists
- if(!storage_common_stat(storage, MEAL_PAGER_SETTINGS_SAVE_PATH, NULL) == FSE_OK) {
- FURI_LOG_D(
- TAG, "Config file %s is not found. Will create new.", MEAL_PAGER_SETTINGS_SAVE_PATH);
- if(storage_common_stat(storage, CONFIG_FILE_DIRECTORY_PATH, NULL) == FSE_NOT_EXIST) {
- FURI_LOG_D(
- TAG, "Directory %s doesn't exist. Will create new.", CONFIG_FILE_DIRECTORY_PATH);
- if(!storage_simply_mkdir(storage, CONFIG_FILE_DIRECTORY_PATH)) {
- FURI_LOG_E(TAG, "Error creating directory %s", CONFIG_FILE_DIRECTORY_PATH);
- }
- }
- }
- if(!flipper_format_file_open_new(fff_file, MEAL_PAGER_SETTINGS_SAVE_PATH)) {
- //totp_close_config_file(fff_file);
- FURI_LOG_E(TAG, "Error creating new file %s", MEAL_PAGER_SETTINGS_SAVE_PATH);
- meal_pager_close_storage();
- return;
- }
- // Store Settings
- flipper_format_write_header_cstr(
- fff_file, MEAL_PAGER_SETTINGS_HEADER, MEAL_PAGER_SETTINGS_FILE_VERSION);
- flipper_format_write_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_PAGER_TYPE, &app->pager_type, 1);
- flipper_format_write_uint32(
- fff_file, MEAL_PAGER_SETTINGS_KEY_FIRST_STATION, &app->first_station, 1);
- flipper_format_write_uint32(
- fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_STATION, &app->last_station, 1);
- flipper_format_write_uint32(
- fff_file, MEAL_PAGER_SETTINGS_KEY_FIRST_PAGER, &app->first_pager, 1);
- flipper_format_write_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_PAGER, &app->last_pager, 1);
- flipper_format_write_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_PAGER, &app->last_pager, 1);
- flipper_format_write_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_REPEATS, &app->repeats, 1);
- flipper_format_write_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
- flipper_format_write_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_SPEAKER, &app->speaker, 1);
- flipper_format_write_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_LED, &app->led, 1);
- flipper_format_write_uint32(
- fff_file, MEAL_PAGER_SETTINGS_KEY_SAVE_SETTINGS, &app->save_settings, 1);
- if(!flipper_format_rewind(fff_file)) {
- meal_pager_close_config_file(fff_file);
- FURI_LOG_E(TAG, "Rewind error");
- meal_pager_close_storage();
- return;
- }
- meal_pager_close_config_file(fff_file);
- meal_pager_close_storage();
- }
- void meal_pager_read_settings(void* context) {
- Meal_Pager* app = context;
- Storage* storage = meal_pager_open_storage();
- FlipperFormat* fff_file = flipper_format_file_alloc(storage);
- if(storage_common_stat(storage, MEAL_PAGER_SETTINGS_SAVE_PATH, NULL) != FSE_OK) {
- meal_pager_close_config_file(fff_file);
- meal_pager_close_storage();
- return;
- }
- uint32_t file_version;
- FuriString* temp_str = furi_string_alloc();
- if(!flipper_format_file_open_existing(fff_file, MEAL_PAGER_SETTINGS_SAVE_PATH)) {
- FURI_LOG_E(TAG, "Cannot open file %s", MEAL_PAGER_SETTINGS_SAVE_PATH);
- meal_pager_close_config_file(fff_file);
- meal_pager_close_storage();
- furi_string_free(temp_str);
- return;
- }
- if(!flipper_format_read_header(fff_file, temp_str, &file_version)) {
- FURI_LOG_E(TAG, "Missing Header Data");
- meal_pager_close_config_file(fff_file);
- meal_pager_close_storage();
- furi_string_free(temp_str);
- return;
- }
- if(file_version < MEAL_PAGER_SETTINGS_FILE_VERSION) {
- FURI_LOG_I(TAG, "old config version, will be removed.");
- meal_pager_close_config_file(fff_file);
- meal_pager_close_storage();
- furi_string_free(temp_str);
- return;
- }
- flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_PAGER_TYPE, &app->pager_type, 1);
- meal_pager_set_max_values(app);
- flipper_format_read_uint32(
- fff_file, MEAL_PAGER_SETTINGS_KEY_FIRST_STATION, &app->first_station, 1);
- flipper_format_read_uint32(
- fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_STATION, &app->last_station, 1);
- flipper_format_read_uint32(
- fff_file, MEAL_PAGER_SETTINGS_KEY_FIRST_PAGER, &app->first_pager, 1);
- flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_PAGER, &app->last_pager, 1);
- flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_REPEATS, &app->repeats, 1);
- flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
- flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_SPEAKER, &app->speaker, 1);
- flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_LED, &app->led, 1);
- flipper_format_read_uint32(
- fff_file, MEAL_PAGER_SETTINGS_KEY_SAVE_SETTINGS, &app->save_settings, 1);
- flipper_format_rewind(fff_file);
- furi_string_free(temp_str);
- meal_pager_close_config_file(fff_file);
- meal_pager_close_storage();
- }
- void meal_pager_set_max_values(void* context) {
- Meal_Pager* app = context;
- switch(app->pager_type) {
- case Meal_PagerPagerTypeT119:
- case Meal_PagerPagerTypeTD165:
- app->max_station = 8191;
- app->max_pager = 999;
- break;
- case Meal_PagerPagerTypeTD174:
- app->max_station = 8191;
- app->max_pager = 10;
- break;
- case Meal_PagerPagerTypeTD157:
- app->max_station = 1023;
- app->max_pager = 999;
- break;
- }
- if(app->first_station > app->max_station) {
- app->first_station = app->max_station;
- snprintf(app->text_store[0], sizeof(app->text_store[0]), "%lu", app->first_station);
- }
- if(app->last_station > app->max_station) {
- app->last_station = app->max_station;
- snprintf(app->text_store[1], sizeof(app->text_store[1]), "%lu", app->last_station);
- }
- if(app->last_station < app->first_station) {
- app->last_station = app->first_station;
- snprintf(app->text_store[1], sizeof(app->text_store[1]), "%lu", app->last_station);
- }
- if(app->first_pager > app->max_pager) {
- app->first_pager = app->max_pager;
- snprintf(app->text_store[2], sizeof(app->text_store[2]), "%lu", app->first_pager);
- }
- if(app->last_pager > app->max_pager) {
- app->last_pager = app->max_pager;
- snprintf(app->text_store[3], sizeof(app->text_store[3]), "%lu", app->last_pager);
- }
- if(app->last_pager < app->first_pager) {
- app->last_pager = app->first_pager;
- snprintf(app->text_store[3], sizeof(app->text_store[3]), "%lu", app->last_pager);
- }
- }
|