nfc_magic_scene_magic_info.c 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "../nfc_magic_app_i.h"
  2. #include "core/string.h"
  3. #include "gui/canvas.h"
  4. #include "gui/modules/widget.h"
  5. #include "lib/magic/nfc_magic_scanner.h"
  6. #include "protocols/gen4/gen4.h"
  7. void nfc_magic_scene_magic_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_magic_info_on_enter(void* context) {
  17. NfcMagicApp* instance = context;
  18. Widget* widget = instance->widget;
  19. notification_message(instance->notifications, &sequence_success);
  20. //widget_add_icon_element(widget, 73, 17, &I_DolphinCommon_56x48);
  21. widget_add_string_element(
  22. widget, 3, 4, AlignLeft, AlignTop, FontPrimary, "Magic card detected");
  23. widget_add_string_element(
  24. widget,
  25. 3,
  26. 17,
  27. AlignLeft,
  28. AlignTop,
  29. FontSecondary,
  30. nfc_magic_protocols_get_name(instance->protocol));
  31. if(instance->protocol == NfcMagicProtocolGen4) {
  32. gen4_copy(instance->gen4_data, nfc_magic_scanner_get_gen4_data(instance->scanner));
  33. FuriString* message = furi_string_alloc();
  34. furi_string_printf(
  35. message,
  36. "Revision: %02X %02X\n",
  37. instance->gen4_data->revision.data[3],
  38. instance->gen4_data->revision.data[4]);
  39. widget_add_string_element(
  40. widget, 55, 17, AlignLeft, AlignTop, FontSecondary, furi_string_get_cstr(message));
  41. furi_string_printf(
  42. message,
  43. "Configured As:\n%s",
  44. gen4_get_configuration_name(&instance->gen4_data->config));
  45. widget_add_string_multiline_element(
  46. widget, 3, 27, AlignLeft, AlignTop, FontSecondary, furi_string_get_cstr(message));
  47. furi_string_free(message);
  48. }
  49. widget_add_button_element(
  50. widget, GuiButtonTypeLeft, "Retry", nfc_magic_scene_magic_info_widget_callback, instance);
  51. widget_add_button_element(
  52. widget, GuiButtonTypeRight, "More", nfc_magic_scene_magic_info_widget_callback, instance);
  53. view_dispatcher_switch_to_view(instance->view_dispatcher, NfcMagicAppViewWidget);
  54. }
  55. bool nfc_magic_scene_magic_info_on_event(void* context, SceneManagerEvent event) {
  56. NfcMagicApp* instance = context;
  57. bool consumed = false;
  58. if(event.type == SceneManagerEventTypeCustom) {
  59. if(event.event == GuiButtonTypeLeft) {
  60. consumed = scene_manager_previous_scene(instance->scene_manager);
  61. } else if(event.event == GuiButtonTypeRight) {
  62. if(instance->protocol == NfcMagicProtocolGen1) {
  63. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen1Menu);
  64. consumed = true;
  65. } else {
  66. scene_manager_next_scene(instance->scene_manager, NfcMagicSceneGen4Menu);
  67. consumed = true;
  68. }
  69. }
  70. } else if(event.type == SceneManagerEventTypeBack) {
  71. consumed = scene_manager_search_and_switch_to_previous_scene(
  72. instance->scene_manager, NfcMagicSceneStart);
  73. }
  74. return consumed;
  75. }
  76. void nfc_magic_scene_magic_info_on_exit(void* context) {
  77. NfcMagicApp* instance = context;
  78. widget_reset(instance->widget);
  79. }