跳转至

TIME (v1.1)

tiny_time.h

```c /** * @file tiny_time.h * @author SHUAIWEN CUI (SHUAIWEN001@e.ntu.edu.sg) * @brief Submodule for TinyToolbox - header file * @version 1.1 * @date 2025-04-10 * @copyright Copyright © 2025 * */

pragma once

/* ================================ DEPENDENCIES ================================ */

include

include

include

include

include

include

include "esp_log.h"

include "esp_timer.h"

include "esp_sntp.h"

include "node_rtc.h"

include "freertos/FreeRTOS.h"

include "freertos/semphr.h"

ifdef __cplusplus

extern "C" {

endif

/* ================================ DEFINITIONS ================================= */

typedef int64t TinyTimeMarkt;

typedef struct TinyDateTimet { int year; int month; int day; int hour; int minute; int second; int32t microsecond; } TinyDateTime_t;

typedef struct TinyNtpSynct { uint32t unixsec; uint64t localusanchor; uint64t lastsynctimeus; uint8t syncquality; bool issynced; } TinyNtpSynct;

/* ================================ FUNCTIONS =================================== */

/* LOCAL RUNNING TIME */ TinyTimeMarkt tinygetrunningtime(void);

/* WORLD CURRENT TIME - SNTP */ void synctimewithtimezone(const char *timezonestr);

/* WORLD CURRENT TIME - GET */ TinyDateTimet tinygetcurrentdatetime(bool print_flag);

/* UNIX TIMESTAMP CONVERSION */ bool tinyunixtodatetime(uint32t unixsec, TinyDateTimet *dt); bool tinyunixustodatetime(uint64t unixus, TinyDateTimet *dt); uint32t tinydatetimetounix(const TinyDateTimet *dt); bool tinyisvaliddatetime(const TinyDateTimet *dt);

static inline bool tinyisleapyear(uint16t year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); }

/* TIME FORMATTING AND DISPLAY */ int tinyformatdatetimeiso8601(const TinyDateTimet *dt, char *buf, sizet buflen); int tinyformatdatetimeus(const TinyDateTimet *dt, char *buf, sizet buflen); int tinyformatdatetimems(const TinyDateTimet *dt, char *buf, sizet buflen); int tinyformatunixsec(uint32t unixsec, char *buf, sizet buflen); int tinyformatunixus(uint64t unixus, char *buf, sizet buflen); int tinyformatdurationus(uint64t durationus, char *buf, size_t buflen);

/* NTP SYNCHRONIZATION HOOK / void tinyntpsetsynchook(bool (hook)(uint32t unixsec));

/* NTP SYNCHRONIZATION */ bool tinyntprecordsync(uint32t unixsec); uint64t tinyntpgetworldtimeus(void); bool tinyntpgetsyncinfo(TinyNtpSynct *syncinfo); bool tinyntpissynced(void); void tinyntpsetquality(uint8t quality); bool tinyntpgetdatetimeus(TinyDateTime_t *dt);

ifdef __cplusplus

}

endif