weebo_scene_write.c 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "../weebo_i.h"
  2. #include <nfc/protocols/mf_ultralight/mf_ultralight_poller.h>
  3. #define TAG "SceneWrite"
  4. NfcCommand weebo_scene_write_poller_callback(NfcGenericEvent event, void* context) {
  5. furi_assert(event.protocol == NfcProtocolMfUltralight);
  6. Weebo* weebo = context;
  7. NfcCommand ret = NfcCommandContinue;
  8. const MfUltralightPollerEvent* mf_ultralight_event = event.event_data;
  9. if(mf_ultralight_event->type == MfUltralightPollerEventTypeReadSuccess) {
  10. nfc_device_set_data(
  11. weebo->nfc_device, NfcProtocolMfUltralight, nfc_poller_get_data(weebo->poller));
  12. const MfUltralightData* data =
  13. nfc_device_get_data(weebo->nfc_device, NfcProtocolMfUltralight);
  14. if(!mf_ultralight_is_all_data_read(data)) {
  15. ret = NfcCommandStop;
  16. }
  17. if(data->type != MfUltralightTypeNTAG215) {
  18. ret = NfcCommandStop;
  19. }
  20. FURI_LOG_D(
  21. TAG,
  22. "UID: %02X%02X%02X%02X%02X%02X",
  23. data->iso14443_3a_data->uid[0],
  24. data->iso14443_3a_data->uid[1],
  25. data->iso14443_3a_data->uid[2],
  26. data->iso14443_3a_data->uid[3],
  27. data->iso14443_3a_data->uid[4],
  28. data->iso14443_3a_data->uid[5]);
  29. ret = NfcCommandStop;
  30. }
  31. /*
  32. } else if(instance->mf_ul_auth->type == MfUltralightAuthTypeAmiibo) {
  33. if(mf_ultralight_generate_amiibo_pass(
  34. weebo->mf_ul_auth,
  35. data->iso14443_3a_data->uid,
  36. data->iso14443_3a_data->uid_len)) {
  37. mf_ultralight_event->data->auth_context.skip_auth = false;
  38. }
  39. */
  40. return ret;
  41. }
  42. void weebo_scene_write_on_enter(void* context) {
  43. Weebo* weebo = context;
  44. Popup* popup = weebo->popup;
  45. popup_set_header(popup, "Writing", 58, 28, AlignCenter, AlignCenter);
  46. //popup_set_icon(popup, 0, 3, &I_RFIDDolphinReceive_97x61);
  47. // popup_set_text(popup, "words", 64, 36, AlignCenter, AlignTop);
  48. weebo->poller = nfc_poller_alloc(weebo->nfc, NfcProtocolMfUltralight);
  49. nfc_poller_start(weebo->poller, weebo_scene_write_poller_callback, weebo);
  50. weebo_blink_start(weebo);
  51. view_dispatcher_switch_to_view(weebo->view_dispatcher, WeeboViewPopup);
  52. }
  53. bool weebo_scene_write_on_event(void* context, SceneManagerEvent event) {
  54. Weebo* weebo = context;
  55. bool consumed = false;
  56. if(event.type == SceneManagerEventTypeCustom) {
  57. scene_manager_set_scene_state(weebo->scene_manager, WeeboSceneWrite, event.event);
  58. }
  59. return consumed;
  60. }
  61. void weebo_scene_write_on_exit(void* context) {
  62. Weebo* weebo = context;
  63. if(weebo->poller) {
  64. nfc_poller_stop(weebo->poller);
  65. nfc_poller_free(weebo->poller);
  66. weebo->poller = NULL;
  67. }
  68. popup_reset(weebo->popup);
  69. weebo_blink_stop(weebo);
  70. }