ibutton-app.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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-cli-read.h"
  9. #include "scene/ibutton-scene-read-crc-error.h"
  10. #include "scene/ibutton-scene-read-not-key-error.h"
  11. #include "scene/ibutton-scene-read-success.h"
  12. #include "scene/ibutton-scene-readed-key-menu.h"
  13. #include "scene/ibutton-scene-write.h"
  14. #include "scene/ibutton-scene-cli-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-cli-emulate.h"
  21. #include "scene/ibutton-scene-save-name.h"
  22. #include "scene/ibutton-scene-save-success.h"
  23. #include "scene/ibutton-scene-info.h"
  24. #include "scene/ibutton-scene-select-key.h"
  25. #include "scene/ibutton-scene-add-type.h"
  26. #include "scene/ibutton-scene-add-value.h"
  27. #include "helpers/key-worker.h"
  28. #include <sd-card-api.h>
  29. #include <filesystem-api.h>
  30. #include "../cli/cli.h"
  31. #include "one_wire_master.h"
  32. #include "maxim_crc.h"
  33. #include "ibutton-key.h"
  34. class iButtonApp {
  35. public:
  36. void run(void);
  37. iButtonApp();
  38. ~iButtonApp();
  39. enum class Scene : uint8_t {
  40. SceneExit,
  41. SceneStart,
  42. SceneRead,
  43. SceneCliRead,
  44. SceneReadNotKeyError,
  45. SceneReadCRCError,
  46. SceneReadSuccess,
  47. SceneReadedKeyMenu,
  48. SceneWrite,
  49. SceneCliWrite,
  50. SceneWriteSuccess,
  51. SceneEmulate,
  52. SceneCliEmulate,
  53. SceneSavedKeyMenu,
  54. SceneDeleteConfirm,
  55. SceneDeleteSuccess,
  56. SceneSaveName,
  57. SceneSaveSuccess,
  58. SceneInfo,
  59. SceneSelectKey,
  60. SceneAddType,
  61. SceneAddValue,
  62. };
  63. enum class CliEvent : uint8_t {
  64. CliReadSuccess,
  65. CliReadCRCError,
  66. CliReadNotKeyError,
  67. CliWriteSuccess,
  68. CliWriteFail,
  69. CliTimeout,
  70. CliInterrupt,
  71. };
  72. iButtonAppViewManager* get_view_manager();
  73. void switch_to_next_scene(Scene index);
  74. void search_and_switch_to_previous_scene(std::initializer_list<Scene> scenes_list);
  75. bool switch_to_previous_scene(uint8_t count = 1);
  76. Scene get_previous_scene();
  77. const GpioPin* get_ibutton_pin();
  78. KeyWorker* get_key_worker();
  79. iButtonKey* get_key();
  80. void notify_green_blink();
  81. void notify_yellow_blink();
  82. void notify_red_blink();
  83. void notify_green_on();
  84. void notify_green_off();
  85. void notify_red_on();
  86. void notify_red_off();
  87. void notify_error();
  88. void notify_success();
  89. void notify_vibro_on();
  90. void notify_vibro_off();
  91. void set_text_store(const char* text...);
  92. char* get_text_store();
  93. uint8_t get_text_store_size();
  94. SdCard_Api* get_sd_ex_api();
  95. FS_Api* get_fs_api();
  96. char* get_file_name();
  97. uint8_t get_file_name_size();
  98. void cli_cmd_callback(Cli* cli, string_t args, void* context);
  99. void cli_send_event(CliEvent scene);
  100. void generate_random_name(char* name, uint8_t max_name_size);
  101. private:
  102. std::list<Scene> previous_scenes_list = {Scene::SceneExit};
  103. Scene current_scene = Scene::SceneStart;
  104. iButtonAppViewManager view;
  105. osMessageQueueId_t cli_event_result;
  106. std::map<Scene, iButtonScene*> scenes = {
  107. {Scene::SceneStart, new iButtonSceneStart()},
  108. {Scene::SceneRead, new iButtonSceneRead()},
  109. {Scene::SceneCliRead, new iButtonSceneCliRead()},
  110. {Scene::SceneReadCRCError, new iButtonSceneReadCRCError()},
  111. {Scene::SceneReadNotKeyError, new iButtonSceneReadNotKeyError()},
  112. {Scene::SceneReadSuccess, new iButtonSceneReadSuccess()},
  113. {Scene::SceneReadedKeyMenu, new iButtonSceneReadedKeyMenu()},
  114. {Scene::SceneWrite, new iButtonSceneWrite()},
  115. {Scene::SceneCliWrite, new iButtonSceneCliWrite()},
  116. {Scene::SceneWriteSuccess, new iButtonSceneWriteSuccess()},
  117. {Scene::SceneEmulate, new iButtonSceneEmulate()},
  118. {Scene::SceneCliEmulate, new iButtonSceneCliEmulate()},
  119. {Scene::SceneSavedKeyMenu, new iButtonSceneSavedKeyMenu()},
  120. {Scene::SceneDeleteConfirm, new iButtonSceneDeleteConfirm()},
  121. {Scene::SceneDeleteSuccess, new iButtonSceneDeleteSuccess()},
  122. {Scene::SceneSaveName, new iButtonSceneSaveName()},
  123. {Scene::SceneSaveSuccess, new iButtonSceneSaveSuccess()},
  124. {Scene::SceneInfo, new iButtonSceneInfo()},
  125. {Scene::SceneSelectKey, new iButtonSceneSelectKey()},
  126. {Scene::SceneAddType, new iButtonSceneAddType()},
  127. {Scene::SceneAddValue, new iButtonSceneAddValue()},
  128. };
  129. KeyWorker* key_worker;
  130. iButtonKey key;
  131. SdCard_Api* sd_ex_api;
  132. FS_Api* fs_api;
  133. Cli* cli;
  134. static const uint8_t file_name_size = 100;
  135. char file_name[file_name_size];
  136. static const uint8_t text_store_size = 128;
  137. char text_store[text_store_size + 1];
  138. void notify_init();
  139. bool read_hex_byte(string_t arg, uint8_t* byte);
  140. void print_key_data(void);
  141. };