nfc_scene_read_card_success.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include "nfc_scene_read_card_success.h"
  2. #include "../nfc_i.h"
  3. #include <furi.h>
  4. #include <gui/modules/dialog_ex.h>
  5. #include <gui/view_dispatcher.h>
  6. #define NFC_SCENE_READ_SUCCESS_SHIFT " "
  7. void nfc_scene_read_card_success_dialog_callback(DialogExResult result, void* context) {
  8. Nfc* nfc = (Nfc*)context;
  9. view_dispatcher_send_custom_event(nfc->nfc_common.view_dispatcher, result);
  10. }
  11. const void nfc_scene_read_card_success_on_enter(void* context) {
  12. Nfc* nfc = (Nfc*)context;
  13. // Clear device name
  14. nfc_device_set_name(&nfc->device, "");
  15. // Send notification
  16. notification_message(nfc->notifications, &sequence_success);
  17. // Setup view
  18. NfcDeviceData* data = (NfcDeviceData*)&nfc->nfc_common.worker_result;
  19. DialogEx* dialog_ex = nfc->dialog_ex;
  20. dialog_ex_set_left_button_text(dialog_ex, "Retry");
  21. dialog_ex_set_right_button_text(dialog_ex, "More");
  22. dialog_ex_set_header(dialog_ex, nfc_get_dev_type(data->device), 36, 8, AlignLeft, AlignCenter);
  23. dialog_ex_set_icon(dialog_ex, 8, 13, &I_Medium_chip_22x21);
  24. // Display UID
  25. if(data->uid_len == 4) {
  26. nfc_set_text_store(
  27. nfc,
  28. NFC_SCENE_READ_SUCCESS_SHIFT "%s\n" NFC_SCENE_READ_SUCCESS_SHIFT
  29. "ATQA: %02X%02X SAK: %02X\nUID: %02X %02X %02X %02X",
  30. nfc_get_protocol(data->protocol),
  31. data->atqa[0],
  32. data->atqa[1],
  33. data->sak,
  34. data->uid[0],
  35. data->uid[1],
  36. data->uid[2],
  37. data->uid[3]);
  38. } else if(data->uid_len == 7) {
  39. nfc_set_text_store(
  40. nfc,
  41. NFC_SCENE_READ_SUCCESS_SHIFT
  42. "%s\n" NFC_SCENE_READ_SUCCESS_SHIFT
  43. "ATQA: %02X%02X SAK: %02X\nUID: %02X %02X %02X %02X %02X %02X %02X",
  44. nfc_get_protocol(data->protocol),
  45. data->atqa[0],
  46. data->atqa[1],
  47. data->sak,
  48. data->uid[0],
  49. data->uid[1],
  50. data->uid[2],
  51. data->uid[3],
  52. data->uid[4],
  53. data->uid[5],
  54. data->uid[6]);
  55. }
  56. dialog_ex_set_text(dialog_ex, nfc->text_store, 8, 16, AlignLeft, AlignTop);
  57. dialog_ex_set_context(dialog_ex, nfc);
  58. dialog_ex_set_result_callback(dialog_ex, nfc_scene_read_card_success_dialog_callback);
  59. view_dispatcher_switch_to_view(nfc->nfc_common.view_dispatcher, NfcViewDialogEx);
  60. }
  61. const bool nfc_scene_read_card_success_on_event(void* context, uint32_t event) {
  62. Nfc* nfc = (Nfc*)context;
  63. if(event == DialogExResultLeft) {
  64. view_dispatcher_send_navigation_event(
  65. nfc->nfc_common.view_dispatcher, ViewNavigatorEventBack);
  66. return true;
  67. } else if(event == DialogExResultRight) {
  68. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_card_menu);
  69. view_dispatcher_send_navigation_event(
  70. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  71. return true;
  72. }
  73. return false;
  74. }
  75. const void nfc_scene_read_card_success_on_exit(void* context) {
  76. Nfc* nfc = (Nfc*)context;
  77. DialogEx* dialog_ex = nfc->dialog_ex;
  78. dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
  79. dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
  80. dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
  81. dialog_ex_set_left_button_text(dialog_ex, NULL);
  82. dialog_ex_set_right_button_text(dialog_ex, NULL);
  83. dialog_ex_set_result_callback(dialog_ex, NULL);
  84. dialog_ex_set_context(dialog_ex, NULL);
  85. }
  86. AppScene* nfc_scene_read_card_success_alloc() {
  87. AppScene* scene = furi_alloc(sizeof(AppScene));
  88. scene->id = NfcSceneReadCardSuccess;
  89. scene->on_enter = nfc_scene_read_card_success_on_enter;
  90. scene->on_event = nfc_scene_read_card_success_on_event;
  91. scene->on_exit = nfc_scene_read_card_success_on_exit;
  92. return scene;
  93. }
  94. void nfc_scene_read_card_success_free(AppScene* scene) {
  95. free(scene);
  96. }