infrared_i.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. } InfraredAppState;
  57. struct Infrared {
  58. SceneManager* scene_manager;
  59. ViewDispatcher* view_dispatcher;
  60. Gui* gui;
  61. Storage* storage;
  62. DialogsApp* dialogs;
  63. NotificationApp* notifications;
  64. InfraredWorker* worker;
  65. InfraredRemote* remote;
  66. InfraredSignal* received_signal;
  67. InfraredBruteForce* brute_force;
  68. Submenu* submenu;
  69. TextInput* text_input;
  70. DialogEx* dialog_ex;
  71. ButtonMenu* button_menu;
  72. Popup* popup;
  73. ViewStack* view_stack;
  74. InfraredDebugView* debug_view;
  75. ButtonPanel* button_panel;
  76. Loading* loading;
  77. InfraredProgressView* progress;
  78. FuriString* file_path;
  79. char text_store[INFRARED_TEXT_STORE_NUM][INFRARED_TEXT_STORE_SIZE + 1];
  80. InfraredAppState app_state;
  81. void* rpc_ctx;
  82. };
  83. typedef enum {
  84. InfraredViewSubmenu,
  85. InfraredViewTextInput,
  86. InfraredViewDialogEx,
  87. InfraredViewButtonMenu,
  88. InfraredViewPopup,
  89. InfraredViewStack,
  90. InfraredViewDebugView,
  91. } InfraredView;
  92. typedef enum {
  93. InfraredNotificationMessageSuccess,
  94. InfraredNotificationMessageGreenOn,
  95. InfraredNotificationMessageGreenOff,
  96. InfraredNotificationMessageYellowOn,
  97. InfraredNotificationMessageYellowOff,
  98. InfraredNotificationMessageBlinkStartRead,
  99. InfraredNotificationMessageBlinkStartSend,
  100. InfraredNotificationMessageBlinkStop,
  101. } InfraredNotificationMessage;
  102. bool infrared_add_remote_with_button(Infrared* infrared, const char* name, InfraredSignal* signal);
  103. bool infrared_rename_current_remote(Infrared* infrared, const char* name);
  104. void infrared_tx_start_signal(Infrared* infrared, InfraredSignal* signal);
  105. void infrared_tx_start_button_index(Infrared* infrared, size_t button_index);
  106. void infrared_tx_start_received(Infrared* infrared);
  107. void infrared_tx_stop(Infrared* infrared);
  108. void infrared_text_store_set(Infrared* infrared, uint32_t bank, const char* text, ...);
  109. void infrared_text_store_clear(Infrared* infrared, uint32_t bank);
  110. void infrared_play_notification_message(Infrared* infrared, uint32_t message);
  111. void infrared_show_loading_popup(Infrared* infrared, bool show);
  112. void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal);
  113. void infrared_text_input_callback(void* context);
  114. void infrared_popup_closed_callback(void* context);