nfc_magic_scene_gen2_write_check.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "../nfc_magic_app_i.h"
  2. void nfc_magic_scene_gen2_write_check_widget_callback(
  3. GuiButtonType result,
  4. InputType type,
  5. void* context) {
  6. NfcMagicApp* instance = context;
  7. if(type == InputTypeShort) {
  8. view_dispatcher_send_custom_event(instance->view_dispatcher, result);
  9. }
  10. }
  11. void nfc_magic_scene_gen2_write_check_on_enter(void* context) {
  12. NfcMagicApp* instance = context;
  13. Widget* widget = instance->widget;
  14. Gen2PollerWriteProblem can_write_all = gen2_poller_can_write_everything(instance->target_dev);
  15. furi_assert(can_write_all != Gen2PollerWriteProblemNoData, "No MFC data in nfc device");
  16. if(can_write_all == Gen2PollerWriteProblemNone) {
  17. if(instance->gen2_poller_is_wipe_mode) {
  18. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneWipe);
  19. return;
  20. } else {
  21. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneWrite);
  22. return;
  23. }
  24. }
  25. widget_add_string_element(widget, 0, 0, AlignLeft, AlignTop, FontPrimary, "Write problems");
  26. if(instance->gen2_poller_is_wipe_mode) {
  27. widget_add_text_box_element(
  28. widget,
  29. 0,
  30. 13,
  31. 128,
  32. 54,
  33. AlignLeft,
  34. AlignTop,
  35. "Not all sectors can be wiped\nTry wiping anyway?",
  36. false);
  37. } else {
  38. if(can_write_all == Gen2PollerWriteProblemMissingSourceData) {
  39. widget_add_text_box_element(
  40. widget,
  41. 0,
  42. 13,
  43. 128,
  44. 54,
  45. AlignLeft,
  46. AlignTop,
  47. "The source dump is incomplete\nCloned card may not work\nTry writing anyway?",
  48. false);
  49. } else if(can_write_all == Gen2PollerWriteProblemMissingTargetKeys) {
  50. widget_add_text_box_element(
  51. widget,
  52. 0,
  53. 13,
  54. 128,
  55. 54,
  56. AlignLeft,
  57. AlignTop,
  58. "Keys to write some sectors\nare not available\nCloned card may not work\nTry writing anyway?",
  59. false);
  60. } else if(can_write_all == Gen2PollerWriteProblemLockedAccessBits) {
  61. widget_add_text_box_element(
  62. widget,
  63. 0,
  64. 13,
  65. 128,
  66. 54,
  67. AlignLeft,
  68. AlignTop,
  69. "Target card doesn't allow\nwriting in some cases\nCloned card may not work\nTry writing anyway?",
  70. false);
  71. }
  72. }
  73. widget_add_button_element(
  74. widget,
  75. GuiButtonTypeCenter,
  76. "Continue",
  77. nfc_magic_scene_gen2_write_check_widget_callback,
  78. instance);
  79. widget_add_button_element(
  80. widget,
  81. GuiButtonTypeLeft,
  82. "Back",
  83. nfc_magic_scene_gen2_write_check_widget_callback,
  84. instance);
  85. // Setup and start worker
  86. view_dispatcher_switch_to_view(instance->view_dispatcher, NfcMagicAppViewWidget);
  87. }
  88. bool nfc_magic_scene_gen2_write_check_on_event(void* context, SceneManagerEvent event) {
  89. NfcMagicApp* instance = context;
  90. bool consumed = false;
  91. if(event.type == SceneManagerEventTypeCustom) {
  92. if(event.event == GuiButtonTypeLeft) {
  93. consumed = scene_manager_search_and_switch_to_previous_scene(
  94. instance->scene_manager, NfcMagicSceneGen2Menu);
  95. } else if(event.event == GuiButtonTypeCenter) {
  96. if(instance->gen2_poller_is_wipe_mode) {
  97. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneWipe);
  98. } else {
  99. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneWrite);
  100. }
  101. consumed = true;
  102. }
  103. }
  104. return consumed;
  105. }
  106. void nfc_magic_scene_gen2_write_check_on_exit(void* context) {
  107. NfcMagicApp* instance = context;
  108. widget_reset(instance->widget);
  109. }