infrared_i.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #pragma once
  2. #include <gui/gui.h>
  3. #include <gui/view.h>
  4. #include <assets_icons.h>
  5. #include <gui/view_stack.h>
  6. #include <gui/view_dispatcher.h>
  7. #include <gui/scene_manager.h>
  8. #include <gui/modules/popup.h>
  9. #include <gui/modules/loading.h>
  10. #include <gui/modules/submenu.h>
  11. #include <gui/modules/dialog_ex.h>
  12. #include <gui/modules/text_input.h>
  13. #include <gui/modules/button_menu.h>
  14. #include <gui/modules/button_panel.h>
  15. #include <storage/storage.h>
  16. #include <dialogs/dialogs.h>
  17. #include <notification/notification_messages.h>
  18. #include <infrared_worker.h>
  19. #include "infrared.h"
  20. #include "infrared_remote.h"
  21. #include "infrared_brute_force.h"
  22. #include "infrared_custom_event.h"
  23. #include "scenes/infrared_scene.h"
  24. #include "views/infrared_progress_view.h"
  25. #include "views/infrared_debug_view.h"
  26. #include "rpc/rpc_app.h"
  27. #define INFRARED_FILE_NAME_SIZE 100
  28. #define INFRARED_TEXT_STORE_NUM 2
  29. #define INFRARED_TEXT_STORE_SIZE 128
  30. #define INFRARED_MAX_BUTTON_NAME_LENGTH 22
  31. #define INFRARED_MAX_REMOTE_NAME_LENGTH 22
  32. #define INFRARED_APP_FOLDER ANY_PATH("infrared")
  33. #define INFRARED_APP_EXTENSION ".ir"
  34. #define INFRARED_DEFAULT_REMOTE_NAME "Remote"
  35. #define INFRARED_LOG_TAG "InfraredApp"
  36. typedef enum {
  37. InfraredButtonIndexNone = -1,
  38. } InfraredButtonIndex;
  39. typedef enum {
  40. InfraredEditTargetNone,
  41. InfraredEditTargetRemote,
  42. InfraredEditTargetButton,
  43. } InfraredEditTarget;
  44. typedef enum {
  45. InfraredEditModeNone,
  46. InfraredEditModeRename,
  47. InfraredEditModeDelete,
  48. } InfraredEditMode;
  49. typedef struct {
  50. bool is_learning_new_remote;
  51. bool is_debug_enabled;
  52. bool is_transmitting;
  53. InfraredEditTarget edit_target : 8;
  54. InfraredEditMode edit_mode : 8;
  55. int32_t current_button_index;
  56. uint32_t last_transmit_time;
  57. } InfraredAppState;
  58. struct Infrared {
  59. SceneManager* scene_manager;
  60. ViewDispatcher* view_dispatcher;
  61. Gui* gui;
  62. Storage* storage;
  63. DialogsApp* dialogs;
  64. NotificationApp* notifications;
  65. InfraredWorker* worker;
  66. InfraredRemote* remote;
  67. InfraredSignal* received_signal;
  68. InfraredBruteForce* brute_force;
  69. Submenu* submenu;
  70. TextInput* text_input;
  71. DialogEx* dialog_ex;
  72. ButtonMenu* button_menu;
  73. Popup* popup;
  74. ViewStack* view_stack;
  75. InfraredDebugView* debug_view;
  76. ButtonPanel* button_panel;
  77. Loading* loading;
  78. InfraredProgressView* progress;
  79. FuriString* file_path;
  80. char text_store[INFRARED_TEXT_STORE_NUM][INFRARED_TEXT_STORE_SIZE + 1];
  81. InfraredAppState app_state;
  82. void* rpc_ctx;
  83. };
  84. typedef enum {
  85. InfraredViewSubmenu,
  86. InfraredViewTextInput,
  87. InfraredViewDialogEx,
  88. InfraredViewButtonMenu,
  89. InfraredViewPopup,
  90. InfraredViewStack,
  91. InfraredViewDebugView,
  92. } InfraredView;
  93. typedef enum {
  94. InfraredNotificationMessageSuccess,
  95. InfraredNotificationMessageGreenOn,
  96. InfraredNotificationMessageGreenOff,
  97. InfraredNotificationMessageYellowOn,
  98. InfraredNotificationMessageYellowOff,
  99. InfraredNotificationMessageBlinkStartRead,
  100. InfraredNotificationMessageBlinkStartSend,
  101. InfraredNotificationMessageBlinkStop,
  102. } InfraredNotificationMessage;
  103. bool infrared_add_remote_with_button(Infrared* infrared, const char* name, InfraredSignal* signal);
  104. bool infrared_rename_current_remote(Infrared* infrared, const char* name);
  105. void infrared_tx_start_signal(Infrared* infrared, InfraredSignal* signal);
  106. void infrared_tx_start_button_index(Infrared* infrared, size_t button_index);
  107. void infrared_tx_start_received(Infrared* infrared);
  108. void infrared_tx_stop(Infrared* infrared);
  109. void infrared_text_store_set(Infrared* infrared, uint32_t bank, const char* text, ...);
  110. void infrared_text_store_clear(Infrared* infrared, uint32_t bank);
  111. void infrared_play_notification_message(Infrared* infrared, uint32_t message);
  112. void infrared_show_loading_popup(Infrared* infrared, bool show);
  113. void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal);
  114. void infrared_text_input_callback(void* context);
  115. void infrared_popup_closed_callback(void* context);