nfc_scene_read_emv_data_success.c 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "../nfc_i.h"
  2. void nfc_scene_read_emv_data_success_widget_callback(GuiButtonType result, void* context) {
  3. Nfc* nfc = (Nfc*)context;
  4. view_dispatcher_send_custom_event(nfc->view_dispatcher, result);
  5. }
  6. void nfc_scene_read_emv_data_success_on_enter(void* context) {
  7. Nfc* nfc = (Nfc*)context;
  8. NfcEmvData* emv_data = &nfc->dev.dev_data.emv_data;
  9. NfcDeviceCommomData* nfc_data = &nfc->dev.dev_data.nfc_data;
  10. // Clear device name
  11. nfc_device_set_name(&nfc->dev, "");
  12. // Setup Custom Widget view
  13. gui_widget_add_button_element(
  14. nfc->widget,
  15. GuiButtonTypeLeft,
  16. "Back",
  17. nfc_scene_read_emv_data_success_widget_callback,
  18. nfc);
  19. gui_widget_add_button_element(
  20. nfc->widget,
  21. GuiButtonTypeRight,
  22. "Save",
  23. nfc_scene_read_emv_data_success_widget_callback,
  24. nfc);
  25. gui_widget_add_string_element(
  26. nfc->widget, 64, 3, AlignCenter, AlignTop, FontSecondary, nfc->dev.dev_data.emv_data.name);
  27. char pan_str[32];
  28. snprintf(
  29. pan_str,
  30. sizeof(pan_str),
  31. "%02X%02X %02X%02X %02X%02X %02X%02X",
  32. emv_data->number[0],
  33. emv_data->number[1],
  34. emv_data->number[2],
  35. emv_data->number[3],
  36. emv_data->number[4],
  37. emv_data->number[5],
  38. emv_data->number[6],
  39. emv_data->number[7]);
  40. gui_widget_add_string_element(
  41. nfc->widget, 64, 13, AlignCenter, AlignTop, FontSecondary, pan_str);
  42. char atqa_str[16];
  43. snprintf(atqa_str, sizeof(atqa_str), "ATQA: %02X%02X", nfc_data->atqa[0], nfc_data->atqa[1]);
  44. gui_widget_add_string_element(
  45. nfc->widget, 121, 32, AlignRight, AlignTop, FontSecondary, atqa_str);
  46. char uid_str[32];
  47. snprintf(
  48. uid_str,
  49. sizeof(uid_str),
  50. "UID: %02X %02X %02X %02X",
  51. nfc_data->uid[0],
  52. nfc_data->uid[1],
  53. nfc_data->uid[2],
  54. nfc_data->uid[3]);
  55. gui_widget_add_string_element(nfc->widget, 7, 42, AlignLeft, AlignTop, FontSecondary, uid_str);
  56. char sak_str[16];
  57. snprintf(sak_str, sizeof(sak_str), "SAK: %02X", nfc_data->sak);
  58. gui_widget_add_string_element(
  59. nfc->widget, 121, 42, AlignRight, AlignTop, FontSecondary, sak_str);
  60. view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget);
  61. }
  62. const bool nfc_scene_read_emv_data_success_on_event(void* context, SceneManagerEvent event) {
  63. Nfc* nfc = (Nfc*)context;
  64. if(event.type == SceneManagerEventTypeCustom) {
  65. if(event.event == GuiButtonTypeLeft) {
  66. return scene_manager_search_previous_scene(
  67. nfc->scene_manager, NfcSceneReadEmvAppSuccess);
  68. } else if(event.event == GuiButtonTypeRight) {
  69. nfc->dev.format = NfcDeviceSaveFormatBankCard;
  70. scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName);
  71. return true;
  72. }
  73. }
  74. return false;
  75. }
  76. const void nfc_scene_read_emv_data_success_on_exit(void* context) {
  77. Nfc* nfc = (Nfc*)context;
  78. gui_widget_clear(nfc->widget);
  79. }