ibutton-app.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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-readed-key-menu.h"
  12. #include "scene/ibutton-scene-write.h"
  13. #include "scene/ibutton-scene-write-success.h"
  14. #include "scene/ibutton-scene-saved.h"
  15. #include "scene/ibutton-scene-saved-key-menu.h"
  16. #include "scene/ibutton-scene-delete-confirm.h"
  17. #include "scene/ibutton-scene-delete-success.h"
  18. #include "scene/ibutton-scene-emulate.h"
  19. #include "scene/ibutton-scene-save-name.h"
  20. #include "scene/ibutton-scene-save-success.h"
  21. #include "scene/ibutton-scene-info.h"
  22. #include "scene/ibutton-scene-add-type.h"
  23. #include "scene/ibutton-scene-add-value.h"
  24. #include "helpers/key-store.h"
  25. #include "helpers/key-worker.h"
  26. #include "one_wire_master.h"
  27. #include "maxim_crc.h"
  28. #include "ibutton-key.h"
  29. class iButtonApp {
  30. public:
  31. void run(void);
  32. iButtonApp();
  33. ~iButtonApp();
  34. enum class Scene : uint8_t {
  35. SceneExit,
  36. SceneStart,
  37. SceneRead,
  38. SceneReadNotKeyError,
  39. SceneReadCRCError,
  40. SceneReadSuccess,
  41. SceneReadedKeyMenu,
  42. SceneWrite,
  43. SceneWriteSuccess,
  44. SceneEmulate,
  45. SceneSavedList,
  46. SceneSavedKeyMenu,
  47. SceneDeleteConfirm,
  48. SceneDeleteSuccess,
  49. SceneSaveName,
  50. SceneSaveSuccess,
  51. SceneInfo,
  52. SceneAddType,
  53. SceneAddValue,
  54. };
  55. iButtonAppViewManager* get_view_manager();
  56. void switch_to_next_scene(Scene index);
  57. void search_and_switch_to_previous_scene(std::initializer_list<Scene> scenes_list);
  58. bool switch_to_previous_scene(uint8_t count = 1);
  59. Scene get_previous_scene();
  60. const GpioPin* get_ibutton_pin();
  61. KeyWorker* get_key_worker();
  62. iButtonKey* get_key();
  63. void notify_green_blink();
  64. void notify_yellow_blink();
  65. void notify_red_blink();
  66. void notify_green_on();
  67. void notify_green_off();
  68. void notify_red_on();
  69. void notify_red_off();
  70. void notify_error();
  71. void notify_success();
  72. void notify_vibro_on();
  73. void notify_vibro_off();
  74. void set_text_store(const char* text...);
  75. char* get_text_store();
  76. uint8_t get_text_store_size();
  77. KeyStore* get_key_store();
  78. uint8_t get_stored_key_index();
  79. void set_stored_key_index(uint8_t index);
  80. void generate_random_name(char* name, uint8_t max_name_size);
  81. private:
  82. std::list<Scene> previous_scenes_list = {Scene::SceneExit};
  83. Scene current_scene = Scene::SceneStart;
  84. iButtonAppViewManager view;
  85. std::map<Scene, iButtonScene*> scenes = {
  86. {Scene::SceneStart, new iButtonSceneStart()},
  87. {Scene::SceneRead, new iButtonSceneRead()},
  88. {Scene::SceneReadCRCError, new iButtonSceneReadCRCError()},
  89. {Scene::SceneReadNotKeyError, new iButtonSceneReadNotKeyError()},
  90. {Scene::SceneReadSuccess, new iButtonSceneReadSuccess()},
  91. {Scene::SceneReadedKeyMenu, new iButtonSceneReadedKeyMenu()},
  92. {Scene::SceneWrite, new iButtonSceneWrite()},
  93. {Scene::SceneWriteSuccess, new iButtonSceneWriteSuccess()},
  94. {Scene::SceneEmulate, new iButtonSceneEmulate()},
  95. {Scene::SceneSavedList, new iButtonSceneSavedList()},
  96. {Scene::SceneSavedKeyMenu, new iButtonSceneSavedKeyMenu()},
  97. {Scene::SceneDeleteConfirm, new iButtonSceneDeleteConfirm()},
  98. {Scene::SceneDeleteSuccess, new iButtonSceneDeleteSuccess()},
  99. {Scene::SceneSaveName, new iButtonSceneSaveName()},
  100. {Scene::SceneSaveSuccess, new iButtonSceneSaveSuccess()},
  101. {Scene::SceneInfo, new iButtonSceneInfo()},
  102. {Scene::SceneAddType, new iButtonSceneAddType()},
  103. {Scene::SceneAddValue, new iButtonSceneAddValue()},
  104. };
  105. KeyWorker* key_worker;
  106. iButtonKey key;
  107. uint8_t key_index = 0;
  108. static const uint8_t text_store_size = 128;
  109. char text_store[text_store_size + 1];
  110. KeyStore store;
  111. void notify_init();
  112. };