Просмотр исходного кода

Merge pull request #34 from DocSystem/dev

Print country & network in case of unknown card
Luu 11 месяцев назад
Родитель
Сommit
be6aca3b26
2 измененных файлов с 28 добавлено и 11 удалено
  1. 3 0
      api/calypso/calypso_i.h
  2. 25 11
      scenes/metroflip_scene_calypso.c

+ 3 - 0
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 {

+ 25 - 11
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);
-                    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;
+                        card->country_num = country_num;
+                        card->network_num = network_num;
                     }
                     break;
                 }