nfc_magic_scene_magic_info.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "../nfc_magic_app_i.h"
  2. #include "magic/nfc_magic_scanner.h"
  3. void nfc_magic_scene_magic_info_widget_callback(
  4. GuiButtonType result,
  5. InputType type,
  6. void* context) {
  7. NfcMagicApp* instance = context;
  8. if(type == InputTypeShort) {
  9. view_dispatcher_send_custom_event(instance->view_dispatcher, result);
  10. }
  11. }
  12. void nfc_magic_scene_magic_info_on_enter(void* context) {
  13. NfcMagicApp* instance = context;
  14. Widget* widget = instance->widget;
  15. notification_message(instance->notifications, &sequence_success);
  16. FuriString* message = furi_string_alloc();
  17. if(instance->protocol == NfcMagicProtocolClassic) {
  18. widget_add_string_element(
  19. widget, 0, 0, AlignLeft, AlignTop, FontPrimary, "It Might Be a Magic Card");
  20. furi_string_printf(message, "You can make sure the card is\nmagic by writing to it\n");
  21. } else {
  22. widget_add_string_element(
  23. widget, 0, 0, AlignLeft, AlignTop, FontPrimary, "Magic card detected!");
  24. }
  25. furi_string_cat_printf(
  26. message, "Magic Type: %s", nfc_magic_protocols_get_name(instance->protocol));
  27. widget_add_text_box_element(
  28. widget, 0, 10, 128, 54, AlignLeft, AlignTop, furi_string_get_cstr(message), false);
  29. if(instance->protocol == NfcMagicProtocolGen4) {
  30. gen4_copy(instance->gen4_data, nfc_magic_scanner_get_gen4_data(instance->scanner));
  31. furi_string_printf(
  32. message,
  33. "Revision: %02X %02X\n",
  34. instance->gen4_data->revision.data[3],
  35. instance->gen4_data->revision.data[4]);
  36. widget_add_string_element(
  37. widget, 0, 20, AlignLeft, AlignTop, FontSecondary, furi_string_get_cstr(message));
  38. furi_string_printf(
  39. message,
  40. "Configured As:\n%s",
  41. gen4_get_configuration_name(&instance->gen4_data->config));
  42. widget_add_string_multiline_element(
  43. widget, 0, 30, AlignLeft, AlignTop, FontSecondary, furi_string_get_cstr(message));
  44. }
  45. widget_add_button_element(
  46. widget, GuiButtonTypeLeft, "Retry", nfc_magic_scene_magic_info_widget_callback, instance);
  47. widget_add_button_element(
  48. widget, GuiButtonTypeRight, "More", nfc_magic_scene_magic_info_widget_callback, instance);
  49. furi_string_free(message);
  50. view_dispatcher_switch_to_view(instance->view_dispatcher, NfcMagicAppViewWidget);
  51. }
  52. bool nfc_magic_scene_magic_info_on_event(void* context, SceneManagerEvent event) {
  53. NfcMagicApp* instance = context;
  54. bool consumed = false;
  55. if(event.type == SceneManagerEventTypeCustom) {
  56. if(event.event == GuiButtonTypeLeft) {
  57. consumed = scene_manager_previous_scene(instance->scene_manager);
  58. } else if(event.event == GuiButtonTypeRight) {
  59. if(instance->protocol == NfcMagicProtocolGen1) {
  60. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen1Menu);
  61. consumed = true;
  62. } else if(instance->protocol == NfcMagicProtocolGen4) {
  63. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4Menu);
  64. consumed = true;
  65. } else if(instance->protocol == NfcMagicProtocolGen2) {
  66. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen2Menu);
  67. consumed = true;
  68. } else if(instance->protocol == NfcMagicProtocolClassic) {
  69. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneMfClassicMenu);
  70. consumed = true;
  71. }
  72. }
  73. } else if(event.type == SceneManagerEventTypeBack) {
  74. consumed = scene_manager_search_and_switch_to_previous_scene(
  75. instance->scene_manager, NfcMagicSceneStart);
  76. }
  77. return consumed;
  78. }
  79. void nfc_magic_scene_magic_info_on_exit(void* context) {
  80. NfcMagicApp* instance = context;
  81. widget_reset(instance->widget);
  82. }