ravkav.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "ravkav.h"
  2. #include "ravkav_lists.h"
  3. #include "../../../metroflip_i.h"
  4. const char* get_ravkav_issuer(int issuer) {
  5. if(RAVKAV_ISSUERS_LIST[issuer]) {
  6. return RAVKAV_ISSUERS_LIST[issuer];
  7. } else {
  8. // Return hex
  9. char* issuer_str = malloc(9 * sizeof(char));
  10. if(!issuer_str) {
  11. return "Unknown";
  12. }
  13. snprintf(issuer_str, 9, "0x%02X", issuer);
  14. return issuer_str;
  15. }
  16. }
  17. void show_ravkav_contract_info(RavKavCardContract* contract, FuriString* parsed_data) {
  18. // Core contract validity period
  19. furi_string_cat_printf(parsed_data, "Valid from: ");
  20. locale_format_datetime_cat(parsed_data, &contract->start_date, false);
  21. if(contract->end_date_available) {
  22. furi_string_cat_printf(parsed_data, "\nto: ");
  23. locale_format_datetime_cat(parsed_data, &contract->end_date, false);
  24. }
  25. furi_string_cat_printf(parsed_data, "\n");
  26. // Issuer information
  27. furi_string_cat_printf(parsed_data, "Issuer: %s\n", get_ravkav_issuer(contract->provider));
  28. // Sale details
  29. furi_string_cat_printf(parsed_data, "Sold on: ");
  30. locale_format_datetime_cat(parsed_data, &contract->sale_date, false);
  31. furi_string_cat_printf(parsed_data, "\nSale device: %d\n", contract->sale_device);
  32. furi_string_cat_printf(parsed_data, "Sale number: %d\n", contract->sale_number);
  33. // Restriction details
  34. if(contract->restrict_code_available) {
  35. furi_string_cat_printf(parsed_data, "Restriction code: %d\n", contract->restrict_code);
  36. }
  37. if(contract->restrict_duration_available) {
  38. furi_string_cat_printf(
  39. parsed_data, "Restriction duration: \n%d minutes\n", contract->restrict_duration);
  40. }
  41. // Additional metadata
  42. furi_string_cat_printf(parsed_data, "Contract version: %d\n", contract->version);
  43. furi_string_cat_printf(parsed_data, "Journey interchanges flag: %d\n", contract->interchange);
  44. }
  45. void show_ravkav_environment_info(RavKavCardEnv* environment, FuriString* parsed_data) {
  46. // Validity information
  47. furi_string_cat_printf(parsed_data, "End of validity:\n");
  48. locale_format_datetime_cat(parsed_data, &environment->end_dt, false);
  49. furi_string_cat_printf(parsed_data, "\n");
  50. // Issue date
  51. furi_string_cat_printf(parsed_data, "Issue date:\n");
  52. locale_format_datetime_cat(parsed_data, &environment->issue_dt, false);
  53. furi_string_cat_printf(parsed_data, "\n");
  54. // Application details
  55. furi_string_cat_printf(parsed_data, "App version: %d\n", environment->app_version);
  56. furi_string_cat_printf(parsed_data, "App number: %d\n", environment->app_num);
  57. // Payment and network details
  58. furi_string_cat_printf(parsed_data, "Pay method: %d\n", environment->pay_method);
  59. }
  60. void show_ravkav_event_info(RavKavCardEvent* event, FuriString* parsed_data) {
  61. // Essential details first
  62. if(event->location_id_available) {
  63. furi_string_cat_printf(parsed_data, "Location:\n%d\n", event->location_id);
  64. }
  65. furi_string_cat_printf(parsed_data, "Time:\n");
  66. locale_format_datetime_cat(parsed_data, &event->time, true);
  67. furi_string_cat_printf(parsed_data, "\n");
  68. furi_string_cat_printf(parsed_data, "Service provider: %d\n", event->service_provider);
  69. // Fare and route-related information
  70. if(event->fare_code_available) {
  71. furi_string_cat_printf(parsed_data, "Fare Code: %d\n", event->fare_code);
  72. }
  73. if(event->route_number_available) {
  74. furi_string_cat_printf(parsed_data, "Route Number: %d\n", event->route_number);
  75. }
  76. if(event->debit_amount_available) {
  77. furi_string_cat_printf(parsed_data, "Debit Amount: %.2f\n", (double)event->debit_amount);
  78. }
  79. if(event->stop_en_route_available) {
  80. furi_string_cat_printf(parsed_data, "Stop en Route: %d\n", event->stop_en_route);
  81. }
  82. // Remaining event metadata
  83. furi_string_cat_printf(parsed_data, "Area ID: %d\n", event->area_id);
  84. furi_string_cat_printf(parsed_data, "Contract ID: %d\n", event->contract_id);
  85. furi_string_cat_printf(parsed_data, "Event Type: %d\n", event->type);
  86. furi_string_cat_printf(parsed_data, "Event Interchange Flag: %d\n", event->interchange_flag);
  87. }