mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-20 04:54:45 -07:00
Merge branch 'dev' of https://github.com/DarkFlippers/unleashed-firmware into xfw-dev
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
#include <nfc/protocols/mf_classic/mf_classic_poller_sync.h>
|
||||
|
||||
#include <bit_lib.h>
|
||||
#include <furi_hal_rtc.h>
|
||||
#include <datetime.h>
|
||||
|
||||
#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(
|
||||
|
||||
Reference in New Issue
Block a user