diff --git a/applications/main/nfc/helpers/protocol_support/emv/emv_render.c b/applications/main/nfc/helpers/protocol_support/emv/emv_render.c index 9e315ff47..ba6866a50 100644 --- a/applications/main/nfc/helpers/protocol_support/emv/emv_render.c +++ b/applications/main/nfc/helpers/protocol_support/emv/emv_render.c @@ -112,6 +112,7 @@ void nfc_render_emv_transactions(const EmvApplication* apl, FuriString* str) { if(!apl->trans[i].amount) { furi_string_cat_printf(str, "???"); } else { + FURI_LOG_D("EMV Render", "Amount: %llX\n", apl->trans[i].amount); uint8_t amount_bytes[6]; bit_lib_num_to_bytes_le(apl->trans[i].amount, 6, amount_bytes); diff --git a/applications/main/nfc/plugins/supported_cards/clipper.c b/applications/main/nfc/plugins/supported_cards/clipper.c index 00820721a..62d06e6ef 100644 --- a/applications/main/nfc/plugins/supported_cards/clipper.c +++ b/applications/main/nfc/plugins/supported_cards/clipper.c @@ -25,7 +25,7 @@ #include #include -#include +#include #include // diff --git a/applications/main/nfc/plugins/supported_cards/emv.c b/applications/main/nfc/plugins/supported_cards/emv.c index 663f9a608..4d9372be6 100644 --- a/applications/main/nfc/plugins/supported_cards/emv.c +++ b/applications/main/nfc/plugins/supported_cards/emv.c @@ -23,8 +23,6 @@ #include "protocols/emv/emv.h" #include "helpers/nfc_emv_parser.h" -#include - #define TAG "EMV" bool emv_get_currency_name(uint16_t cur_code, FuriString* currency_name) { @@ -99,7 +97,7 @@ static bool emv_parse(const NfcDevice* device, FuriString* parsed_data) { } if(app.effective_month) { - char day[] = "??"; + char day[] = "--"; if(app.effective_day) itoa(app.effective_day, day, 16); if(day[1] == '\0') { day[1] = day[0]; @@ -117,7 +115,7 @@ static bool emv_parse(const NfcDevice* device, FuriString* parsed_data) { } if(app.exp_month) { - char day[] = "??"; + char day[] = "--"; if(app.exp_day) itoa(app.exp_day, day, 16); if(day[1] == '\0') { day[1] = day[0]; diff --git a/applications/main/nfc/plugins/supported_cards/itso.c b/applications/main/nfc/plugins/supported_cards/itso.c index 2385696d7..ea7314048 100644 --- a/applications/main/nfc/plugins/supported_cards/itso.c +++ b/applications/main/nfc/plugins/supported_cards/itso.c @@ -5,7 +5,7 @@ #include #include -#include +#include static const MfDesfireApplicationId itso_app_id = {.data = {0x16, 0x02, 0xa0}}; static const MfDesfireFileId itso_file_id = 0x0f; diff --git a/applications/main/nfc/plugins/supported_cards/kazan.c b/applications/main/nfc/plugins/supported_cards/kazan.c index 216e0a15c..01682a7b5 100644 --- a/applications/main/nfc/plugins/supported_cards/kazan.c +++ b/applications/main/nfc/plugins/supported_cards/kazan.c @@ -22,7 +22,7 @@ #include #include -#include +#include #define TAG "Kazan" @@ -282,12 +282,12 @@ static bool kazan_parse(const NfcDevice* device, FuriString* parsed_data) { enum SubscriptionType subscription_type = 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.month = block_start_ptr[2]; valid_from.day = block_start_ptr[3]; - FuriHalRtcDateTime valid_to; + DateTime valid_to; valid_to.year = 2000 + block_start_ptr[4]; valid_to.month = block_start_ptr[5]; 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; 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.month = block_start_ptr[1]; last_trip.day = block_start_ptr[2]; diff --git a/applications/main/nfc/plugins/supported_cards/mykey.c b/applications/main/nfc/plugins/supported_cards/mykey.c index 8e2d5cf11..70b9fa6a9 100644 --- a/applications/main/nfc/plugins/supported_cards/mykey.c +++ b/applications/main/nfc/plugins/supported_cards/mykey.c @@ -1,9 +1,10 @@ #include "nfc_supported_card_plugin.h" #include -#include #include +#include + #define TAG "MyKey" const uint32_t blankBlock18 = 0x480FCD8F, blankBlock19 = 0x070082C0; diff --git a/applications/main/nfc/plugins/supported_cards/opal.c b/applications/main/nfc/plugins/supported_cards/opal.c index b994733af..f6a4d22a2 100644 --- a/applications/main/nfc/plugins/supported_cards/opal.c +++ b/applications/main/nfc/plugins/supported_cards/opal.c @@ -34,7 +34,7 @@ #include #include -#include +#include static const MfDesfireApplicationId opal_app_id = {.data = {0x31, 0x45, 0x53}}; diff --git a/applications/main/nfc/plugins/supported_cards/social_moscow.c b/applications/main/nfc/plugins/supported_cards/social_moscow.c index 13ce953de..658063ee5 100644 --- a/applications/main/nfc/plugins/supported_cards/social_moscow.c +++ b/applications/main/nfc/plugins/supported_cards/social_moscow.c @@ -4,7 +4,7 @@ #include #include -#include +#include #define TAG "Social_Moscow" @@ -59,24 +59,24 @@ static const MfClassicKeyPair social_moscow_4k_keys[] = { {.a = 0xa229e68ad9e5, .b = 0x49c2b5296ef4}, {.a = 0xa229e68ad9e5, .b = 0x49c2b5296ef4}, }; -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; - FuriHalRtcDateTime start_datetime = {0}; + DateTime start_datetime = {0}; start_datetime.year = start_year - 1; start_datetime.month = 12; start_datetime.day = 31; - timestamp += furi_hal_rtc_datetime_to_timestamp(&start_datetime); - furi_hal_rtc_timestamp_to_datetime(timestamp, datetime); + timestamp += datetime_datetime_to_timestamp(&start_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; - FuriHalRtcDateTime start_datetime = {0}; + DateTime start_datetime = {0}; start_datetime.year = start_year - 1; start_datetime.month = 12; start_datetime.day = 31; - timestamp += furi_hal_rtc_datetime_to_timestamp(&start_datetime); - furi_hal_rtc_timestamp_to_datetime(timestamp, datetime); + timestamp += datetime_datetime_to_timestamp(&start_datetime); + datetime_timestamp_to_datetime(timestamp, datetime); } bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { @@ -219,10 +219,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_extended, card_crc16_2); 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_start_trip_date) * 24 * 60 + card_start_trip_time, &card_start_trip_minutes_s, @@ -281,7 +281,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_hash, card_valid_from_date, 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); furi_string_printf( @@ -334,10 +334,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_transport_type3, card_transport_type4, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( card_start_trip_minutes - (2 * 24 * 60), &card_start_trip_minutes_s, 2016); furi_string_printf( @@ -395,9 +395,9 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_transport_type, card_rfu3, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_start_trip_date - 1) * 24 * 60 + card_start_trip_time, &card_start_trip_minutes_s, @@ -476,9 +476,9 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_transport_type2, card_rfu5, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_start_trip_date - 1) * 24 * 60 + card_start_trip_time, &card_start_trip_minutes_s, @@ -546,10 +546,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_blocked, card_zoo, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( card_start_trip_minutes - (2 * 24 * 60), &card_start_trip_minutes_s, 1992); furi_string_printf( @@ -616,10 +616,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_blocked, card_extended, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_valid_to_date - 1) * 24 * 60 + card_valid_for_minutes - card_start_trip_neg_minutes, @@ -682,10 +682,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_transport_type3, card_transport_type4, 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); - 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); furi_string_printf( result, @@ -758,10 +758,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_blocked, card_extended, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_use_before_date + 1) * 24 * 60 + card_valid_for_minutes - card_start_trip_neg_minutes, @@ -823,11 +823,11 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_route, card_passages_ground_transport, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( card_start_trip_minutes - (24 * 60), &card_start_trip_minutes_s, 2019); furi_string_printf( @@ -891,10 +891,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_extended, card_route, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( card_valid_from_date + card_valid_for_minutes - card_start_trip_neg_minutes - 24 * 60, &card_start_trip_minutes_s, @@ -957,7 +957,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_app_code4, card_type4, 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); furi_string_printf( @@ -993,7 +993,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_valid_to_minutes, card_valid_by_date, 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); furi_string_printf( diff --git a/applications/main/nfc/plugins/supported_cards/troika.c b/applications/main/nfc/plugins/supported_cards/troika.c index 347b9f5eb..06da5424c 100644 --- a/applications/main/nfc/plugins/supported_cards/troika.c +++ b/applications/main/nfc/plugins/supported_cards/troika.c @@ -4,7 +4,7 @@ #include #include -#include +#include #define TAG "Troika" @@ -60,24 +60,24 @@ static const MfClassicKeyPair troika_4k_keys[] = { {.a = 0x518dc6eea089, .b = 0x97c64ac98ca4}, {.a = 0xbb52f8cce07f, .b = 0x6b6119752c70}, }; -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; - FuriHalRtcDateTime start_datetime = {0}; + DateTime start_datetime = {0}; start_datetime.year = start_year - 1; start_datetime.month = 12; start_datetime.day = 31; - timestamp += furi_hal_rtc_datetime_to_timestamp(&start_datetime); - furi_hal_rtc_timestamp_to_datetime(timestamp, datetime); + timestamp += datetime_datetime_to_timestamp(&start_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; - FuriHalRtcDateTime start_datetime = {0}; + DateTime start_datetime = {0}; start_datetime.year = start_year - 1; start_datetime.month = 12; start_datetime.day = 31; - timestamp += furi_hal_rtc_datetime_to_timestamp(&start_datetime); - furi_hal_rtc_timestamp_to_datetime(timestamp, datetime); + timestamp += datetime_datetime_to_timestamp(&start_datetime); + datetime_timestamp_to_datetime(timestamp, datetime); } bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { @@ -168,10 +168,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { if(card_valid_by_date == 0) { 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_start_trip_date) * 24 * 60 + card_start_trip_time, &card_start_trip_minutes_s, @@ -245,10 +245,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_extended, card_crc16_2); 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_start_trip_date) * 24 * 60 + card_start_trip_time, &card_start_trip_minutes_s, @@ -307,7 +307,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_hash, card_valid_from_date, 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); furi_string_printf( @@ -360,10 +360,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_transport_type3, card_transport_type4, 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); - 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); furi_string_printf( result, @@ -420,9 +420,9 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_transport_type, card_rfu3, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_start_trip_date) * 24 * 60 + card_start_trip_time, &card_start_trip_minutes_s, @@ -501,9 +501,9 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_transport_type2, card_rfu5, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_start_trip_date) * 24 * 60 + card_start_trip_time, &card_start_trip_minutes_s, @@ -571,10 +571,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_blocked, card_zoo, 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); - 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); furi_string_printf( result, @@ -640,10 +640,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_blocked, card_extended, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_valid_to_date) * 24 * 60 + card_valid_for_minutes - card_start_trip_neg_minutes, &card_start_trip_minutes_s, @@ -705,10 +705,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_transport_type3, card_transport_type4, 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); - 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); furi_string_printf( result, @@ -781,10 +781,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_blocked, card_extended, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( (card_use_before_date + 1) * 24 * 60 + card_valid_for_minutes - card_start_trip_neg_minutes, @@ -846,11 +846,11 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_route, card_passages_ground_transport, 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); - 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); furi_string_printf( result, @@ -913,10 +913,10 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_extended, card_route, 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); - FuriHalRtcDateTime card_start_trip_minutes_s = {0}; + DateTime card_start_trip_minutes_s = {0}; from_minutes_to_datetime( card_valid_from_date + card_valid_for_minutes - card_start_trip_neg_minutes, &card_start_trip_minutes_s, @@ -979,7 +979,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_app_code4, card_type4, 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); furi_string_printf( @@ -1015,7 +1015,7 @@ bool parse_transport_block(const MfClassicBlock* block, FuriString* result) { card_valid_to_minutes, card_valid_by_date, 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); furi_string_printf( diff --git a/applications/main/nfc/plugins/supported_cards/two_cities.c b/applications/main/nfc/plugins/supported_cards/two_cities.c index 86c90ebba..fc7d2d026 100644 --- a/applications/main/nfc/plugins/supported_cards/two_cities.c +++ b/applications/main/nfc/plugins/supported_cards/two_cities.c @@ -1,11 +1,10 @@ #include "nfc_supported_card_plugin.h" - #include -#include -#include #include +#include + #define TAG "TwoCities" typedef struct { diff --git a/applications/main/nfc/plugins/supported_cards/umarsh.c b/applications/main/nfc/plugins/supported_cards/umarsh.c index 1d902a1db..9ee8e48ce 100644 --- a/applications/main/nfc/plugins/supported_cards/umarsh.c +++ b/applications/main/nfc/plugins/supported_cards/umarsh.c @@ -29,7 +29,7 @@ #include "protocols/mf_classic/mf_classic.h" #include -#include +#include #define TAG "Umarsh" diff --git a/applications/main/nfc/plugins/supported_cards/zolotaya_korona.c b/applications/main/nfc/plugins/supported_cards/zolotaya_korona.c index e1aa9abcf..5ca9b3517 100644 --- a/applications/main/nfc/plugins/supported_cards/zolotaya_korona.c +++ b/applications/main/nfc/plugins/supported_cards/zolotaya_korona.c @@ -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 uint16_t refill_counter = bit_lib_bytes_to_num_le(block_start_ptr + 10, 2); - FuriHalRtcDateTime last_refill_datetime = {0}; - furi_hal_rtc_timestamp_to_datetime(last_refill_timestamp, &last_refill_datetime); + DateTime last_refill_datetime = {0}; + datetime_timestamp_to_datetime(last_refill_timestamp, &last_refill_datetime); // block 2: trip block 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 uint8_t prev_balance_kop = prev_balance % 100; - FuriHalRtcDateTime last_trip_datetime = {0}; - furi_hal_rtc_timestamp_to_datetime(last_trip_timestamp, &last_trip_datetime); + DateTime last_trip_datetime = {0}; + datetime_timestamp_to_datetime(last_trip_timestamp, &last_trip_datetime); // PARSE DATA FROM PURSE SECTOR const uint8_t start_purse_block_number = diff --git a/applications/main/nfc/plugins/supported_cards/zolotaya_korona_online.c b/applications/main/nfc/plugins/supported_cards/zolotaya_korona_online.c index 3dbd509bb..1c43f5776 100644 --- a/applications/main/nfc/plugins/supported_cards/zolotaya_korona_online.c +++ b/applications/main/nfc/plugins/supported_cards/zolotaya_korona_online.c @@ -23,7 +23,6 @@ #include "protocols/mf_classic/mf_classic.h" #include -#include #define TAG "Zolotaya Korona Online" diff --git a/applications/main/subghz/scenes/subghz_scene_save_name.c b/applications/main/subghz/scenes/subghz_scene_save_name.c index 6cb361e28..bb36e9494 100644 --- a/applications/main/subghz/scenes/subghz_scene_save_name.c +++ b/applications/main/subghz/scenes/subghz_scene_save_name.c @@ -23,7 +23,7 @@ void subghz_scene_save_name_on_enter(void* context) { FuriString* dir_name = furi_string_alloc(); char file_name_buf[SUBGHZ_MAX_LEN_NAME] = {0}; - FuriHalRtcDateTime* datetime = subghz->save_datetime_set ? &subghz->save_datetime : NULL; + DateTime* datetime = subghz->save_datetime_set ? &subghz->save_datetime : NULL; subghz->save_datetime_set = false; if(!subghz_path_is_file(subghz->file_path)) { SubGhzProtocolDecoderBase* decoder_result = subghz_txrx_get_decoder(subghz->txrx); diff --git a/applications/main/subghz/subghz_history.c b/applications/main/subghz/subghz_history.c index 851c90168..c9024857b 100644 --- a/applications/main/subghz/subghz_history.c +++ b/applications/main/subghz/subghz_history.c @@ -13,7 +13,7 @@ typedef struct { FlipperFormat* flipper_string; uint8_t type; SubGhzRadioPreset* preset; - FuriHalRtcDateTime datetime; + DateTime datetime; uint32_t hash_data; const SubGhzProtocol* protocol; uint16_t repeats; @@ -170,13 +170,13 @@ const char* subghz_history_get_protocol_name(SubGhzHistory* instance, uint16_t i return furi_string_get_cstr(instance->tmp_string); } -FuriHalRtcDateTime subghz_history_get_datetime(SubGhzHistory* instance, uint16_t idx) { +DateTime subghz_history_get_datetime(SubGhzHistory* instance, uint16_t idx) { furi_assert(instance); SubGhzHistoryItem* item = SubGhzHistoryItemArray_get(instance->history->data, idx); if(item) { return item->datetime; } else { - return (FuriHalRtcDateTime){}; + return (DateTime){}; } } @@ -233,7 +233,7 @@ void subghz_history_get_text_item_menu(SubGhzHistory* instance, FuriString* outp void subghz_history_get_time_item_menu(SubGhzHistory* instance, FuriString* output, uint16_t idx) { SubGhzHistoryItem* item = SubGhzHistoryItemArray_get(instance->history->data, idx); - FuriHalRtcDateTime* t = &item->datetime; + DateTime* t = &item->datetime; furi_string_printf(output, "%.2d:%.2d:%.2d ", t->hour, t->minute, t->second); } diff --git a/applications/main/subghz/subghz_history.h b/applications/main/subghz/subghz_history.h index 90f0ca00f..d7f53d78f 100644 --- a/applications/main/subghz/subghz_history.h +++ b/applications/main/subghz/subghz_history.h @@ -98,9 +98,9 @@ const char* subghz_history_get_protocol_name(SubGhzHistory* instance, uint16_t i * * @param instance - SubGhzHistory instance * @param idx - record index - * @return datetime - FuriHalRtcDateTime received timestamp + * @return datetime - DateTime received timestamp */ -FuriHalRtcDateTime subghz_history_get_datetime(SubGhzHistory* instance, uint16_t idx); +DateTime subghz_history_get_datetime(SubGhzHistory* instance, uint16_t idx); /** Get string item menu to history[idx] * diff --git a/applications/main/subghz/subghz_i.h b/applications/main/subghz/subghz_i.h index 72b960ff1..405b4a09d 100644 --- a/applications/main/subghz/subghz_i.h +++ b/applications/main/subghz/subghz_i.h @@ -81,7 +81,7 @@ struct SubGhz { bool raw_send_only; bool save_datetime_set; - FuriHalRtcDateTime save_datetime; + DateTime save_datetime; SubGhzLastSettings* last_settings; diff --git a/applications/system/nightstand/clock_app.c b/applications/system/nightstand/clock_app.c index bb7e5759d..b692d6d3f 100644 --- a/applications/system/nightstand/clock_app.c +++ b/applications/system/nightstand/clock_app.c @@ -131,9 +131,9 @@ static void clock_render_callback(Canvas* const canvas, void* ctx) { return; } - FuriHalRtcDateTime curr_dt; + DateTime curr_dt; furi_hal_rtc_get_datetime(&curr_dt); - uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + uint32_t curr_ts = datetime_datetime_to_timestamp(&curr_dt); char time_string[TIME_LEN]; char date_string[DATE_LEN]; diff --git a/applications/system/nightstand/clock_app.h b/applications/system/nightstand/clock_app.h index 693bdfac0..74648ba33 100644 --- a/applications/system/nightstand/clock_app.h +++ b/applications/system/nightstand/clock_app.h @@ -30,7 +30,7 @@ typedef struct { typedef struct { LocaleDateFormat date_format; LocaleTimeFormat time_format; - FuriHalRtcDateTime datetime; + DateTime datetime; FuriMutex* mutex; FuriMessageQueue* event_queue; uint32_t timer_start_timestamp; diff --git a/lib/lfrfid/protocols/lfrfid_protocols.c b/lib/lfrfid/protocols/lfrfid_protocols.c index a8d0ff280..10998399a 100644 --- a/lib/lfrfid/protocols/lfrfid_protocols.c +++ b/lib/lfrfid/protocols/lfrfid_protocols.c @@ -20,8 +20,8 @@ const ProtocolBase* lfrfid_protocols[] = { [LFRFIDProtocolEM4100] = &protocol_em4100, - [LFRFIDProtocolEM410032] = &protocol_em4100_32, - [LFRFIDProtocolEM410016] = &protocol_em4100_16, + [LFRFIDProtocolEM4100_32] = &protocol_em4100_32, + [LFRFIDProtocolEM4100_16] = &protocol_em4100_16, [LFRFIDProtocolH10301] = &protocol_h10301, [LFRFIDProtocolIdteck] = &protocol_idteck, [LFRFIDProtocolIndala26] = &protocol_indala26, diff --git a/lib/lfrfid/protocols/lfrfid_protocols.h b/lib/lfrfid/protocols/lfrfid_protocols.h index 64a9fcba2..2c7ed828d 100644 --- a/lib/lfrfid/protocols/lfrfid_protocols.h +++ b/lib/lfrfid/protocols/lfrfid_protocols.h @@ -9,8 +9,8 @@ typedef enum { typedef enum { LFRFIDProtocolEM4100, - LFRFIDProtocolEM410032, - LFRFIDProtocolEM410016, + LFRFIDProtocolEM4100_32, + LFRFIDProtocolEM4100_16, LFRFIDProtocolH10301, LFRFIDProtocolIdteck, LFRFIDProtocolIndala26, diff --git a/lib/nfc/protocols/emv/emv_poller.c b/lib/nfc/protocols/emv/emv_poller.c index 9acb854d6..3042352fe 100644 --- a/lib/nfc/protocols/emv/emv_poller.c +++ b/lib/nfc/protocols/emv/emv_poller.c @@ -99,7 +99,8 @@ static NfcCommand emv_poller_handler_get_processing_options(EmvPoller* instance) } static NfcCommand emv_poller_handler_read_files(EmvPoller* instance) { - emv_poller_read_afl(instance); + // Search PAN + emv_poller_read_afl(instance, false, &instance->records_mask); emv_poller_read_log_entry(instance); instance->state = EmvPollerStateReadExtra; @@ -110,6 +111,9 @@ static NfcCommand emv_poller_handler_read_extra_data(EmvPoller* instance) { emv_poller_get_last_online_atc(instance); emv_poller_get_pin_try_counter(instance); + // Search cardholder name. This operation may break communication with the card, so it should be the last one + emv_poller_read_afl(instance, true, &instance->records_mask); + instance->state = EmvPollerStateReadSuccess; return NfcCommandContinue; } diff --git a/lib/nfc/protocols/emv/emv_poller.h b/lib/nfc/protocols/emv/emv_poller.h index 64bd0be9d..9cae80195 100644 --- a/lib/nfc/protocols/emv/emv_poller.h +++ b/lib/nfc/protocols/emv/emv_poller.h @@ -46,7 +46,7 @@ EmvError emv_poller_get_processing_options(EmvPoller* instance); EmvError emv_poller_read_sfi_record(EmvPoller* instance, uint8_t sfi, uint8_t record_num); -EmvError emv_poller_read_afl(EmvPoller* instance); +EmvError emv_poller_read_afl(EmvPoller* instance, bool bruteforce_sfi, uint16_t* readed_mask); EmvError emv_poller_read_log_entry(EmvPoller* instance); diff --git a/lib/nfc/protocols/emv/emv_poller_i.c b/lib/nfc/protocols/emv/emv_poller_i.c index 42277a27c..74734c894 100644 --- a/lib/nfc/protocols/emv/emv_poller_i.c +++ b/lib/nfc/protocols/emv/emv_poller_i.c @@ -621,84 +621,80 @@ EmvError emv_poller_read_sfi_record(EmvPoller* instance, uint8_t sfi, uint8_t re return error; } -EmvError emv_poller_read_afl(EmvPoller* instance) { +EmvError emv_poller_read_afl(EmvPoller* instance, bool bruteforce_sfi, uint16_t* readed_mask) { EmvError error = EmvErrorNone; + bool pan_fetched = (instance->data->emv_application.pan_len); + bool cardholder_name_fetched = strlen(instance->data->emv_application.cardholder_name); - APDU* afl = &instance->data->emv_application.afl; + if(!bruteforce_sfi) { + // SEARCH PAN, RETURN WHEN FOUND + APDU* afl = &instance->data->emv_application.afl; - if(afl->size == 0) { - return false; - } + if(afl->size == 0) { + return false; + } - FURI_LOG_D(TAG, "Search PAN in SFI"); + FURI_LOG_D(TAG, "Search PAN in SFI"); - // uint8_t sfi_2_mask = 0; - // uint8_t sfi_3_mask = 0; + // Iterate through all files + for(size_t i = 0; i < instance->data->emv_application.afl.size; i += 4) { + uint8_t sfi = afl->data[i] >> 3; + uint8_t record_start = afl->data[i + 1]; + uint8_t record_end = afl->data[i + 2]; + // Iterate through all records in file + for(uint8_t record = record_start; record <= record_end; ++record) { + if((sfi <= 3) && (record <= 5)) + FURI_BIT_SET( + *readed_mask, + record + ((sfi - 2) * 8)); //black magic: mask 0003333300022222 - // bool pan_fetched = (instance->data->emv_application.pan_len); + error = emv_poller_read_sfi_record(instance, sfi, record); + if(error != EmvErrorNone) break; - // Iterate through all files - for(size_t i = 0; i < instance->data->emv_application.afl.size; i += 4) { - uint8_t sfi = afl->data[i] >> 3; - uint8_t record_start = afl->data[i + 1]; - uint8_t record_end = afl->data[i + 2]; - // Iterate through all records in file - for(uint8_t record = record_start; record <= record_end; ++record) { - // if((sfi == 2) && (record < 8)) FURI_BIT_SET(sfi_2_mask, record); - // if((sfi == 3) && (record < 8)) FURI_BIT_SET(sfi_3_mask, record); + if(!emv_decode_response_tlv( + bit_buffer_get_data(instance->rx_buffer), + bit_buffer_get_size_bytes(instance->rx_buffer), + &instance->data->emv_application)) { + error = EmvErrorProtocol; + FURI_LOG_T(TAG, "Failed to parse SFI 0x%X record %d", sfi, record); + } - error = emv_poller_read_sfi_record(instance, sfi, record); - if(error != EmvErrorNone) break; - - if(!emv_decode_response_tlv( - bit_buffer_get_data(instance->rx_buffer), - bit_buffer_get_size_bytes(instance->rx_buffer), - &instance->data->emv_application)) { - error = EmvErrorProtocol; - FURI_LOG_T(TAG, "Failed to parse SFI 0x%X record %d", sfi, record); + if(instance->data->emv_application.pan_len) { + pan_fetched = true; + break; + } // Card number fetched } + if(pan_fetched) break; + } + } else { // BRUTFORCE FILES 2-3. SEARCH CARDHOLDER NAME + FURI_LOG_T(TAG, "Bruteforce files 2-3"); + for(size_t sfi = 2; sfi <= 3; sfi++) { + // Iterate through records 1-5 in file + for(size_t record = 1; record <= 5; record++) { + // Skip previously readed sfi + if((*readed_mask >> (record + ((sfi - 2) * 8))) & (0b1)) continue; - // Some READ RECORD returns 1 byte response 0x12/0x13 (IDK WTF), - // then poller return Timeout to all subsequent requests. - // TODO: remove below lines when it was fixed - if(instance->data->emv_application.pan_len != 0) - return EmvErrorNone; // Card number fetched - // if(instance->data->emv_application.pan_len) pan_fetched = true; // Card number fetched + error = emv_poller_read_sfi_record(instance, sfi, record); + if(error != EmvErrorNone) break; + + if(!emv_decode_response_tlv( + bit_buffer_get_data(instance->rx_buffer), + bit_buffer_get_size_bytes(instance->rx_buffer), + &instance->data->emv_application)) { + error = EmvErrorProtocol; + FURI_LOG_T(TAG, "Failed to parse SFI 0x%X record %d", sfi, record); + } + + if(strlen(instance->data->emv_application.cardholder_name)) + cardholder_name_fetched = true; + } } } - // bool cardholder_name_fetched = strlen(instance->data->emv_application.cardholder_name); - // Bruteforse files 2-3 - // FURI_LOG_T(TAG, "Bruteforce files 2-3"); - // for(size_t sfi = 2; sfi <= 3; sfi++) { - // // Iterate through records 1-5 in file - // for(size_t record = 1; record <= 5; record++) { - // // Skip previously readed sfi - // // if(sfi == 2) { - // // if((sfi_2_mask >> record) & (0b1)) continue; - // // } - // // if(sfi == 3) { - // // if((sfi_3_mask >> record) & (0b1)) continue; - // // } - // if(strlen(instance->data->emv_application.cardholder_name)) - // cardholder_name_fetched = true; - // error = emv_poller_read_sfi_record(instance, sfi, record); - // if(error != EmvErrorNone) break; - - // if(!emv_decode_response_tlv( - // bit_buffer_get_data(instance->rx_buffer), - // bit_buffer_get_size_bytes(instance->rx_buffer), - // &instance->data->emv_application)) { - // error = EmvErrorProtocol; - // FURI_LOG_T(TAG, "Failed to parse SFI 0x%X record %d", sfi, record); - // } - // } - // } - // if(pan_fetched || cardholder_name_fetched) - // return EmvErrorNone; - // else - // return error; - return error; + if((pan_fetched && (!bruteforce_sfi)) || (cardholder_name_fetched && bruteforce_sfi)) + return EmvErrorNone; + else + return error; } static EmvError emv_poller_req_get_data(EmvPoller* instance, uint16_t tag) { diff --git a/lib/nfc/protocols/emv/emv_poller_i.h b/lib/nfc/protocols/emv/emv_poller_i.h index 704365747..cec48f800 100644 --- a/lib/nfc/protocols/emv/emv_poller_i.h +++ b/lib/nfc/protocols/emv/emv_poller_i.h @@ -39,6 +39,7 @@ struct EmvPoller { EmvPollerEvent emv_event; NfcGenericEvent general_event; NfcGenericCallback callback; + uint16_t records_mask; void* context; }; diff --git a/lib/subghz/protocols/magellan.c b/lib/subghz/protocols/magellan.c index d57d2fdfc..a0d988c61 100644 --- a/lib/subghz/protocols/magellan.c +++ b/lib/subghz/protocols/magellan.c @@ -361,15 +361,38 @@ static void subghz_protocol_magellan_check_remote_controller(SubGhzBlockGeneric* * * 0x1275EC => 0x12-event codes, 0x75EC-serial (dec 117236) * -* event codes -* bit_0: 1-Open/Motion, 0-close/ok -* bit_1: 1-Tamper On (alarm), 0-Tamper Off (ok) -* bit_2: ? -* bit_3: 1-power on -* bit_4: model type - wireless reed -* bit_5: model type - motion sensor -* bit_6: ? -* bit_7: ? +* Event codes consist of two parts: +* - The upper nibble (bits 7-4) represents the event type: +* - 0x00: Nothing +* - 0x01: Door +* - 0x02: Motion +* - 0x03: Smoke Alarm +* - 0x04: REM1 +* - 0x05: REM1 with subtype Off1 +* - 0x06: REM2 +* - 0x07: REM2 with subtype Off1 +* - Others: Unknown +* - The lower nibble (bits 3-0) represents the event subtype, which varies based on the model type: +* - If the model type is greater than 0x03 (e.g., REM1 or REM2): +* - 0x00: Arm1 +* - 0x01: Btn1 +* - 0x02: Btn2 +* - 0x03: Btn3 +* - 0x08: Reset +* - 0x09: LowBatt +* - 0x0A: BattOk +* - 0x0B: Learn +* - Others: Unknown +* - Otherwise: +* - 0x00: Sealed +* - 0x01: Alarm +* - 0x02: Tamper +* - 0x03: Alarm + Tamper +* - 0x08: Reset +* - 0x09: LowBatt +* - 0x0A: BattOk +* - 0x0B: Learn +* - Others: Unknown * */ uint64_t data_rev = subghz_protocol_blocks_reverse_key(instance->data >> 8, 24); @@ -378,18 +401,49 @@ static void subghz_protocol_magellan_check_remote_controller(SubGhzBlockGeneric* } static void subghz_protocol_magellan_get_event_serialize(uint8_t event, FuriString* output) { - furi_string_cat_printf( - output, - "%s%s%s%s%s%s%s%s", - ((event >> 4) & 0x1 ? (event & 0x1 ? " Open" : " Close") : - (event & 0x1 ? " Motion" : " Ok")), - ((event >> 1) & 0x1 ? ", Tamper On\n(Alarm)" : ""), - ((event >> 2) & 0x1 ? ", ?" : ""), - ((event >> 3) & 0x1 ? ", Power On" : ""), - ((event >> 4) & 0x1 ? ", MT:Wireless_Reed" : ""), - ((event >> 5) & 0x1 ? ", MT:Motion_\nSensor" : ""), - ((event >> 6) & 0x1 ? ", ?" : ""), - ((event >> 7) & 0x1 ? ", ?" : "")); + const char* event_type; + const char* event_subtype; + + switch ((event >> 4) & 0x0F) { + case 0x00: event_type = "Nothing"; break; + case 0x01: event_type = "Door"; break; + case 0x02: event_type = "Motion"; break; + case 0x03: event_type = "Smoke Alarm"; break; + case 0x04: event_type = "REM1"; break; + case 0x05: + event_type = "REM1"; + event_subtype = "Off1"; + furi_string_cat_printf(output, "%s - %s", event_type, event_subtype); + return; + case 0x06: + event_type = "REM2"; + event_subtype = "Off1"; + furi_string_cat_printf(output, "%s - %s", event_type, event_subtype); + return; + default: event_type = "Unknown"; break; + } + + switch (event & 0x0F) { + case 0x00: + event_subtype = (((event >> 4) & 0x0F) > 0x03) ? "Arm1" : "Sealed"; + break; + case 0x01: + event_subtype = (((event >> 4) & 0x0F) > 0x03) ? "Btn1" : "Alarm"; + break; + case 0x02: + event_subtype = (((event >> 4) & 0x0F) > 0x03) ? "Btn2" : "Tamper"; + break; + case 0x03: + event_subtype = (((event >> 4) & 0x0F) > 0x03) ? "Btn3" : "Alarm + Tamper"; + break; + case 0x08: event_subtype = "Reset"; break; + case 0x09: event_subtype = "LowBatt"; break; + case 0x0A: event_subtype = "BattOk"; break; + case 0x0B: event_subtype = "Learn"; break; + default: event_subtype = "Unknown"; break; + } + + furi_string_cat_printf(output, "%s - %s", event_type, event_subtype); } uint32_t subghz_protocol_decoder_magellan_get_hash_data(void* context) { diff --git a/lib/toolbox/name_generator.c b/lib/toolbox/name_generator.c index 020ee44f1..dee6ac089 100644 --- a/lib/toolbox/name_generator.c +++ b/lib/toolbox/name_generator.c @@ -49,7 +49,7 @@ void name_generator_make_auto_datetime( char* name, size_t max_name_size, const char* prefix, - FuriHalRtcDateTime* custom_time) { + DateTime* custom_time) { if(!furi_hal_rtc_is_flag_set(FuriHalRtcFlagRandomFilename)) { name_generator_make_detailed_datetime( name, max_name_size, prefix, custom_time, xtreme_settings.file_naming_prefix_after); @@ -107,13 +107,13 @@ void name_generator_make_detailed_datetime( char* name, size_t max_name_size, const char* prefix, - FuriHalRtcDateTime* custom_time, + DateTime* custom_time, bool prefix_after) { furi_assert(name); furi_assert(max_name_size); furi_assert(prefix); - FuriHalRtcDateTime dateTime; + DateTime dateTime; if(custom_time) { dateTime = *custom_time; } else { diff --git a/lib/toolbox/name_generator.h b/lib/toolbox/name_generator.h index 9785d83b1..c6139fb92 100644 --- a/lib/toolbox/name_generator.h +++ b/lib/toolbox/name_generator.h @@ -19,7 +19,7 @@ void name_generator_make_auto_datetime( char* name, size_t max_name_size, const char* prefix, - FuriHalRtcDateTime* custom_time); + DateTime* custom_time); /** Generates random name * @@ -45,7 +45,7 @@ void name_generator_make_detailed_datetime( char* name, size_t max_name_size, const char* prefix, - FuriHalRtcDateTime* custom_time, + DateTime* custom_time, bool prefix_after); #ifdef __cplusplus diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index c33b047eb..8a57731b1 100644 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -957,7 +957,7 @@ Function,+,emv_load,_Bool,"EmvData*, FlipperFormat*, uint32_t" Function,+,emv_poller_get_last_online_atc,EmvError,EmvPoller* Function,+,emv_poller_get_pin_try_counter,EmvError,EmvPoller* Function,+,emv_poller_get_processing_options,EmvError,EmvPoller* -Function,+,emv_poller_read_afl,EmvError,EmvPoller* +Function,+,emv_poller_read_afl,EmvError,"EmvPoller*, _Bool, uint16_t*" Function,+,emv_poller_read_log_entry,EmvError,EmvPoller* Function,+,emv_poller_read_sfi_record,EmvError,"EmvPoller*, uint8_t, uint8_t" Function,+,emv_poller_select_application,EmvError,EmvPoller* @@ -2665,9 +2665,9 @@ Function,-,music_worker_set_volume,void,"MusicWorker*, float" Function,-,music_worker_start,void,MusicWorker* Function,-,music_worker_stop,void,MusicWorker* Function,+,name_generator_make_auto,void,"char*, size_t, const char*" -Function,+,name_generator_make_auto_datetime,void,"char*, size_t, const char*, FuriHalRtcDateTime*" +Function,+,name_generator_make_auto_datetime,void,"char*, size_t, const char*, DateTime*" Function,+,name_generator_make_detailed,void,"char*, size_t, const char*" -Function,+,name_generator_make_detailed_datetime,void,"char*, size_t, const char*, FuriHalRtcDateTime*, _Bool" +Function,+,name_generator_make_detailed_datetime,void,"char*, size_t, const char*, DateTime*, _Bool" Function,+,name_generator_make_random,void,"char*, size_t" Function,+,name_generator_make_random_prefixed,void,"char*, size_t, const char*, _Bool" Function,-,nan,double,const char*