nfc_magic_scene_gen4_select_shd_mode.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "../nfc_magic_app_i.h"
  2. /* SHADOW MODES DESCRIPTION:
  3. 00: pre-write, shadow data can be written
  4. 01: restore mode
  5. WARNING: new UMC (06a0) cards return garbage data when using 01
  6. 02: disabled
  7. 03: disabled, high speed R/W mode for Ultralight?
  8. 04: split mode, work with new UMC. With old UMC is untested.
  9. */
  10. enum SubmenuIndex {
  11. SubmenuIndexPreWriteMode,
  12. SubmenuIndexRestoreMode,
  13. SubmenuIndexDisable,
  14. SubmenuIndexDisableHighSpeed,
  15. SubmenuIndexSplitMode,
  16. };
  17. void nfc_magic_scene_gen4_select_shd_mode_submenu_callback(void* context, uint32_t index) {
  18. NfcMagicApp* instance = context;
  19. view_dispatcher_send_custom_event(instance->view_dispatcher, index);
  20. }
  21. void nfc_magic_scene_gen4_select_shd_mode_on_enter(void* context) {
  22. NfcMagicApp* instance = context;
  23. Submenu* submenu = instance->submenu;
  24. submenu_add_item(
  25. submenu,
  26. "Pre-Write",
  27. SubmenuIndexPreWriteMode,
  28. nfc_magic_scene_gen4_select_shd_mode_submenu_callback,
  29. instance);
  30. submenu_add_item(
  31. submenu,
  32. "Restore",
  33. SubmenuIndexRestoreMode,
  34. nfc_magic_scene_gen4_select_shd_mode_submenu_callback,
  35. instance);
  36. submenu_add_item(
  37. submenu,
  38. "Disable",
  39. SubmenuIndexDisable,
  40. nfc_magic_scene_gen4_select_shd_mode_submenu_callback,
  41. instance);
  42. submenu_add_item(
  43. submenu,
  44. "Disable (High-Speed)",
  45. SubmenuIndexDisableHighSpeed,
  46. nfc_magic_scene_gen4_select_shd_mode_submenu_callback,
  47. instance);
  48. submenu_add_item(
  49. submenu,
  50. "Split",
  51. SubmenuIndexSplitMode,
  52. nfc_magic_scene_gen4_select_shd_mode_submenu_callback,
  53. instance);
  54. submenu_set_selected_item(
  55. submenu,
  56. scene_manager_get_scene_state(instance->scene_manager, NfcMagicSceneGen4SelectShdMode));
  57. view_dispatcher_switch_to_view(instance->view_dispatcher, NfcMagicAppViewMenu);
  58. }
  59. bool nfc_magic_scene_gen4_select_shd_mode_on_event(void* context, SceneManagerEvent event) {
  60. NfcMagicApp* instance = context;
  61. bool consumed = false;
  62. if(event.type == SceneManagerEventTypeCustom) {
  63. if(event.event == SubmenuIndexPreWriteMode) {
  64. scene_manager_set_scene_state(
  65. instance->scene_manager, NfcMagicSceneGen4SetShdMode, SubmenuIndexPreWriteMode);
  66. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4SetShdMode);
  67. consumed = true;
  68. } else if(event.event == SubmenuIndexRestoreMode) {
  69. scene_manager_set_scene_state(
  70. instance->scene_manager, NfcMagicSceneGen4SetShdMode, SubmenuIndexRestoreMode);
  71. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4SetShdMode);
  72. consumed = true;
  73. } else if(event.event == SubmenuIndexDisable) {
  74. scene_manager_set_scene_state(
  75. instance->scene_manager, NfcMagicSceneGen4SetShdMode, SubmenuIndexDisable);
  76. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4SetShdMode);
  77. consumed = true;
  78. } else if(event.event == SubmenuIndexDisableHighSpeed) {
  79. scene_manager_set_scene_state(
  80. instance->scene_manager,
  81. NfcMagicSceneGen4SetShdMode,
  82. SubmenuIndexDisableHighSpeed);
  83. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4SetShdMode);
  84. consumed = true;
  85. } else if(event.event == SubmenuIndexSplitMode) {
  86. scene_manager_set_scene_state(
  87. instance->scene_manager, NfcMagicSceneGen4SetShdMode, SubmenuIndexSplitMode);
  88. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4SetShdMode);
  89. consumed = true;
  90. }
  91. scene_manager_set_scene_state(
  92. instance->scene_manager, NfcMagicSceneGen4SelectShdMode, event.event);
  93. } else if(event.type == SceneManagerEventTypeBack) {
  94. consumed = scene_manager_search_and_switch_to_previous_scene(
  95. instance->scene_manager, NfcMagicSceneGen4ActionsMenu);
  96. }
  97. return consumed;
  98. }
  99. void nfc_magic_scene_gen4_select_shd_mode_on_exit(void* context) {
  100. NfcMagicApp* instance = context;
  101. submenu_reset(instance->submenu);
  102. }