11/*
22 * This file is part of the Capibara zero (https://github.com/CapibaraZero/fw or
3- * https://capibarazero.github.io/). Copyright (c) 2024 Andrea Canale.
3+ * https://capibarazero.github.io/). Copyright (c) 2025 Andrea Canale.
44 *
55 * This program is free software: you can redistribute it and/or modify
66 * it under the terms of the GNU General Public License as published by
3030#include " pages/NFC/NFCPollingResultPage.hpp"
3131#include " pages/NFC/NFCPollingWaitingPage.hpp"
3232#include " pages/NFC/NFCWriteResultPage.hpp"
33+ #include " pages/NFC/NFCEmulateTagPage.hpp"
3334#include " posixsd.hpp"
3435#include " sdcard_helper.hpp"
3536
@@ -44,6 +45,7 @@ static NFCBruteforceTagPage *nfc_bruteforce_tag_page = nullptr;
4445static NFCFelicaPollingResultPage *nfc_felica_polling_result_page = nullptr ;
4546static FileBrowserPage *nfc_dump_file_browser_page = nullptr ;
4647static NFCWriteResultPage *nfc_write_result_page = nullptr ;
48+ static NFCEmulateTagPage *nfc_emulate_tag_page = nullptr ;
4749
4850std::list<std::string> nfc_dumps_files; // NFC Dumps files
4951
@@ -76,7 +78,7 @@ void goto_nfc_polling_result_gui(uint8_t *uid, uint8_t len,
7678 const char *tag_name) {
7779 gui->reset ();
7880 nfc_polling_result_page =
79- new NFCPollingResultPage (5 , 2 , 1 , gui->get_screen ());
81+ new NFCPollingResultPage (6 , 2 , 1 , gui->get_screen ());
8082 gui->set_current_page (nfc_polling_result_page, false );
8183 nfc_polling_result_page->display (uid, len, tag_name);
8284}
@@ -94,13 +96,25 @@ void nfc_cleanup() {
9496 }
9597}
9698
99+ bool emulating = false ;
100+
97101void goto_home () {
102+ if (emulating) {
103+ stop_emulate ();
104+ emulating = false ;
105+ }
98106 reset_uid ();
99107 reset_felica ();
100108 nfc_cleanup ();
101109 init_main_gui ();
102110}
103111
112+ void nfc_return_back () {
113+ stop_emulate ();
114+ gui->reset ();
115+ gui->set_current_page (nfc_polling_result_page);
116+ }
117+
104118void save_dump_to_sd () {
105119 Serial.println (" save_dump_to_sd" );
106120 save_file (DUMP_SAVE_PATH, nfc_attacks->get_scanned_tag ()->get_data (), 224 );
@@ -189,7 +203,7 @@ void write_felica_tag() {
189203void init_nfc_felica_polling_result_gui (uint8_t *idm, uint8_t *pmm,
190204 uint16_t sys_code) {
191205 nfc_felica_polling_result_page =
192- new NFCFelicaPollingResultPage (5 , 4 , 1 , gui->get_screen ());
206+ new NFCFelicaPollingResultPage (6 , 4 , 1 , gui->get_screen ());
193207 nfc_felica_polling_result_page->display (idm, pmm, sys_code);
194208 gui->set_current_page (nfc_felica_polling_result_page, false );
195209 nfc_polling_waiting_page = nullptr ;
@@ -200,6 +214,31 @@ void felica_dump() {
200214 dump_felica (gui, nfc_attacks);
201215}
202216
217+ extern uint8_t uid[8 ];
218+
219+ void emulate_iso14443a () {
220+ gui->reset ();
221+ nfc_emulate_tag_page = new NFCEmulateTagPage (1 , 1 , 1 , gui->get_screen ());
222+ gui->set_current_page (nfc_emulate_tag_page, true , false );
223+ emulate_iso14443a_tag (uid, nfc_attacks);
224+ emulating = true ;
225+ }
226+
227+ extern uint8_t idm[8 ];
228+ extern uint8_t pmm[8 ];
229+ extern uint16_t sys_code;
230+
231+ void emulate_iso18092 () {
232+ gui->reset ();
233+ nfc_emulate_tag_page = new NFCEmulateTagPage (2 , 1 , 1 , gui->get_screen ());
234+ gui->set_current_page (nfc_emulate_tag_page, true , false );
235+ uint8_t _sys_code[2 ];
236+ _sys_code[0 ] = sys_code >> 8 ;
237+ _sys_code[1 ] = sys_code & 0xff ;
238+ emulate_iso18092_tag (idm, pmm, _sys_code, nfc_attacks);
239+ emulating = true ;
240+ }
241+
203242void set_dumped_sectors (int sectors) {
204243 nfc_dump_result_page->set_dumped (sectors);
205244};
0 commit comments