Datum a čas (RTC)

Práce s datem a časem (RTC)

Každé Byzance zařízení je vybaveno obvodem pro udržování reálného času (RTC). Obsluha této funkce dodržuje standardy C++. Čas udržovaný v RTC obvodu je synchronizován automaticky pokaždé při připojení k portálu.

Čas je interpretován jako Unixové časové razítko (timestamp), které reprezentuje počet sekund uplynulých od 1.1. 1970. K obsluze tohoto času se využívají funkce ze standartní knihovny ctime.

Práci s Unix timestamp

#include "byzance.h"
// Init serial line
Serial pc(SERIAL_TX, SERIAL_RX);
// time object
time_t timestamp;
void init(){
pc.baud(115200\);
pc.printf("RTC test\n");
// Set device time manualy
timestamp = 1234567890;
set_time(timestamp);
pc.printf("Time set\n");
}
void loop(){
// unix timestamp getter
time(&timestamp);
pc.printf("Timestamp is %u\n",(unsigned int) timestamp);
Thread::wait(1000);
}

Vlastní časové pásmo a parsování timestamp do struktury

Časové razítko je v zařízení automaticky nastaveno nastaveno na UTC pásmo. Pro vlastní offset od UTC je třeba příslušnou položku změnit v command režimu bootloaderu. Nastavený offset se za běhu normálního programu dá získat pomocí veřejné funkce ''Byzance::get_timeoffset()''.

Byzance::get_timeoffset(&timeOffset);

Lokální čas se za běhu normálního programu dá získat pomocí veřejné funkce ''Byzance::get_localtime()''.

Byzance::get_localtime(&localTime);

Příklad "example_datetime" získá offset, UTC čas a lokální čas. Pokud je offset z portálu nastaven na nulu, UTC čas a lokální čas budou stejné.

example_datetime
#include "byzance.h"
int timeOffset;
struct tm localTime;
struct tm utcTime;
void loop(){
Byzance::get_timeoffset(&timeOffset);
printf("Time offset: %d\n",timeOffset);
Byzance::get_datetime(&utcTime);
printf("UTC Date: %02d/%02d/%04d \n", utcTime.tm_mday, utcTime.tm_mon+1, utcTime.tm_year+1900);
printf("UTC time: %02d:%02d:%02d\n", (utcTime.tm_hour)%24, utcTime.tm_min, utcTime.tm_sec);
Byzance::get_localtime(&localTime);
printf("Local Date: %02d/%02d/%04d \n", localTime.tm_mday, localTime.tm_mon+1, localTime.tm_year+1900);
printf("Local time: %02d:%02d:%02d\n", (localTime.tm_hour)%24, localTime.tm_min, localTime.tm_sec);
ThisThread::sleep_for(1000);
}

K převodu jednotek je možné dále využít například jeden z mnoha online nástrojů.