From a1fa5224a3ea71f366bba584a7336abb25eaaf15 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Thu, 11 May 2023 03:15:15 +0300 Subject: [PATCH] Infrared external output move out of debug and add power option --- applications/main/infrared/infrared.c | 5 ++++ .../scenes/infrared_scene_debug_settings.c | 26 +++++++++++++++++++ .../infrared/scenes/infrared_scene_start.c | 18 ++++++------- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/applications/main/infrared/infrared.c b/applications/main/infrared/infrared.c index a88306cc5..b2be5f1af 100644 --- a/applications/main/infrared/infrared.c +++ b/applications/main/infrared/infrared.c @@ -246,6 +246,11 @@ static void infrared_free(Infrared* infrared) { furi_string_free(infrared->file_path); + // Disable 5v power if was enabled for external module + if(furi_hal_power_is_otg_enabled()) { + furi_hal_power_disable_otg(); + } + free(infrared); } diff --git a/applications/main/infrared/scenes/infrared_scene_debug_settings.c b/applications/main/infrared/scenes/infrared_scene_debug_settings.c index 0bc830788..bef666275 100644 --- a/applications/main/infrared/scenes/infrared_scene_debug_settings.c +++ b/applications/main/infrared/scenes/infrared_scene_debug_settings.c @@ -18,6 +18,22 @@ static void infrared_scene_debug_settings_changed(VariableItem* item) { furi_hal_infrared_set_debug_out(value_index_ir); } + +static void infrared_scene_debug_settings_power_changed(VariableItem* item) { + bool value = variable_item_get_current_value_index(item); + if(value) { + for(int i = 0; i < 5 && !furi_hal_power_is_otg_enabled(); i++) { + furi_hal_power_enable_otg(); + furi_delay_ms(10); + } + } else { + if(furi_hal_power_is_otg_enabled()) { + furi_hal_power_disable_otg(); + } + } + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); +} + static void infrared_debug_settings_start_var_list_enter_callback(void* context, uint32_t index) { Infrared* infrared = context; view_dispatcher_send_custom_event(infrared->view_dispatcher, index); @@ -42,6 +58,16 @@ void infrared_scene_debug_settings_on_enter(void* context) { variable_item_set_current_value_index(item, value_index_ir); variable_item_set_current_value_text(item, infrared_debug_cfg_variables_text[value_index_ir]); + item = variable_item_list_add( + variable_item_list, + "Ext Module 5v", + 2, + infrared_scene_debug_settings_power_changed, + infrared); + bool enabled = furi_hal_power_is_otg_enabled(); + variable_item_set_current_value_index(item, enabled); + variable_item_set_current_value_text(item, enabled ? "ON" : "OFF"); + view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewVariableItemList); } diff --git a/applications/main/infrared/scenes/infrared_scene_start.c b/applications/main/infrared/scenes/infrared_scene_start.c index 816d57294..a89974ba2 100644 --- a/applications/main/infrared/scenes/infrared_scene_start.c +++ b/applications/main/infrared/scenes/infrared_scene_start.c @@ -3,10 +3,10 @@ enum SubmenuIndex { SubmenuIndexUniversalRemotes, SubmenuIndexLearnNewRemote, - SubmenuIndexLearnNewRemoteRaw, SubmenuIndexSavedRemotes, - SubmenuIndexDebug, - SubmenuIndexDebugSettings + SubmenuIndexDebugSettings, + SubmenuIndexLearnNewRemoteRaw, + SubmenuIndexDebug }; static void infrared_scene_start_submenu_callback(void* context, uint32_t index) { @@ -37,6 +37,12 @@ void infrared_scene_start_on_enter(void* context) { SubmenuIndexSavedRemotes, infrared_scene_start_submenu_callback, infrared); + submenu_add_item( + submenu, + "GPIO Settings", + SubmenuIndexDebugSettings, + infrared_scene_start_submenu_callback, + infrared); if(infrared->app_state.is_debug_enabled) { submenu_add_item( @@ -51,12 +57,6 @@ void infrared_scene_start_on_enter(void* context) { SubmenuIndexDebug, infrared_scene_start_submenu_callback, infrared); - submenu_add_item( - submenu, - "Debug Settings", - SubmenuIndexDebugSettings, - infrared_scene_start_submenu_callback, - infrared); } const uint32_t submenu_index =