nfc_scene_read_emv_data_success.c 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. widget_add_button_element(
  14. nfc->widget,
  15. GuiButtonTypeLeft,
  16. "Back",
  17. nfc_scene_read_emv_data_success_widget_callback,
  18. nfc);
  19. widget_add_button_element(
  20. nfc->widget,
  21. GuiButtonTypeRight,
  22. "Save",
  23. nfc_scene_read_emv_data_success_widget_callback,
  24. nfc);
  25. 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. widget_add_string_element(nfc->widget, 64, 13, AlignCenter, AlignTop, FontSecondary, pan_str);
  41. char atqa_str[16];
  42. snprintf(atqa_str, sizeof(atqa_str), "ATQA: %02X%02X", nfc_data->atqa[0], nfc_data->atqa[1]);
  43. widget_add_string_element(nfc->widget, 121, 32, AlignRight, AlignTop, FontSecondary, atqa_str);
  44. char uid_str[32];
  45. snprintf(
  46. uid_str,
  47. sizeof(uid_str),
  48. "UID: %02X %02X %02X %02X",
  49. nfc_data->uid[0],
  50. nfc_data->uid[1],
  51. nfc_data->uid[2],
  52. nfc_data->uid[3]);
  53. widget_add_string_element(nfc->widget, 7, 42, AlignLeft, AlignTop, FontSecondary, uid_str);
  54. char sak_str[16];
  55. snprintf(sak_str, sizeof(sak_str), "SAK: %02X", nfc_data->sak);
  56. widget_add_string_element(nfc->widget, 121, 42, AlignRight, AlignTop, FontSecondary, sak_str);
  57. view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget);
  58. }
  59. const bool nfc_scene_read_emv_data_success_on_event(void* context, SceneManagerEvent event) {
  60. Nfc* nfc = (Nfc*)context;
  61. if(event.type == SceneManagerEventTypeCustom) {
  62. if(event.event == GuiButtonTypeLeft) {
  63. return scene_manager_search_previous_scene(
  64. nfc->scene_manager, NfcSceneReadEmvAppSuccess);
  65. } else if(event.event == GuiButtonTypeRight) {
  66. nfc->dev.format = NfcDeviceSaveFormatBankCard;
  67. scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveName);
  68. return true;
  69. }
  70. } else if(event.type == SceneManagerEventTypeNavigation) {
  71. return scene_manager_search_previous_scene(nfc->scene_manager, NfcSceneReadEmvAppSuccess);
  72. }
  73. return false;
  74. }
  75. const void nfc_scene_read_emv_data_success_on_exit(void* context) {
  76. Nfc* nfc = (Nfc*)context;
  77. widget_clear(nfc->widget);
  78. }