Skip to content

Commit

Permalink
Merge pull request #32 from DocSystem/dev
Browse files Browse the repository at this point in the history
Update counter parsing
  • Loading branch information
luu176 authored Jan 25, 2025
2 parents a1d973e + e670a9e commit 55fa8a5
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 5 deletions.
9 changes: 5 additions & 4 deletions api/calypso/transit/navigo.c
Original file line number Diff line number Diff line change
Expand Up @@ -591,19 +591,20 @@ void show_navigo_special_event_info(NavigoCardSpecialEvent* event, FuriString* p

void show_navigo_contract_info(NavigoCardContract* contract, FuriString* parsed_data) {
furi_string_cat_printf(parsed_data, "Type: %s\n", get_navigo_tariff(contract->tariff));
if(is_ticket_count_available(contract->tariff)) {
if(contract->counter_present) {
furi_string_cat_printf(parsed_data, "Remaining Tickets: %d\n", contract->counter.count);
furi_string_cat_printf(parsed_data, "Last load: %d\n", contract->counter.last_load);
}
if(contract->serial_number_available) {
furi_string_cat_printf(parsed_data, "TCN Number: %d\n", contract->serial_number);
}
if(contract->price_amount_available) {
furi_string_cat_printf(parsed_data, "Amount: %.2f EUR\n", contract->price_amount);
}
if(contract->pay_method_available) {
furi_string_cat_printf(
parsed_data, "Payment Method: %s\n", get_pay_method(contract->pay_method));
}
if(contract->price_amount_available) {
furi_string_cat_printf(parsed_data, "Amount: %.2f EUR\n", contract->price_amount);
}
if(contract->end_date_available) {
furi_string_cat_printf(parsed_data, "Valid\nfrom: ");
locale_format_datetime_cat(parsed_data, &contract->start_date, false);
Expand Down
2 changes: 2 additions & 0 deletions api/calypso/transit/navigo_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ typedef struct {
int count;
int relative_first_stamp_15mn;
int struct_number;
int last_load;
} NavigoCardContractCounter;

typedef struct {
Expand All @@ -80,6 +81,7 @@ typedef struct {
int status;
int authenticator;
NavigoCardContractCounter counter;
bool counter_present;
bool present;
} NavigoCardContract;

Expand Down
28 changes: 27 additions & 1 deletion scenes/metroflip_scene_calypso.c
Original file line number Diff line number Diff line change
Expand Up @@ -710,7 +710,27 @@ static NfcCommand metroflip_scene_navigo_poller_callback(NfcGenericEvent event,
card->navigo->contracts[i - 1].zones_available = true;
}

// 13.7. ContractValidityJourneys -- pas sûr de le mettre lui
// 13.7. ContractValidityJourneys
contract_key = "ContractValidityJourneys";
if(is_calypso_node_present(
bit_representation, contract_key, IntercodeContractStructure)) {
int positionOffset = get_calypso_node_offset(
bit_representation, contract_key, IntercodeContractStructure);
int start = positionOffset,
end = positionOffset +
get_calypso_node_size(
contract_key, IntercodeContractStructure) -
1;
int decimal_value = bit_slice_to_dec(bit_representation, start, end);
// first 5 bits -> CounterStructureNumber
// last 8 bits -> CounterLastLoad
// other bits -> RFU
card->navigo->contracts[i - 1].counter.struct_number = decimal_value >>
11;
card->navigo->contracts[i - 1].counter.last_load = decimal_value &
0xFF;
card->navigo->contracts[i - 1].counter_present = true;
}

// 15.0. ContractValiditySaleDate
contract_key = "ContractValiditySaleDate";
Expand Down Expand Up @@ -830,6 +850,12 @@ static NfcCommand metroflip_scene_navigo_poller_callback(NfcGenericEvent event,

// Ticket counts (contracts 1-4)
for(int i = 0; i < 4; i++) {
if(card->navigo->contracts[i].present == 0) {
continue;
}
if(card->navigo->contracts[i].counter_present == 0) {
continue;
}
start = 0;
end = 5;
card->navigo->contracts[i].counter.count = bit_slice_to_dec(
Expand Down

0 comments on commit 55fa8a5

Please sign in to comment.