nfc_magic_scene_gen4_menu.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "../nfc_magic_app_i.h"
  2. #include "furi_hal_rtc.h"
  3. enum SubmenuIndex {
  4. SubmenuIndexWrite,
  5. SubmenuIndexChangePassword,
  6. SubmenuIndexSetShadowMode,
  7. SubmenuIndexSetDirectWriteBlock0Mode,
  8. SubmenuIndexGetRevision,
  9. SubmenuIndexGetConfig,
  10. SubmenuIndexWipe,
  11. };
  12. void nfc_magic_scene_gen4_menu_submenu_callback(void* context, uint32_t index) {
  13. NfcMagicApp* instance = context;
  14. view_dispatcher_send_custom_event(instance->view_dispatcher, index);
  15. }
  16. void nfc_magic_scene_gen4_menu_on_enter(void* context) {
  17. NfcMagicApp* instance = context;
  18. Submenu* submenu = instance->submenu;
  19. submenu_add_item(
  20. submenu, "Write", SubmenuIndexWrite, nfc_magic_scene_gen4_menu_submenu_callback, instance);
  21. submenu_add_item(
  22. submenu,
  23. "Change password",
  24. SubmenuIndexChangePassword,
  25. nfc_magic_scene_gen4_menu_submenu_callback,
  26. instance);
  27. submenu_add_item(
  28. submenu,
  29. "Set Shadow Mode",
  30. SubmenuIndexSetShadowMode,
  31. nfc_magic_scene_gen4_menu_submenu_callback,
  32. instance);
  33. submenu_add_item(
  34. submenu,
  35. "Set Gen2 Mode",
  36. SubmenuIndexSetDirectWriteBlock0Mode,
  37. nfc_magic_scene_gen4_menu_submenu_callback,
  38. instance);
  39. submenu_add_item(
  40. submenu,
  41. "Get Revision",
  42. SubmenuIndexGetRevision,
  43. nfc_magic_scene_gen4_menu_submenu_callback,
  44. instance);
  45. submenu_add_item(
  46. submenu, "Wipe", SubmenuIndexWipe, nfc_magic_scene_gen4_menu_submenu_callback, instance);
  47. if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
  48. submenu_add_item(
  49. submenu,
  50. "Get Config",
  51. SubmenuIndexGetConfig,
  52. nfc_magic_scene_gen4_menu_submenu_callback,
  53. instance);
  54. }
  55. submenu_set_selected_item(
  56. submenu, scene_manager_get_scene_state(instance->scene_manager, NfcMagicSceneGen4Menu));
  57. view_dispatcher_switch_to_view(instance->view_dispatcher, NfcMagicAppViewMenu);
  58. }
  59. bool nfc_magic_scene_gen4_menu_on_event(void* context, SceneManagerEvent event) {
  60. NfcMagicApp* instance = context;
  61. bool consumed = false;
  62. if(event.type == SceneManagerEventTypeCustom) {
  63. if(event.event == SubmenuIndexWrite) {
  64. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneFileSelect);
  65. consumed = true;
  66. } else if(event.event == SubmenuIndexChangePassword) {
  67. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneKeyInput);
  68. consumed = true;
  69. } else if(event.event == SubmenuIndexWipe) {
  70. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneWipe);
  71. consumed = true;
  72. } else if(event.event == SubmenuIndexGetConfig) {
  73. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4GetCfg);
  74. consumed = true;
  75. } else if(event.event == SubmenuIndexGetRevision) {
  76. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4Revision);
  77. consumed = true;
  78. } else if(event.event == SubmenuIndexSetShadowMode) {
  79. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4SelectShdMode);
  80. consumed = true;
  81. } else if(event.event == SubmenuIndexSetDirectWriteBlock0Mode) {
  82. scene_manager_next_scene(
  83. instance->scene_manager, NfcMagicSceneGen4SelectDirectWriteBlock0Mode);
  84. consumed = true;
  85. }
  86. scene_manager_set_scene_state(instance->scene_manager, NfcMagicSceneGen4Menu, event.event);
  87. } else if(event.type == SceneManagerEventTypeBack) {
  88. if(instance->gen4_password != 0) {
  89. consumed = scene_manager_search_and_switch_to_previous_scene(
  90. instance->scene_manager, NfcMagicSceneGen4ActionsMenu);
  91. } else {
  92. consumed = scene_manager_search_and_switch_to_previous_scene(
  93. instance->scene_manager, NfcMagicSceneStart);
  94. }
  95. }
  96. return consumed;
  97. }
  98. void nfc_magic_scene_gen4_menu_on_exit(void* context) {
  99. NfcMagicApp* instance = context;
  100. submenu_reset(instance->submenu);
  101. }