NFC: add specific FeliCa type read option

This commit is contained in:
nullableVoidPtr
2022-12-06 02:58:11 +08:00
parent eaa2dea075
commit 68b3cc233b
16 changed files with 225 additions and 197 deletions

View File

@@ -74,15 +74,17 @@ static void nfc_cli_emulate(Cli* cli, FuriString* args) {
FuriHalNfcDevData params = {
.uid = {0x36, 0x9C, 0xe7, 0xb1, 0x0A, 0xC1, 0x34},
.uid_len = 7,
.a_data = {
.atqa = {0x44, 0x00},
.sak = 0x00,
},
.a_data =
{
.atqa = {0x44, 0x00},
.sak = 0x00,
},
.type = FuriHalNfcTypeA,
};
while(!cli_cmd_interrupt_received(cli)) {
if(furi_hal_nfc_listen(params.uid, params.uid_len, params.a_data.atqa, params.a_data.sak, false, 100)) {
if(furi_hal_nfc_listen(
params.uid, params.uid_len, params.a_data.atqa, params.a_data.sak, false, 100)) {
printf("Reader detected\r\n");
furi_hal_nfc_sleep();
}

View File

@@ -29,7 +29,8 @@ void nfc_scene_felica_read_success_on_enter(void* context) {
FelicaSystem* current_system = felica_data->systems;
while(current_system) {
furi_string_cat_printf(temp_str, "\nSystem %04X (#%d):", current_system->code, current_system->number);
furi_string_cat_printf(
temp_str, "\nSystem %04X (#%d):", current_system->code, current_system->number);
furi_string_cat_printf(temp_str, "\nIDm:\n ");
for(size_t i = 0; i < 8; i++) {
furi_string_cat_printf(temp_str, "%02X", current_system->idm[i]);

View File

@@ -51,7 +51,8 @@ void nfc_scene_nfc_data_info_on_enter(void* context) {
for(size_t i = 0; i < nfc_data->uid_len; i++) {
furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]);
}
furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", nfc_data->a_data.atqa[1], nfc_data->a_data.atqa[0]);
furi_string_cat_printf(
temp_str, "\nATQA: %02X %02X ", nfc_data->a_data.atqa[1], nfc_data->a_data.atqa[0]);
furi_string_cat_printf(temp_str, " SAK: %02X", nfc_data->a_data.sak);
// Set application specific data

View File

@@ -30,7 +30,8 @@ void nfc_scene_nfca_read_success_on_enter(void* context) {
for(size_t i = 0; i < data->uid_len; i++) {
furi_string_cat_printf(temp_str, " %02X", data->uid[i]);
}
furi_string_cat_printf(temp_str, "\nATQA: %02X %02X ", data->a_data.atqa[1], data->a_data.atqa[0]);
furi_string_cat_printf(
temp_str, "\nATQA: %02X %02X ", data->a_data.atqa[1], data->a_data.atqa[0]);
furi_string_cat_printf(temp_str, " SAK: %02X", data->a_data.sak);
widget_add_text_scroll_element(widget, 0, 0, 128, 52, furi_string_get_cstr(temp_str));

View File

@@ -7,6 +7,7 @@ enum SubmenuIndex {
SubmenuIndexReadMfUltralight,
SubmenuIndexReadEMV,
SubmenuIndexReadNFCA,
SubmenuIndexReadFelica,
};
void nfc_scene_read_card_type_submenu_callback(void* context, uint32_t index) {
@@ -49,6 +50,12 @@ void nfc_scene_read_card_type_on_enter(void* context) {
SubmenuIndexReadNFCA,
nfc_scene_read_card_type_submenu_callback,
nfc);
submenu_add_item(
submenu,
"Read FeliCa",
SubmenuIndexReadFelica,
nfc_scene_read_card_type_submenu_callback,
nfc);
uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneReadCardType);
submenu_set_selected_item(submenu, state);
@@ -85,6 +92,11 @@ bool nfc_scene_read_card_type_on_event(void* context, SceneManagerEvent event) {
scene_manager_next_scene(nfc->scene_manager, NfcSceneRead);
consumed = true;
}
if(event.event == SubmenuIndexReadFelica) {
nfc->dev->dev_data.read_mode = NfcReadModeFelica;
scene_manager_next_scene(nfc->scene_manager, NfcSceneRead);
consumed = true;
}
scene_manager_set_scene_state(nfc->scene_manager, NfcSceneReadCardType, event.event);
}
return consumed;