timed_remote.h (1699B)
1 #pragma once 2 3 #include <furi.h> 4 #include <gui/gui.h> 5 #include <gui/modules/popup.h> 6 #include <gui/modules/submenu.h> 7 #include <gui/modules/text_input.h> 8 #include <gui/modules/variable_item_list.h> 9 #include <gui/modules/widget.h> 10 #include <gui/scene_manager.h> 11 #include <gui/view_dispatcher.h> 12 #include <lib/infrared/signal/infrared_signal.h> 13 14 /* Timer mode enumeration */ 15 typedef enum { 16 TimerModeCountdown, 17 TimerModeScheduled, 18 } TimerMode; 19 20 /* View IDs for ViewDispatcher */ 21 typedef enum { 22 TimedRemoteViewSubmenu, 23 TimedRemoteViewVariableItemList, 24 TimedRemoteViewTextInput, 25 TimedRemoteViewWidget, 26 TimedRemoteViewPopup, 27 } TimedRemoteView; 28 29 /* Maximum lengths */ 30 #define SIGNAL_NAME_MAX_LEN 32 31 #define FILE_PATH_MAX_LEN 256 32 33 /* Main application state */ 34 typedef struct { 35 /* Core Flipper components */ 36 Gui *gui; 37 ViewDispatcher *view_dispatcher; 38 SceneManager *scene_manager; 39 40 /* Views */ 41 Submenu *submenu; 42 VariableItemList *variable_item_list; 43 TextInput *text_input; 44 Widget *widget; 45 Popup *popup; 46 47 /* IR state */ 48 InfraredSignal *ir_signal; 49 char signal_name[SIGNAL_NAME_MAX_LEN]; 50 char selected_file_path[FILE_PATH_MAX_LEN]; 51 52 /* Timer configuration */ 53 TimerMode timer_mode; 54 uint8_t hours; 55 uint8_t minutes; 56 uint8_t seconds; 57 58 /* Repeat options (Countdown mode only) */ 59 uint8_t repeat_count; /* 0 = off, 255 = unlimited, 1-99 = count */ 60 uint8_t repeats_remaining; 61 62 /* Timer runtime state */ 63 FuriTimer *timer; 64 uint32_t seconds_remaining; 65 66 /* Text input buffer */ 67 char text_input_buffer[SIGNAL_NAME_MAX_LEN]; 68 } TimedRemoteApp; 69 70 /* App lifecycle */ 71 TimedRemoteApp *timed_remote_app_alloc(void); 72 void timed_remote_app_free(TimedRemoteApp *app);