nfc_magic_scene_gen4_menu.c 3.6 KB

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