wiegand.h 4.3 KB

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