nfc_magic_scene_gen4_show_info.c 4.1 KB

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