irda-app.hpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #pragma once
  2. #include <map>
  3. #include <irda.h>
  4. #include <furi.h>
  5. #include "irda/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 "irda-app-transceiver.hpp"
  11. #include <forward_list>
  12. #include <stdint.h>
  13. #include <notification/notification-messages.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. LearnDoneAfter,
  36. Remote,
  37. RemoteList,
  38. Edit,
  39. EditKeySelect,
  40. EditRename,
  41. EditDelete,
  42. EditRenameDone,
  43. EditDeleteDone,
  44. };
  45. void run(void);
  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. IrdaAppSignalTransceiver* get_transceiver();
  52. void set_text_store(uint8_t index, const char* text...);
  53. char* get_text_store(uint8_t index);
  54. uint8_t get_text_store_size();
  55. IrdaAppRemoteManager* get_remote_manager();
  56. void search_and_switch_to_previous_scene(const std::initializer_list<Scene>& scenes_list);
  57. void set_edit_element(EditElement value);
  58. EditElement get_edit_element(void);
  59. void set_edit_action(EditAction value);
  60. EditAction get_edit_action(void);
  61. bool get_learn_new_remote();
  62. void set_learn_new_remote(bool value);
  63. enum : int {
  64. ButtonNA = -1,
  65. };
  66. int get_current_button();
  67. void set_current_button(int value);
  68. void notify_success();
  69. void notify_red_blink();
  70. void notify_space_blink();
  71. void notify_double_vibro();
  72. void notify_green_on();
  73. void notify_green_off();
  74. void notify_click();
  75. void notify_click_and_blink();
  76. static void text_input_callback(void* context);
  77. static void popup_callback(void* context);
  78. IrdaApp() {
  79. notification = static_cast<NotificationApp*>(furi_record_open("notification"));
  80. }
  81. ~IrdaApp() {
  82. furi_record_close("notification");
  83. for (auto &it : scenes)
  84. delete it.second;
  85. }
  86. private:
  87. static const uint8_t text_store_size = 128;
  88. static const uint8_t text_store_max = 2;
  89. char text_store[text_store_max][text_store_size + 1];
  90. bool learn_new_remote;
  91. EditElement element;
  92. EditAction action;
  93. uint32_t current_button;
  94. NotificationApp* notification;
  95. IrdaAppSignalTransceiver transceiver;
  96. IrdaAppViewManager view_manager;
  97. IrdaAppRemoteManager remote_manager;
  98. std::forward_list<Scene> previous_scenes_list;
  99. Scene current_scene = Scene::Start;
  100. std::map<Scene, IrdaAppScene*> scenes = {
  101. {Scene::Start, new IrdaAppSceneStart()},
  102. {Scene::Universal, new IrdaAppSceneUniversal()},
  103. {Scene::UniversalTV, new IrdaAppSceneUniversalTV()},
  104. // {Scene::UniversalAudio, new IrdaAppSceneUniversalAudio()},
  105. {Scene::Learn, new IrdaAppSceneLearn()},
  106. {Scene::LearnSuccess, new IrdaAppSceneLearnSuccess()},
  107. {Scene::LearnEnterName, new IrdaAppSceneLearnEnterName()},
  108. {Scene::LearnDone, new IrdaAppSceneLearnDone()},
  109. {Scene::LearnDoneAfter, new IrdaAppSceneLearnDoneAfter()},
  110. {Scene::Remote, new IrdaAppSceneRemote()},
  111. {Scene::RemoteList, new IrdaAppSceneRemoteList()},
  112. {Scene::Edit, new IrdaAppSceneEdit()},
  113. {Scene::EditKeySelect, new IrdaAppSceneEditKeySelect()},
  114. {Scene::EditRename, new IrdaAppSceneEditRename()},
  115. {Scene::EditDelete, new IrdaAppSceneEditDelete()},
  116. {Scene::EditRenameDone, new IrdaAppSceneEditRenameDone()},
  117. {Scene::EditDeleteDone, new IrdaAppSceneEditDeleteDone()},
  118. };
  119. };