1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 20:49:49 +04:00

build fixed. finally, datetime

This commit is contained in:
Methodius
2024-02-16 00:32:30 +09:00
parent 2c5973be22
commit 913659325b
12 changed files with 82 additions and 87 deletions

View File

@@ -25,7 +25,7 @@
#include <bit_lib.h> #include <bit_lib.h>
#include <applications/services/locale/locale.h> #include <applications/services/locale/locale.h>
#include <datetime/datetime.h> #include <datetime.h>
#include <inttypes.h> #include <inttypes.h>
// //

View File

@@ -23,8 +23,6 @@
#include "protocols/emv/emv.h" #include "protocols/emv/emv.h"
#include "helpers/nfc_emv_parser.h" #include "helpers/nfc_emv_parser.h"
#include <furi_hal_rtc.h>
#define TAG "EMV" #define TAG "EMV"
bool emv_get_currency_name(uint16_t cur_code, FuriString* currency_name) { bool emv_get_currency_name(uint16_t cur_code, FuriString* currency_name) {

View File

@@ -5,7 +5,7 @@
#include <lib/nfc/protocols/mf_desfire/mf_desfire.h> #include <lib/nfc/protocols/mf_desfire/mf_desfire.h>
#include <applications/services/locale/locale.h> #include <applications/services/locale/locale.h>
#include <datetime/datetime.h> #include <datetime.h>
static const MfDesfireApplicationId itso_app_id = {.data = {0x16, 0x02, 0xa0}}; static const MfDesfireApplicationId itso_app_id = {.data = {0x16, 0x02, 0xa0}};
static const MfDesfireFileId itso_file_id = 0x0f; static const MfDesfireFileId itso_file_id = 0x0f;

View File

@@ -22,7 +22,7 @@
#include <nfc/protocols/mf_classic/mf_classic_poller_sync.h> #include <nfc/protocols/mf_classic/mf_classic_poller_sync.h>
#include <bit_lib.h> #include <bit_lib.h>
#include <furi_hal_rtc.h> #include <datetime.h>
#define TAG "Kazan" #define TAG "Kazan"
@@ -282,12 +282,12 @@ static bool kazan_parse(const NfcDevice* device, FuriString* parsed_data) {
enum SubscriptionType subscription_type = enum SubscriptionType subscription_type =
get_subscription_type(block_start_ptr[0], tariff_name); get_subscription_type(block_start_ptr[0], tariff_name);
FuriHalRtcDateTime valid_from; DateTime valid_from;
valid_from.year = 2000 + block_start_ptr[1]; valid_from.year = 2000 + block_start_ptr[1];
valid_from.month = block_start_ptr[2]; valid_from.month = block_start_ptr[2];
valid_from.day = block_start_ptr[3]; valid_from.day = block_start_ptr[3];
FuriHalRtcDateTime valid_to; DateTime valid_to;
valid_to.year = 2000 + block_start_ptr[4]; valid_to.year = 2000 + block_start_ptr[4];
valid_to.month = block_start_ptr[5]; valid_to.month = block_start_ptr[5];
valid_to.day = block_start_ptr[6]; valid_to.day = block_start_ptr[6];
@@ -295,7 +295,7 @@ static bool kazan_parse(const NfcDevice* device, FuriString* parsed_data) {
const uint8_t last_trip_block_number = 2; const uint8_t last_trip_block_number = 2;
block_start_ptr = &data->block[start_block_num + last_trip_block_number].data[1]; block_start_ptr = &data->block[start_block_num + last_trip_block_number].data[1];
FuriHalRtcDateTime last_trip; DateTime last_trip;
last_trip.year = 2000 + block_start_ptr[0]; last_trip.year = 2000 + block_start_ptr[0];
last_trip.month = block_start_ptr[1]; last_trip.month = block_start_ptr[1];
last_trip.day = block_start_ptr[2]; last_trip.day = block_start_ptr[2];

View File

@@ -1,9 +1,10 @@
#include "nfc_supported_card_plugin.h" #include "nfc_supported_card_plugin.h"
#include <flipper_application.h> #include <flipper_application.h>
#include <machine/endian.h>
#include <nfc/protocols/st25tb/st25tb.h> #include <nfc/protocols/st25tb/st25tb.h>
#include <machine/endian.h>
#define TAG "MyKey" #define TAG "MyKey"
const uint32_t blankBlock18 = 0x480FCD8F, blankBlock19 = 0x070082C0; const uint32_t blankBlock18 = 0x480FCD8F, blankBlock19 = 0x070082C0;

View File

@@ -34,7 +34,7 @@
#include <lib/nfc/protocols/mf_desfire/mf_desfire.h> #include <lib/nfc/protocols/mf_desfire/mf_desfire.h>
#include <applications/services/locale/locale.h> #include <applications/services/locale/locale.h>
#include <datetime/datetime.h> #include <datetime.h>
static const MfDesfireApplicationId opal_app_id = {.data = {0x31, 0x45, 0x53}}; static const MfDesfireApplicationId opal_app_id = {.data = {0x31, 0x45, 0x53}};

View File

@@ -4,7 +4,7 @@
#include <nfc/protocols/mf_classic/mf_classic_poller_sync.h> #include <nfc/protocols/mf_classic/mf_classic_poller_sync.h>
#include <bit_lib.h> #include <bit_lib.h>
#include <furi_hal_rtc.h> #include <datetime.h>
#define TAG "Social_Moscow" #define TAG "Social_Moscow"
@@ -61,24 +61,24 @@ static const MfClassicKeyPair social_moscow_4k_keys[] = {
#define TOPBIT(X) (1 << ((X)-1)) #define TOPBIT(X) (1 << ((X)-1))
void from_days_to_datetime(uint16_t days, FuriHalRtcDateTime* datetime, uint16_t start_year) { void from_days_to_datetime(uint16_t days, DateTime* datetime, uint16_t start_year) {
uint32_t timestamp = days * 24 * 60 * 60; uint32_t timestamp = days * 24 * 60 * 60;
FuriHalRtcDateTime start_datetime = {0}; DateTime start_datetime = {0};
start_datetime.year = start_year - 1; start_datetime.year = start_year - 1;
start_datetime.month = 12; start_datetime.month = 12;
start_datetime.day = 31; start_datetime.day = 31;
timestamp += furi_hal_rtc_datetime_to_timestamp(&start_datetime); timestamp += datetime_datetime_to_timestamp(&start_datetime);
furi_hal_rtc_timestamp_to_datetime(timestamp, datetime); datetime_timestamp_to_datetime(timestamp, datetime);
} }
void from_minutes_to_datetime(uint32_t minutes, FuriHalRtcDateTime* datetime, uint16_t start_year) { void from_minutes_to_datetime(uint32_t minutes, DateTime* datetime, uint16_t start_year) {
uint32_t timestamp = minutes * 60; uint32_t timestamp = minutes * 60;
FuriHalRtcDateTime start_datetime = {0}; DateTime start_datetime = {0};
start_datetime.year = start_year - 1; start_datetime.year = start_year - 1;
start_datetime.month = 12; start_datetime.month = 12;
start_datetime.day = 31; start_datetime.day = 31;
timestamp += furi_hal_rtc_datetime_to_timestamp(&start_datetime); timestamp += datetime_datetime_to_timestamp(&start_datetime);
furi_hal_rtc_timestamp_to_datetime(timestamp, datetime); datetime_timestamp_to_datetime(timestamp, datetime);
} }
bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
@@ -221,10 +221,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_extended, card_extended,
card_crc16_2); card_crc16_2);
card_validator = card_validator1 * 1024 + card_validator2; card_validator = card_validator1 * 1024 + card_validator2;
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_start_trip_date)*24 * 60 + card_start_trip_time, (card_start_trip_date)*24 * 60 + card_start_trip_time,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -283,7 +283,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_hash, card_hash,
card_valid_from_date, card_valid_from_date,
card_rfu3); card_rfu3);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992);
furi_string_printf( furi_string_printf(
@@ -336,10 +336,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_transport_type3, card_transport_type3,
card_transport_type4, card_transport_type4,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 2016); from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 2016);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
card_start_trip_minutes - (2 * 24 * 60), &card_start_trip_minutes_s, 2016); card_start_trip_minutes - (2 * 24 * 60), &card_start_trip_minutes_s, 2016);
furi_string_printf( furi_string_printf(
@@ -397,9 +397,9 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_transport_type, card_transport_type,
card_rfu3, card_rfu3,
card_transfer_in_metro); card_transfer_in_metro);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_start_trip_date - 1) * 24 * 60 + card_start_trip_time, (card_start_trip_date - 1) * 24 * 60 + card_start_trip_time,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -478,9 +478,9 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_transport_type2, card_transport_type2,
card_rfu5, card_rfu5,
card_transfer_in_metro); card_transfer_in_metro);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_start_trip_date - 1) * 24 * 60 + card_start_trip_time, (card_start_trip_date - 1) * 24 * 60 + card_start_trip_time,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -548,10 +548,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_blocked, card_blocked,
card_zoo, card_zoo,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
card_start_trip_minutes - (2 * 24 * 60), &card_start_trip_minutes_s, 1992); card_start_trip_minutes - (2 * 24 * 60), &card_start_trip_minutes_s, 1992);
furi_string_printf( furi_string_printf(
@@ -618,10 +618,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_blocked, card_blocked,
card_extended, card_extended,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 2016); from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 2016);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_valid_to_date - 1) * 24 * 60 + card_valid_for_minutes - (card_valid_to_date - 1) * 24 * 60 + card_valid_for_minutes -
card_start_trip_neg_minutes, card_start_trip_neg_minutes,
@@ -684,10 +684,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_transport_type3, card_transport_type3,
card_transport_type4, card_transport_type4,
card_blocked); card_blocked);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2016); from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2016);
furi_string_printf( furi_string_printf(
result, result,
@@ -760,10 +760,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_blocked, card_blocked,
card_extended, card_extended,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2016); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2016);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_use_before_date + 1) * 24 * 60 + card_valid_for_minutes - (card_use_before_date + 1) * 24 * 60 + card_valid_for_minutes -
card_start_trip_neg_minutes, card_start_trip_neg_minutes,
@@ -825,11 +825,11 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_route, card_route,
card_passages_ground_transport, card_passages_ground_transport,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
card_start_trip_minutes - (24 * 60), &card_start_trip_minutes_s, 2019); card_start_trip_minutes - (24 * 60), &card_start_trip_minutes_s, 2019);
furi_string_printf( furi_string_printf(
@@ -893,10 +893,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_extended, card_extended,
card_route, card_route,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 2019); from_days_to_datetime(card_use_before_date - 1, &card_use_before_date_s, 2019);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
card_valid_from_date + card_valid_for_minutes - card_start_trip_neg_minutes - 24 * 60, card_valid_from_date + card_valid_for_minutes - card_start_trip_neg_minutes - 24 * 60,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -959,7 +959,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_app_code4, card_app_code4,
card_type4, card_type4,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_valid_by_date - 1, &card_use_before_date_s, 1992); from_days_to_datetime(card_valid_by_date - 1, &card_use_before_date_s, 1992);
furi_string_printf( furi_string_printf(
@@ -995,7 +995,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_valid_to_minutes, card_valid_to_minutes,
card_valid_by_date, card_valid_by_date,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_valid_by_date - 1, &card_use_before_date_s, 1992); from_days_to_datetime(card_valid_by_date - 1, &card_use_before_date_s, 1992);
furi_string_printf( furi_string_printf(

View File

@@ -4,7 +4,7 @@
#include <nfc/protocols/mf_classic/mf_classic_poller_sync.h> #include <nfc/protocols/mf_classic/mf_classic_poller_sync.h>
#include <bit_lib.h> #include <bit_lib.h>
#include <furi_hal_rtc.h> #include <datetime.h>
#define TAG "Troika" #define TAG "Troika"
@@ -62,24 +62,24 @@ static const MfClassicKeyPair troika_4k_keys[] = {
#define TOPBIT(X) (1 << ((X)-1)) #define TOPBIT(X) (1 << ((X)-1))
void from_days_to_datetime(uint16_t days, FuriHalRtcDateTime* datetime, uint16_t start_year) { void from_days_to_datetime(uint16_t days, DateTime* datetime, uint16_t start_year) {
uint32_t timestamp = days * 24 * 60 * 60; uint32_t timestamp = days * 24 * 60 * 60;
FuriHalRtcDateTime start_datetime = {0}; DateTime start_datetime = {0};
start_datetime.year = start_year - 1; start_datetime.year = start_year - 1;
start_datetime.month = 12; start_datetime.month = 12;
start_datetime.day = 31; start_datetime.day = 31;
timestamp += furi_hal_rtc_datetime_to_timestamp(&start_datetime); timestamp += datetime_datetime_to_timestamp(&start_datetime);
furi_hal_rtc_timestamp_to_datetime(timestamp, datetime); datetime_timestamp_to_datetime(timestamp, datetime);
} }
void from_minutes_to_datetime(uint32_t minutes, FuriHalRtcDateTime* datetime, uint16_t start_year) { void from_minutes_to_datetime(uint32_t minutes, DateTime* datetime, uint16_t start_year) {
uint32_t timestamp = minutes * 60; uint32_t timestamp = minutes * 60;
FuriHalRtcDateTime start_datetime = {0}; DateTime start_datetime = {0};
start_datetime.year = start_year - 1; start_datetime.year = start_year - 1;
start_datetime.month = 12; start_datetime.month = 12;
start_datetime.day = 31; start_datetime.day = 31;
timestamp += furi_hal_rtc_datetime_to_timestamp(&start_datetime); timestamp += datetime_datetime_to_timestamp(&start_datetime);
furi_hal_rtc_timestamp_to_datetime(timestamp, datetime); datetime_timestamp_to_datetime(timestamp, datetime);
} }
bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
@@ -170,10 +170,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
if(card_valid_by_date == 0) { if(card_valid_by_date == 0) {
return false; return false;
} }
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_start_trip_date)*24 * 60 + card_start_trip_time, (card_start_trip_date)*24 * 60 + card_start_trip_time,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -247,10 +247,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_extended, card_extended,
card_crc16_2); card_crc16_2);
card_validator = card_validator1 * 1024 + card_validator2; card_validator = card_validator1 * 1024 + card_validator2;
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_start_trip_date)*24 * 60 + card_start_trip_time, (card_start_trip_date)*24 * 60 + card_start_trip_time,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -309,7 +309,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_hash, card_hash,
card_valid_from_date, card_valid_from_date,
card_rfu3); card_rfu3);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992);
furi_string_printf( furi_string_printf(
@@ -362,10 +362,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_transport_type3, card_transport_type3,
card_transport_type4, card_transport_type4,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2016); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2016);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2016); from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2016);
furi_string_printf( furi_string_printf(
result, result,
@@ -422,9 +422,9 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_transport_type, card_transport_type,
card_rfu3, card_rfu3,
card_transfer_in_metro); card_transfer_in_metro);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_start_trip_date)*24 * 60 + card_start_trip_time, (card_start_trip_date)*24 * 60 + card_start_trip_time,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -503,9 +503,9 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_transport_type2, card_transport_type2,
card_rfu5, card_rfu5,
card_transfer_in_metro); card_transfer_in_metro);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_start_trip_date)*24 * 60 + card_start_trip_time, (card_start_trip_date)*24 * 60 + card_start_trip_time,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -573,10 +573,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_blocked, card_blocked,
card_zoo, card_zoo,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 1992); from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 1992);
furi_string_printf( furi_string_printf(
result, result,
@@ -642,10 +642,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_blocked, card_blocked,
card_extended, card_extended,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2016); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2016);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_valid_to_date)*24 * 60 + card_valid_for_minutes - card_start_trip_neg_minutes, (card_valid_to_date)*24 * 60 + card_valid_for_minutes - card_start_trip_neg_minutes,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -707,10 +707,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_transport_type3, card_transport_type3,
card_transport_type4, card_transport_type4,
card_blocked); card_blocked);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 1992);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2016); from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2016);
furi_string_printf( furi_string_printf(
result, result,
@@ -783,10 +783,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_blocked, card_blocked,
card_extended, card_extended,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2016); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2016);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
(card_use_before_date + 1) * 24 * 60 + card_valid_for_minutes - (card_use_before_date + 1) * 24 * 60 + card_valid_for_minutes -
card_start_trip_neg_minutes, card_start_trip_neg_minutes,
@@ -848,11 +848,11 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_route, card_route,
card_passages_ground_transport, card_passages_ground_transport,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2019); from_minutes_to_datetime(card_start_trip_minutes, &card_start_trip_minutes_s, 2019);
furi_string_printf( furi_string_printf(
result, result,
@@ -915,10 +915,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_extended, card_extended,
card_route, card_route,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019); from_days_to_datetime(card_use_before_date, &card_use_before_date_s, 2019);
FuriHalRtcDateTime card_start_trip_minutes_s = {0}; DateTime card_start_trip_minutes_s = {0};
from_minutes_to_datetime( from_minutes_to_datetime(
card_valid_from_date + card_valid_for_minutes - card_start_trip_neg_minutes, card_valid_from_date + card_valid_for_minutes - card_start_trip_neg_minutes,
&card_start_trip_minutes_s, &card_start_trip_minutes_s,
@@ -981,7 +981,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_app_code4, card_app_code4,
card_type4, card_type4,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992);
furi_string_printf( furi_string_printf(
@@ -1017,7 +1017,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) {
card_valid_to_minutes, card_valid_to_minutes,
card_valid_by_date, card_valid_by_date,
card_hash); card_hash);
FuriHalRtcDateTime card_use_before_date_s = {0}; DateTime card_use_before_date_s = {0};
from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992); from_days_to_datetime(card_valid_by_date, &card_use_before_date_s, 1992);
furi_string_printf( furi_string_printf(

View File

@@ -1,11 +1,10 @@
#include "nfc_supported_card_plugin.h" #include "nfc_supported_card_plugin.h"
#include <flipper_application/flipper_application.h> #include <flipper_application/flipper_application.h>
#include <nfc/nfc_device.h>
#include <bit_lib.h>
#include <nfc/protocols/mf_classic/mf_classic_poller_sync.h> #include <nfc/protocols/mf_classic/mf_classic_poller_sync.h>
#include <bit_lib.h>
#define TAG "TwoCities" #define TAG "TwoCities"
typedef struct { typedef struct {

View File

@@ -29,9 +29,7 @@
#include "protocols/mf_classic/mf_classic.h" #include "protocols/mf_classic/mf_classic.h"
#include <bit_lib.h> #include <bit_lib.h>
#include <furi_hal_rtc.h> #include <datetime.h>
#include <datetime/datetime.h>
#include <nfc/protocols/mf_classic/mf_classic_poller_sync.h>
#define TAG "Umarsh" #define TAG "Umarsh"

View File

@@ -97,8 +97,8 @@ static bool zolotaya_korona_parse(const NfcDevice* device, FuriString* parsed_da
const uint8_t last_refill_amount_kop = last_refill_amount % 100; const uint8_t last_refill_amount_kop = last_refill_amount % 100;
const uint16_t refill_counter = bit_lib_bytes_to_num_le(block_start_ptr + 10, 2); const uint16_t refill_counter = bit_lib_bytes_to_num_le(block_start_ptr + 10, 2);
FuriHalRtcDateTime last_refill_datetime = {0}; DateTime last_refill_datetime = {0};
furi_hal_rtc_timestamp_to_datetime(last_refill_timestamp, &last_refill_datetime); datetime_timestamp_to_datetime(last_refill_timestamp, &last_refill_datetime);
// block 2: trip block // block 2: trip block
block_start_ptr = &data->block[start_trip_block_number + 2].data[0]; block_start_ptr = &data->block[start_trip_block_number + 2].data[0];
@@ -110,8 +110,8 @@ static bool zolotaya_korona_parse(const NfcDevice* device, FuriString* parsed_da
const uint32_t prev_balance_rub = prev_balance / 100; const uint32_t prev_balance_rub = prev_balance / 100;
const uint8_t prev_balance_kop = prev_balance % 100; const uint8_t prev_balance_kop = prev_balance % 100;
FuriHalRtcDateTime last_trip_datetime = {0}; DateTime last_trip_datetime = {0};
furi_hal_rtc_timestamp_to_datetime(last_trip_timestamp, &last_trip_datetime); datetime_timestamp_to_datetime(last_trip_timestamp, &last_trip_datetime);
// PARSE DATA FROM PURSE SECTOR // PARSE DATA FROM PURSE SECTOR
const uint8_t start_purse_block_number = const uint8_t start_purse_block_number =

View File

@@ -23,7 +23,6 @@
#include "protocols/mf_classic/mf_classic.h" #include "protocols/mf_classic/mf_classic.h"
#include <bit_lib.h> #include <bit_lib.h>
#include <furi_hal_rtc.h>
#define TAG "Zolotaya Korona Online" #define TAG "Zolotaya Korona Online"