wiegand.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #pragma once
  2. #include <furi.h>
  3. #include <gui/gui.h>
  4. #include <gui/view_dispatcher.h>
  5. #include <gui/scene_manager.h>
  6. #include <gui/modules/widget.h>
  7. #include <gui/modules/submenu.h>
  8. #include <gui/modules/text_input.h>
  9. #include <lib/toolbox/random_name.h>
  10. #include <notification/notification.h>
  11. #include <notification/notification_messages.h>
  12. #include <dialogs/dialogs.h>
  13. #include <storage/storage.h>
  14. extern const GpioPin* const pinD0;
  15. extern const GpioPin* const pinD1;
  16. extern volatile int bit_count;
  17. #define MAX_BITS 42
  18. extern volatile bool data[];
  19. extern volatile uint32_t data_fall[];
  20. extern volatile uint32_t data_rise[];
  21. extern bool data_saved;
  22. #define WIEGAND_KEY_NAME_SIZE 25
  23. #define WIEGAND_APPS_DATA_FOLDER EXT_PATH("apps_data")
  24. #define WIEGAND_SAVE_FOLDER \
  25. WIEGAND_APPS_DATA_FOLDER "/" \
  26. "wiegand"
  27. #define WIEGAND_SAVE_EXTENSION ".wgn"
  28. #define TAG "WIEGAND_APP"
  29. typedef enum {
  30. WiegandMainMenuScene,
  31. WiegandInstructionsScene,
  32. WiegandReadScene,
  33. WiegandDataScene,
  34. WiegandSaveScene,
  35. WiegandLoadScene,
  36. WiegandSceneCount,
  37. } WiegandScene;
  38. typedef enum {
  39. WiegandSubmenuView,
  40. WiegandWidgetView,
  41. WiegandTextInputView,
  42. } WiegandView;
  43. typedef struct App {
  44. SceneManager* scene_manager;
  45. ViewDispatcher* view_dispatcher;
  46. Submenu* submenu;
  47. Widget* widget;
  48. TextInput* text_input;
  49. DialogsApp* dialogs;
  50. FuriString* file_path;
  51. char file_name[WIEGAND_KEY_NAME_SIZE];
  52. FuriTimer* timer;
  53. } App;
  54. typedef enum {
  55. WiegandMainMenuInstructions,
  56. WiegandMainMenuRead,
  57. WiegandMainMenuLoad,
  58. } WiegandMainMenuSceneIndex;
  59. typedef enum {
  60. WiegandMainMenuUnknownEvent,
  61. WiegandMainMenuInstructionsEvent,
  62. WiegandMainMenuReadEvent,
  63. WiegandMainMenuLoadEvent,
  64. } WiegandMainMenuEvent;
  65. typedef enum {
  66. WiegandDataSceneSaveButtonEvent,
  67. WiegandDataScenePlayButtonEvent,
  68. WiegandDataSceneSaveFileEvent,
  69. } WiegandDataEvent;
  70. void wiegand_menu_callback(void* context, uint32_t index);
  71. void wiegand_main_menu_scene_on_enter(void* context);
  72. bool wiegand_main_menu_scene_on_event(void* context, SceneManagerEvent event);
  73. // void wiegand_main_menu_scene_on_exit(void* context);
  74. void wiegand_instructions_scene_on_enter(void* context);
  75. // bool wiegand_instructions_scene_on_event(void* context, SceneManagerEvent event);
  76. // void wiegand_instructions_scene_on_exit(void* context);
  77. void wiegand_isr_d0(void* context);
  78. void wiegand_isr_d1(void* context);
  79. void wiegand_start_read(void* context);
  80. void wiegand_stop_read(void* context);
  81. void wiegand_timer_callback(void* context);
  82. void wiegand_read_scene_on_enter(void* context);
  83. // bool wiegand_read_scene_on_event(void* context, SceneManagerEvent event);
  84. void wiegand_read_scene_on_exit(void* context);
  85. void wiegand_add_info_4bit_8bit(FuriString* buffer);
  86. void wiegand_add_info_26bit(FuriString* buffer);
  87. void wiegand_add_info_24bit(FuriString* buffer);
  88. void wiegand_add_info(FuriString* buffer);
  89. void single_vibro();
  90. void wiegand_play();
  91. void wiegand_button_callback(GuiButtonType result, InputType type, void* context);
  92. void wiegand_data_scene_on_enter(void* context);
  93. bool wiegand_data_scene_on_event(void* context, SceneManagerEvent event);
  94. // void wiegand_data_scene_on_exit(void* context);
  95. void wiegand_data_scene_save_name_text_input_callback(void* context);
  96. void ensure_dir_exists(Storage* storage);
  97. void wiegand_save(void* context);
  98. void wiegand_save_scene_on_enter(void* context);
  99. bool wiegand_save_scene_on_event(void* context, SceneManagerEvent event);
  100. // void wiegand_save_scene_on_exit(void* context);
  101. void wiegand_load_scene_on_enter(void* context);
  102. // bool wiegand_load_scene_on_event(void* context, SceneManagerEvent event);
  103. // void wiegand_load_scene_on_exit(void* context);
  104. bool wiegand_custom_callback(void* context, uint32_t custom_event);
  105. bool wiegand_back_event_callback(void* context);
  106. // Methods with no implementation.
  107. bool wiegand_empty_scene_on_event(void* context, SceneManagerEvent event);
  108. void wiegand_empty_scene_on_exit(void* _ctx);
  109. App* app_alloc();
  110. void app_free(void* context);