From f20d29433f04efc32e6c0e073bfb61c339b34beb Mon Sep 17 00:00:00 2001 From: DocSystem <42613513+DocSystem@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:48:31 +0100 Subject: [PATCH 1/2] Only update unknown calypso card type if it's really ravkav --- scenes/metroflip_scene_calypso.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scenes/metroflip_scene_calypso.c b/scenes/metroflip_scene_calypso.c index 1bb1e23..a6d9741 100644 --- a/scenes/metroflip_scene_calypso.c +++ b/scenes/metroflip_scene_calypso.c @@ -1596,8 +1596,8 @@ static NfcCommand metroflip_scene_navigo_poller_callback(NfcGenericEvent event, bit_slice_to_dec(environment_bit_representation, start, end) * 100 + bit_slice_to_dec(environment_bit_representation, start + 4, end + 4) * 10 + bit_slice_to_dec(environment_bit_representation, start + 8, end + 8); - card->card_type = guess_card_type(country_num, network_num); - if(card->card_type == CALYPSO_CARD_RAVKAV) { + if(guess_card_type(country_num, network_num) == CALYPSO_CARD_RAVKAV) { + card->card_type = CALYPSO_CARD_RAVKAV; } break; } From 4b51e8814bfbc2c26cbda3d27e06258ba8aa6ed8 Mon Sep 17 00:00:00 2001 From: DocSystem <42613513+DocSystem@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:53:33 +0100 Subject: [PATCH 2/2] Print country & network in case of unknown card --- api/calypso/calypso_i.h | 3 +++ scenes/metroflip_scene_calypso.c | 32 +++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/api/calypso/calypso_i.h b/api/calypso/calypso_i.h index a6d17ff..166193d 100644 --- a/api/calypso/calypso_i.h +++ b/api/calypso/calypso_i.h @@ -31,6 +31,9 @@ typedef struct { int contracts_count; int events_count; int special_events_count; + + int country_num; + int network_num; } CalypsoCardData; typedef struct { diff --git a/scenes/metroflip_scene_calypso.c b/scenes/metroflip_scene_calypso.c index a6d9741..a9c9987 100644 --- a/scenes/metroflip_scene_calypso.c +++ b/scenes/metroflip_scene_calypso.c @@ -124,6 +124,18 @@ void update_page_info(void* context, FuriString* parsed_data) { } default: { furi_string_cat_printf(parsed_data, "\e#Unknown %u:\n", ctx->card->card_number); + furi_string_cat_printf( + parsed_data, "Country: %s\n", get_country_string(ctx->card->country_num)); + if(guess_card_type(ctx->card->country_num, ctx->card->network_num) != + CALYPSO_CARD_UNKNOWN) { + furi_string_cat_printf( + parsed_data, + "Network: %s\n", + get_network_string( + guess_card_type(ctx->card->country_num, ctx->card->network_num))); + } else { + furi_string_cat_printf(parsed_data, "Network: %d\n", ctx->card->network_num); + } break; } } @@ -465,23 +477,23 @@ static NfcCommand metroflip_scene_navigo_poller_callback(NfcGenericEvent event, // TAG, "Environment bit_representation: %s", environment_bit_representation); start = 13; end = 16; - int country_num = + card->country_num = bit_slice_to_dec(environment_bit_representation, start, end) * 100 + bit_slice_to_dec(environment_bit_representation, start + 4, end + 4) * 10 + bit_slice_to_dec(environment_bit_representation, start + 8, end + 8); start = 25; end = 28; - int network_num = + card->network_num = bit_slice_to_dec(environment_bit_representation, start, end) * 100 + bit_slice_to_dec(environment_bit_representation, start + 4, end + 4) * 10 + bit_slice_to_dec(environment_bit_representation, start + 8, end + 8); - card->card_type = guess_card_type(country_num, network_num); + card->card_type = guess_card_type(card->country_num, card->network_num); switch(card->card_type) { case CALYPSO_CARD_NAVIGO: { card->navigo = malloc(sizeof(NavigoCardData)); - card->navigo->environment.country_num = country_num; - card->navigo->environment.network_num = network_num; + card->navigo->environment.country_num = card->country_num; + card->navigo->environment.network_num = card->network_num; CalypsoApp* IntercodeEnvHolderStructure = get_intercode_structure_env_holder(); @@ -1247,8 +1259,8 @@ static NfcCommand metroflip_scene_navigo_poller_callback(NfcGenericEvent event, case CALYPSO_CARD_OPUS: { card->opus = malloc(sizeof(OpusCardData)); - card->opus->environment.country_num = country_num; - card->opus->environment.network_num = network_num; + card->opus->environment.country_num = card->country_num; + card->opus->environment.network_num = card->network_num; CalypsoApp* OpusEnvHolderStructure = get_opus_env_holder_structure(); @@ -1586,18 +1598,20 @@ static NfcCommand metroflip_scene_navigo_poller_callback(NfcGenericEvent event, case CALYPSO_CARD_UNKNOWN: { start = 3; end = 6; - country_num = + int country_num = bit_slice_to_dec(environment_bit_representation, start, end) * 100 + bit_slice_to_dec(environment_bit_representation, start + 4, end + 4) * 10 + bit_slice_to_dec(environment_bit_representation, start + 8, end + 8); start = 15; end = 18; - network_num = + int network_num = bit_slice_to_dec(environment_bit_representation, start, end) * 100 + bit_slice_to_dec(environment_bit_representation, start + 4, end + 4) * 10 + bit_slice_to_dec(environment_bit_representation, start + 8, end + 8); if(guess_card_type(country_num, network_num) == CALYPSO_CARD_RAVKAV) { card->card_type = CALYPSO_CARD_RAVKAV; + card->country_num = country_num; + card->network_num = network_num; } break; }