#include "system_settings.h" #include static uint8_t uint32_value_index(const uint32_t value, const uint32_t values[], uint8_t values_count) { int64_t last_value = INT64_MIN; uint8_t index = 0; for(uint8_t i = 0; i < values_count; i++) { if((value >= last_value) && (value <= values[i])) { index = i; break; } last_value = values[i]; } return index; } const char* const log_level_text[] = { "Default", "None", "Error", "Warning", "Info", "Debug", "Trace", }; const uint32_t log_level_value[] = { FuriLogLevelDefault, FuriLogLevelNone, FuriLogLevelError, FuriLogLevelWarn, FuriLogLevelInfo, FuriLogLevelDebug, FuriLogLevelTrace, }; static void log_level_changed(VariableItem* item) { // SystemSettings* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, log_level_text[index]); furi_hal_rtc_set_log_level(log_level_value[index]); } const char* const debug_text[] = { "Disable", "Enable", }; static void debug_changed(VariableItem* item) { uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, debug_text[index]); if(index) { furi_hal_rtc_set_flag(FuriHalRtcFlagDebug); } else { furi_hal_rtc_reset_flag(FuriHalRtcFlagDebug); } loader_update_menu(); } static uint32_t system_settings_exit(void* context) { return VIEW_NONE; } SystemSettings* system_settings_alloc() { SystemSettings* app = malloc(sizeof(SystemSettings)); // Load settings app->gui = furi_record_open("gui"); app->view_dispatcher = view_dispatcher_alloc(); view_dispatcher_enable_queue(app->view_dispatcher); view_dispatcher_set_event_callback_context(app->view_dispatcher, app); view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); VariableItem* item; uint8_t value_index; app->var_item_list = variable_item_list_alloc(); item = variable_item_list_add( app->var_item_list, "Log Level", COUNT_OF(log_level_text), log_level_changed, app); value_index = uint32_value_index( furi_hal_rtc_get_log_level(), log_level_value, COUNT_OF(log_level_text)); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, log_level_text[value_index]); item = variable_item_list_add( app->var_item_list, "Debug", COUNT_OF(debug_text), debug_changed, app); value_index = furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug) ? 1 : 0; variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, debug_text[value_index]); view_set_previous_callback( variable_item_list_get_view(app->var_item_list), system_settings_exit); view_dispatcher_add_view( app->view_dispatcher, SystemSettingsViewVarItemList, variable_item_list_get_view(app->var_item_list)); view_dispatcher_switch_to_view(app->view_dispatcher, SystemSettingsViewVarItemList); return app; } void system_settings_free(SystemSettings* app) { furi_assert(app); // Variable item list view_dispatcher_remove_view(app->view_dispatcher, SystemSettingsViewVarItemList); variable_item_list_free(app->var_item_list); // View dispatcher view_dispatcher_free(app->view_dispatcher); // Records furi_record_close("gui"); free(app); } int32_t system_settings_app(void* p) { SystemSettings* app = system_settings_alloc(); view_dispatcher_run(app->view_dispatcher); system_settings_free(app); return 0; }