irda_app.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #pragma once
  2. #include <map>
  3. #include <irda.h>
  4. #include <furi.h>
  5. #include "scene/irda_app_scene.h"
  6. #include "irda_app_event.h"
  7. #include "scene/irda_app_scene.h"
  8. #include "irda_app_view_manager.h"
  9. #include "irda_app_remote_manager.h"
  10. #include <forward_list>
  11. #include <stdint.h>
  12. #include <notification/notification_messages.h>
  13. #include <irda_worker.h>
  14. class IrdaApp {
  15. public:
  16. enum class EditElement : uint8_t {
  17. Button,
  18. Remote,
  19. };
  20. enum class EditAction : uint8_t {
  21. Rename,
  22. Delete,
  23. };
  24. enum class Scene : uint8_t {
  25. Exit,
  26. Start,
  27. Universal,
  28. UniversalTV,
  29. UniversalAudio,
  30. UniversalAirConditioner,
  31. Learn,
  32. LearnSuccess,
  33. LearnEnterName,
  34. LearnDone,
  35. AskBack,
  36. Remote,
  37. RemoteList,
  38. Edit,
  39. EditKeySelect,
  40. EditRename,
  41. EditDelete,
  42. EditRenameDone,
  43. EditDeleteDone,
  44. };
  45. int32_t run(void* args);
  46. void switch_to_next_scene(Scene index);
  47. void switch_to_next_scene_without_saving(Scene index);
  48. bool switch_to_previous_scene(uint8_t count = 1);
  49. Scene get_previous_scene();
  50. IrdaAppViewManager* get_view_manager();
  51. void set_text_store(uint8_t index, const char* text...);
  52. char* get_text_store(uint8_t index);
  53. uint8_t get_text_store_size();
  54. IrdaAppRemoteManager* get_remote_manager();
  55. IrdaWorker* get_irda_worker();
  56. const IrdaAppSignal& get_received_signal() const;
  57. void set_received_signal(const IrdaAppSignal& signal);
  58. void search_and_switch_to_previous_scene(const std::initializer_list<Scene>& scenes_list);
  59. void set_edit_element(EditElement value);
  60. EditElement get_edit_element(void);
  61. void set_edit_action(EditAction value);
  62. EditAction get_edit_action(void);
  63. bool get_learn_new_remote();
  64. void set_learn_new_remote(bool value);
  65. enum : int {
  66. ButtonNA = -1,
  67. };
  68. int get_current_button();
  69. void set_current_button(int value);
  70. void notify_success();
  71. void notify_red_blink();
  72. void notify_sent_just_learnt();
  73. void notify_green_on();
  74. void notify_green_off();
  75. void notify_click();
  76. void notify_click_and_green_blink();
  77. void notify_blink_green();
  78. static void text_input_callback(void* context);
  79. static void popup_callback(void* context);
  80. static void signal_sent_callback(void* context);
  81. IrdaApp();
  82. ~IrdaApp();
  83. static constexpr const char* irda_directory = "/any/irda";
  84. static constexpr const char* irda_extension = ".ir";
  85. static constexpr const uint32_t max_raw_timings_in_signal = 512;
  86. static constexpr const uint32_t max_line_length =
  87. (9 + 1) * IrdaApp::max_raw_timings_in_signal + 100;
  88. private:
  89. static constexpr const uint8_t text_store_size = 128;
  90. static constexpr const uint8_t text_store_max = 2;
  91. char text_store[text_store_max][text_store_size + 1];
  92. bool learn_new_remote;
  93. EditElement element;
  94. EditAction action;
  95. uint32_t current_button;
  96. NotificationApp* notification;
  97. IrdaAppViewManager view_manager;
  98. IrdaAppRemoteManager remote_manager;
  99. IrdaWorker* irda_worker;
  100. IrdaAppSignal received_signal;
  101. std::forward_list<Scene> previous_scenes_list;
  102. Scene current_scene = Scene::Start;
  103. std::map<Scene, IrdaAppScene*> scenes = {
  104. {Scene::Start, new IrdaAppSceneStart()},
  105. {Scene::Universal, new IrdaAppSceneUniversal()},
  106. {Scene::UniversalTV, new IrdaAppSceneUniversalTV()},
  107. // {Scene::UniversalAudio, new IrdaAppSceneUniversalAudio()},
  108. {Scene::Learn, new IrdaAppSceneLearn()},
  109. {Scene::LearnSuccess, new IrdaAppSceneLearnSuccess()},
  110. {Scene::LearnEnterName, new IrdaAppSceneLearnEnterName()},
  111. {Scene::LearnDone, new IrdaAppSceneLearnDone()},
  112. {Scene::AskBack, new IrdaAppSceneAskBack()},
  113. {Scene::Remote, new IrdaAppSceneRemote()},
  114. {Scene::RemoteList, new IrdaAppSceneRemoteList()},
  115. {Scene::Edit, new IrdaAppSceneEdit()},
  116. {Scene::EditKeySelect, new IrdaAppSceneEditKeySelect()},
  117. {Scene::EditRename, new IrdaAppSceneEditRename()},
  118. {Scene::EditDelete, new IrdaAppSceneEditDelete()},
  119. {Scene::EditRenameDone, new IrdaAppSceneEditRenameDone()},
  120. {Scene::EditDeleteDone, new IrdaAppSceneEditDeleteDone()},
  121. };
  122. };