ibutton_app.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #pragma once
  2. #include <map>
  3. #include <list>
  4. #include "ibutton_view_manager.h"
  5. #include "scene/ibutton_scene_generic.h"
  6. #include "scene/ibutton_scene_start.h"
  7. #include "scene/ibutton_scene_read.h"
  8. #include "scene/ibutton_scene_read_crc_error.h"
  9. #include "scene/ibutton_scene_read_not_key_error.h"
  10. #include "scene/ibutton_scene_read_success.h"
  11. #include "scene/ibutton_scene_retry_confirm.h"
  12. #include "scene/ibutton_scene_exit_confirm.h"
  13. #include "scene/ibutton_scene_read_key_menu.h"
  14. #include "scene/ibutton_scene_write.h"
  15. #include "scene/ibutton_scene_write_success.h"
  16. #include "scene/ibutton_scene_saved_key_menu.h"
  17. #include "scene/ibutton_scene_delete_confirm.h"
  18. #include "scene/ibutton_scene_delete_success.h"
  19. #include "scene/ibutton_scene_emulate.h"
  20. #include "scene/ibutton_scene_save_name.h"
  21. #include "scene/ibutton_scene_save_success.h"
  22. #include "scene/ibutton_scene_info.h"
  23. #include "scene/ibutton_scene_select_key.h"
  24. #include "scene/ibutton_scene_add_type.h"
  25. #include "scene/ibutton_scene_add_value.h"
  26. #include <one_wire/ibutton/ibutton_worker.h>
  27. #include <notification/notification_messages.h>
  28. #include <storage/storage.h>
  29. #include <dialogs/dialogs.h>
  30. #include <record_controller.hpp>
  31. class iButtonApp {
  32. public:
  33. void run(void* args);
  34. iButtonApp();
  35. ~iButtonApp();
  36. enum class Scene : uint8_t {
  37. SceneExit,
  38. SceneStart,
  39. SceneRead,
  40. SceneReadNotKeyError,
  41. SceneReadCRCError,
  42. SceneReadSuccess,
  43. SceneRetryConfirm,
  44. SceneExitConfirm,
  45. SceneReadKeyMenu,
  46. SceneWrite,
  47. SceneWriteSuccess,
  48. SceneEmulate,
  49. SceneSavedKeyMenu,
  50. SceneDeleteConfirm,
  51. SceneDeleteSuccess,
  52. SceneSaveName,
  53. SceneSaveSuccess,
  54. SceneInfo,
  55. SceneSelectKey,
  56. SceneAddType,
  57. SceneAddValue,
  58. };
  59. static const char* app_folder;
  60. static const char* app_extension;
  61. static const char* app_filetype;
  62. iButtonAppViewManager* get_view_manager();
  63. void switch_to_next_scene(Scene index);
  64. void search_and_switch_to_previous_scene(std::initializer_list<Scene> scenes_list);
  65. bool switch_to_previous_scene(uint8_t count = 1);
  66. Scene get_previous_scene();
  67. const GpioPin* get_ibutton_pin();
  68. iButtonWorker* get_key_worker();
  69. iButtonKey* get_key();
  70. void notify_green_blink();
  71. void notify_yellow_blink();
  72. void notify_red_blink();
  73. void notify_error();
  74. void notify_success();
  75. void notify_green_on();
  76. void notify_green_off();
  77. void notify_red_on();
  78. void notify_red_off();
  79. void set_text_store(const char* text...);
  80. char* get_text_store();
  81. uint8_t get_text_store_size();
  82. char* get_file_name();
  83. uint8_t get_file_name_size();
  84. bool save_key(const char* key_name);
  85. bool load_key();
  86. bool load_key(const char* key_name);
  87. bool delete_key();
  88. private:
  89. std::list<Scene> previous_scenes_list = {Scene::SceneExit};
  90. Scene current_scene = Scene::SceneStart;
  91. iButtonAppViewManager view;
  92. std::map<Scene, iButtonScene*> scenes = {
  93. {Scene::SceneStart, new iButtonSceneStart()},
  94. {Scene::SceneRead, new iButtonSceneRead()},
  95. {Scene::SceneReadCRCError, new iButtonSceneReadCRCError()},
  96. {Scene::SceneReadNotKeyError, new iButtonSceneReadNotKeyError()},
  97. {Scene::SceneReadSuccess, new iButtonSceneReadSuccess()},
  98. {Scene::SceneRetryConfirm, new iButtonSceneRetryConfirm()},
  99. {Scene::SceneExitConfirm, new iButtonSceneExitConfirm()},
  100. {Scene::SceneReadKeyMenu, new iButtonSceneReadKeyMenu()},
  101. {Scene::SceneWrite, new iButtonSceneWrite()},
  102. {Scene::SceneWriteSuccess, new iButtonSceneWriteSuccess()},
  103. {Scene::SceneEmulate, new iButtonSceneEmulate()},
  104. {Scene::SceneSavedKeyMenu, new iButtonSceneSavedKeyMenu()},
  105. {Scene::SceneDeleteConfirm, new iButtonSceneDeleteConfirm()},
  106. {Scene::SceneDeleteSuccess, new iButtonSceneDeleteSuccess()},
  107. {Scene::SceneSaveName, new iButtonSceneSaveName()},
  108. {Scene::SceneSaveSuccess, new iButtonSceneSaveSuccess()},
  109. {Scene::SceneInfo, new iButtonSceneInfo()},
  110. {Scene::SceneSelectKey, new iButtonSceneSelectKey()},
  111. {Scene::SceneAddType, new iButtonSceneAddType()},
  112. {Scene::SceneAddValue, new iButtonSceneAddValue()},
  113. };
  114. iButtonWorker* key_worker;
  115. iButtonKey* key;
  116. RecordController<NotificationApp> notification;
  117. RecordController<Storage> storage;
  118. RecordController<DialogsApp> dialogs;
  119. static const uint8_t file_name_size = 100;
  120. char file_name[file_name_size];
  121. static const uint8_t text_store_size = 128;
  122. char text_store[text_store_size + 1];
  123. bool load_key_data(string_t key_path);
  124. void make_app_folder();
  125. };