From aac28efa368e31c4491c3ca0f922404b4fd2436c Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Sun, 16 Mar 2025 14:49:53 +0300 Subject: [PATCH] utils: add get_datetime and fat32_datetime --- include/utils.h | 4 ++++ src/utils.c | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/utils.h b/include/utils.h index e0c117e..5f3be7d 100644 --- a/include/utils.h +++ b/include/utils.h @@ -1,11 +1,15 @@ #ifndef UTILS_H #define UTILS_H #include "../include/types.h" +#include "../include/stdio.h" +#include uint8 inportb(uint16 _port); void outportb(uint16 _port, uint8 _data); uint8_t get_rtc(uint8_t reg); void get_fancy_datetime(); +void get_datetime(uint16_t *year, uint8_t *month, uint8_t *day, uint8_t *hour, uint8_t *minute, uint8_t *second); +uint32_t fat32_datetime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second); #define inb inportb #define outb outportb diff --git a/src/utils.c b/src/utils.c index 05709bb..87b7805 100644 --- a/src/utils.c +++ b/src/utils.c @@ -33,3 +33,27 @@ void get_fancy_datetime() uint8_t second = get_rtc(0x00); printf("%X-%X-%X%X %X:%X:%X\n", day_of_month, month, century, year, hour, minute, second); } + +void get_datetime(uint16_t *year, uint8_t *month, uint8_t *day, uint8_t *hour, uint8_t *minute, uint8_t *second) +{ + uint8_t century = get_rtc(0x32); + uint8_t year_rtc = get_rtc(0x09); + + *year = century * 100 + year_rtc; + *month = get_rtc(0x08); + *day = get_rtc(0x07); + *hour = get_rtc(0x04); + *minute = get_rtc(0x02); + *second = get_rtc(0x00); +} + +uint32_t fat32_datetime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) +{ + uint16_t fat_year = year - 1980; + + uint16_t fat_date = (fat_year << 9) | ((month & 0x0F) << 5) | (day & 0x1F); + uint16_t fat_time = (hour & 0x1F) << 11 | ((minute & 0x3F) >> 1) << 5 | (second / 2) & 0x1F; + uint32_t fat_datetime = ((uint32_t)fat_date << 16) | fat_time; + + return fat_datetime; +}