#include "../infrared_app_i.h" enum SubmenuIndex { SubmenuIndexUniversalRemotes, SubmenuIndexLearnNewRemote, SubmenuIndexSavedRemotes, SubmenuIndexDebugSettings, SubmenuIndexLearnNewRemoteRaw, SubmenuIndexDebug }; static void infrared_scene_start_submenu_callback(void* context, uint32_t index) { InfraredApp* infrared = context; view_dispatcher_send_custom_event(infrared->view_dispatcher, index); } void infrared_scene_start_on_enter(void* context) { InfraredApp* infrared = context; Submenu* submenu = infrared->submenu; SceneManager* scene_manager = infrared->scene_manager; submenu_add_item( submenu, "Universal Remotes", SubmenuIndexUniversalRemotes, infrared_scene_start_submenu_callback, infrared); submenu_add_item( submenu, "Learn New Remote", SubmenuIndexLearnNewRemote, infrared_scene_start_submenu_callback, infrared); submenu_add_item( submenu, "Saved Remotes", 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( submenu, "Learn New Remote RAW", SubmenuIndexLearnNewRemoteRaw, infrared_scene_start_submenu_callback, infrared); submenu_add_item( submenu, "Debug RX", SubmenuIndexDebug, infrared_scene_start_submenu_callback, infrared); } const uint32_t submenu_index = scene_manager_get_scene_state(scene_manager, InfraredSceneStart); submenu_set_selected_item(submenu, submenu_index); scene_manager_set_scene_state(scene_manager, InfraredSceneStart, SubmenuIndexUniversalRemotes); view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewSubmenu); } bool infrared_scene_start_on_event(void* context, SceneManagerEvent event) { InfraredApp* infrared = context; SceneManager* scene_manager = infrared->scene_manager; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { const uint32_t submenu_index = event.event; scene_manager_set_scene_state(scene_manager, InfraredSceneStart, submenu_index); if(submenu_index == SubmenuIndexUniversalRemotes) { scene_manager_next_scene(scene_manager, InfraredSceneUniversal); consumed = true; } else if( submenu_index == SubmenuIndexLearnNewRemote || submenu_index == SubmenuIndexLearnNewRemoteRaw) { // enable automatic signal decoding if "Learn New Remote" // disable automatic signal decoding if "Learn New Remote (RAW)" infrared_worker_rx_enable_signal_decoding( infrared->worker, submenu_index == SubmenuIndexLearnNewRemote); infrared->app_state.is_learning_new_remote = true; scene_manager_next_scene(scene_manager, InfraredSceneLearn); consumed = true; } else if(submenu_index == SubmenuIndexSavedRemotes) { furi_string_set(infrared->file_path, INFRARED_APP_FOLDER); scene_manager_next_scene(scene_manager, InfraredSceneRemoteList); consumed = true; } else if(submenu_index == SubmenuIndexDebug) { scene_manager_next_scene(scene_manager, InfraredSceneDebug); consumed = true; } else if(submenu_index == SubmenuIndexDebugSettings) { scene_manager_next_scene(scene_manager, InfraredSceneDebugSettings); consumed = true; } } return consumed; } void infrared_scene_start_on_exit(void* context) { InfraredApp* infrared = context; submenu_reset(infrared->submenu); }