nfc_magic_scene_gen4_show_info.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #include "../nfc_magic_app_i.h"
  2. #include "core/string.h"
  3. #include "gui/modules/widget_elements/widget_element.h"
  4. #include "gui/scene_manager.h"
  5. #include <bit_lib.h>
  6. #include <stdbool.h>
  7. void nfc_magic_scene_gen4_show_info_widget_callback(
  8. GuiButtonType result,
  9. InputType type,
  10. void* context) {
  11. NfcMagicApp* instance = context;
  12. if(type == InputTypeShort) {
  13. view_dispatcher_send_custom_event(instance->view_dispatcher, result);
  14. }
  15. }
  16. void nfc_magic_scene_gen4_show_info_on_enter(void* context) {
  17. NfcMagicApp* instance = context;
  18. Widget* widget = instance->widget;
  19. if(scene_manager_get_scene_state(instance->scene_manager, NfcMagicSceneGen4ShowInfo))
  20. notification_message(instance->notifications, &sequence_success);
  21. scene_manager_set_scene_state(instance->scene_manager, NfcMagicSceneGen4ShowInfo, false);
  22. Gen4* gen4 = instance->gen4_data;
  23. Gen4DirectWriteBlock0Mode dw_mode = gen4->config.data_parsed.direct_write_mode;
  24. Gen4ShadowMode s_mode = gen4->config.data_parsed.gtu_mode;
  25. uint8_t ats_len = gen4->config.data_parsed.ats_len;
  26. FuriString* output = furi_string_alloc();
  27. // Revision
  28. furi_string_cat_printf(
  29. output, "Revision: %02X %02X\n", gen4->revision.data[3], gen4->revision.data[4]);
  30. // Password
  31. furi_string_cat_printf(
  32. output,
  33. "Password: %02X %02X %02X %02X\n",
  34. gen4->config.data_parsed.password.bytes[0],
  35. gen4->config.data_parsed.password.bytes[1],
  36. gen4->config.data_parsed.password.bytes[2],
  37. gen4->config.data_parsed.password.bytes[3]);
  38. // Shadow mode
  39. furi_string_cat_printf(output, "Shadow Mode: %s\n", gen4_get_shadow_mode_name(s_mode));
  40. // Direct write to block 0 mode
  41. furi_string_cat_printf(
  42. output, "Direct Write Mode: %s\n", gen4_get_direct_write_mode_name(dw_mode));
  43. /////////////////////////////////////////////////////////////////////////////////////////////////////
  44. furi_string_cat_printf(output, ":::::::::::::[Configured As]::::::::::::::\n");
  45. /////////////////////////////////////////////////////////////////////////////////////////////////////
  46. // Configuration type:
  47. furi_string_cat_printf(output, "%s\n", gen4_get_configuration_name(&gen4->config));
  48. // UID len
  49. furi_string_cat_printf(
  50. output, "UID Length: %s\n", gen4_get_uid_len_num(gen4->config.data_parsed.uid_len_code));
  51. // ATS
  52. furi_string_cat_printf(output, "ATS:");
  53. if(ats_len)
  54. for(uint8_t i = 0; i < ats_len; i++)
  55. furi_string_cat_printf(output, " %02X", gen4->config.data_parsed.ats[i]);
  56. else
  57. furi_string_cat_printf(output, " No");
  58. furi_string_cat_printf(output, "\n");
  59. // ATQA
  60. furi_string_cat_printf(
  61. output,
  62. "ATQA: %02X %02X\n",
  63. gen4->config.data_parsed.atqa[0],
  64. gen4->config.data_parsed.atqa[1]);
  65. // SAK
  66. furi_string_cat_printf(output, "SAK: %02X\n", gen4->config.data_parsed.sak);
  67. // Blocks
  68. furi_string_cat_printf(
  69. output,
  70. "Total blocks: %u",
  71. gen4->config.data_parsed.total_blocks + 1); // config stores the number of the last block
  72. widget_add_string_element(widget, 3, 4, AlignLeft, AlignTop, FontPrimary, "Gen4 Info");
  73. widget_add_text_scroll_element(widget, 3, 17, 124, 50, furi_string_get_cstr(output));
  74. widget_add_button_element(
  75. widget,
  76. GuiButtonTypeRight,
  77. "More",
  78. nfc_magic_scene_gen4_show_info_widget_callback,
  79. instance);
  80. furi_string_free(output);
  81. view_dispatcher_switch_to_view(instance->view_dispatcher, NfcMagicAppViewWidget);
  82. }
  83. bool nfc_magic_scene_gen4_show_info_on_event(void* context, SceneManagerEvent event) {
  84. NfcMagicApp* instance = context;
  85. bool consumed = false;
  86. if(event.type == SceneManagerEventTypeCustom) {
  87. if(event.event == GuiButtonTypeRight) {
  88. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4ShowCfg);
  89. consumed = true;
  90. }
  91. } else if(event.type == SceneManagerEventTypeBack) {
  92. consumed = scene_manager_search_and_switch_to_previous_scene(
  93. instance->scene_manager, NfcMagicSceneGen4Menu);
  94. }
  95. return consumed;
  96. }
  97. void nfc_magic_scene_gen4_show_info_on_exit(void* context) {
  98. NfcMagicApp* instance = context;
  99. widget_reset(instance->widget);
  100. }