irda-app.hpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #pragma once
  2. #include <map>
  3. #include <irda.h>
  4. #include <furi.h>
  5. #include "scene/irda-app-scene.hpp"
  6. #include "irda-app-event.hpp"
  7. #include "scene/irda-app-scene.hpp"
  8. #include "irda-app-view-manager.hpp"
  9. #include "irda-app-remote-manager.hpp"
  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. Remote,
  36. RemoteList,
  37. Edit,
  38. EditKeySelect,
  39. EditRename,
  40. EditDelete,
  41. EditRenameDone,
  42. EditDeleteDone,
  43. };
  44. int32_t run(void* args);
  45. void switch_to_next_scene(Scene index);
  46. void switch_to_next_scene_without_saving(Scene index);
  47. bool switch_to_previous_scene(uint8_t count = 1);
  48. Scene get_previous_scene();
  49. IrdaAppViewManager* get_view_manager();
  50. void set_text_store(uint8_t index, const char* text...);
  51. char* get_text_store(uint8_t index);
  52. uint8_t get_text_store_size();
  53. IrdaAppRemoteManager* get_remote_manager();
  54. IrdaWorker* get_irda_worker();
  55. const IrdaAppSignal& get_received_signal() const;
  56. void set_received_signal(const IrdaAppSignal& signal);
  57. void search_and_switch_to_previous_scene(const std::initializer_list<Scene>& scenes_list);
  58. void set_edit_element(EditElement value);
  59. EditElement get_edit_element(void);
  60. void set_edit_action(EditAction value);
  61. EditAction get_edit_action(void);
  62. bool get_learn_new_remote();
  63. void set_learn_new_remote(bool value);
  64. enum : int {
  65. ButtonNA = -1,
  66. };
  67. int get_current_button();
  68. void set_current_button(int value);
  69. void notify_success();
  70. void notify_red_blink();
  71. void notify_space_blink();
  72. void notify_double_vibro();
  73. void notify_green_on();
  74. void notify_green_off();
  75. void notify_click();
  76. void notify_click_and_blink();
  77. static void text_input_callback(void* context);
  78. static void popup_callback(void* context);
  79. IrdaApp() {
  80. notification = static_cast<NotificationApp*>(furi_record_open("notification"));
  81. irda_worker = irda_worker_alloc();
  82. }
  83. ~IrdaApp() {
  84. irda_worker_free(irda_worker);
  85. furi_record_close("notification");
  86. for (auto &it : scenes)
  87. delete it.second;
  88. }
  89. private:
  90. static const uint8_t text_store_size = 128;
  91. static const uint8_t text_store_max = 2;
  92. char text_store[text_store_max][text_store_size + 1];
  93. bool learn_new_remote;
  94. EditElement element;
  95. EditAction action;
  96. uint32_t current_button;
  97. NotificationApp* notification;
  98. IrdaAppViewManager view_manager;
  99. IrdaAppRemoteManager remote_manager;
  100. IrdaWorker* irda_worker;
  101. IrdaAppSignal received_signal;
  102. std::forward_list<Scene> previous_scenes_list;
  103. Scene current_scene = Scene::Start;
  104. std::map<Scene, IrdaAppScene*> scenes = {
  105. {Scene::Start, new IrdaAppSceneStart()},
  106. {Scene::Universal, new IrdaAppSceneUniversal()},
  107. {Scene::UniversalTV, new IrdaAppSceneUniversalTV()},
  108. // {Scene::UniversalAudio, new IrdaAppSceneUniversalAudio()},
  109. {Scene::Learn, new IrdaAppSceneLearn()},
  110. {Scene::LearnSuccess, new IrdaAppSceneLearnSuccess()},
  111. {Scene::LearnEnterName, new IrdaAppSceneLearnEnterName()},
  112. {Scene::LearnDone, new IrdaAppSceneLearnDone()},
  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. };