Skip to content

Commit 55fa8a5

Browse files
authored
Merge pull request #32 from DocSystem/dev
Update counter parsing
2 parents a1d973e + e670a9e commit 55fa8a5

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

api/calypso/transit/navigo.c

+5-4
Original file line numberDiff line numberDiff line change
@@ -591,19 +591,20 @@ void show_navigo_special_event_info(NavigoCardSpecialEvent* event, FuriString* p
591591

592592
void show_navigo_contract_info(NavigoCardContract* contract, FuriString* parsed_data) {
593593
furi_string_cat_printf(parsed_data, "Type: %s\n", get_navigo_tariff(contract->tariff));
594-
if(is_ticket_count_available(contract->tariff)) {
594+
if(contract->counter_present) {
595595
furi_string_cat_printf(parsed_data, "Remaining Tickets: %d\n", contract->counter.count);
596+
furi_string_cat_printf(parsed_data, "Last load: %d\n", contract->counter.last_load);
596597
}
597598
if(contract->serial_number_available) {
598599
furi_string_cat_printf(parsed_data, "TCN Number: %d\n", contract->serial_number);
599600
}
601+
if(contract->price_amount_available) {
602+
furi_string_cat_printf(parsed_data, "Amount: %.2f EUR\n", contract->price_amount);
603+
}
600604
if(contract->pay_method_available) {
601605
furi_string_cat_printf(
602606
parsed_data, "Payment Method: %s\n", get_pay_method(contract->pay_method));
603607
}
604-
if(contract->price_amount_available) {
605-
furi_string_cat_printf(parsed_data, "Amount: %.2f EUR\n", contract->price_amount);
606-
}
607608
if(contract->end_date_available) {
608609
furi_string_cat_printf(parsed_data, "Valid\nfrom: ");
609610
locale_format_datetime_cat(parsed_data, &contract->start_date, false);

api/calypso/transit/navigo_i.h

+2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ typedef struct {
5959
int count;
6060
int relative_first_stamp_15mn;
6161
int struct_number;
62+
int last_load;
6263
} NavigoCardContractCounter;
6364

6465
typedef struct {
@@ -80,6 +81,7 @@ typedef struct {
8081
int status;
8182
int authenticator;
8283
NavigoCardContractCounter counter;
84+
bool counter_present;
8385
bool present;
8486
} NavigoCardContract;
8587

scenes/metroflip_scene_calypso.c

+27-1
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,27 @@ static NfcCommand metroflip_scene_navigo_poller_callback(NfcGenericEvent event,
710710
card->navigo->contracts[i - 1].zones_available = true;
711711
}
712712

713-
// 13.7. ContractValidityJourneys -- pas sûr de le mettre lui
713+
// 13.7. ContractValidityJourneys
714+
contract_key = "ContractValidityJourneys";
715+
if(is_calypso_node_present(
716+
bit_representation, contract_key, IntercodeContractStructure)) {
717+
int positionOffset = get_calypso_node_offset(
718+
bit_representation, contract_key, IntercodeContractStructure);
719+
int start = positionOffset,
720+
end = positionOffset +
721+
get_calypso_node_size(
722+
contract_key, IntercodeContractStructure) -
723+
1;
724+
int decimal_value = bit_slice_to_dec(bit_representation, start, end);
725+
// first 5 bits -> CounterStructureNumber
726+
// last 8 bits -> CounterLastLoad
727+
// other bits -> RFU
728+
card->navigo->contracts[i - 1].counter.struct_number = decimal_value >>
729+
11;
730+
card->navigo->contracts[i - 1].counter.last_load = decimal_value &
731+
0xFF;
732+
card->navigo->contracts[i - 1].counter_present = true;
733+
}
714734

715735
// 15.0. ContractValiditySaleDate
716736
contract_key = "ContractValiditySaleDate";
@@ -830,6 +850,12 @@ static NfcCommand metroflip_scene_navigo_poller_callback(NfcGenericEvent event,
830850

831851
// Ticket counts (contracts 1-4)
832852
for(int i = 0; i < 4; i++) {
853+
if(card->navigo->contracts[i].present == 0) {
854+
continue;
855+
}
856+
if(card->navigo->contracts[i].counter_present == 0) {
857+
continue;
858+
}
833859
start = 0;
834860
end = 5;
835861
card->navigo->contracts[i].counter.count = bit_slice_to_dec(

0 commit comments

Comments
 (0)