CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
host_api_time.cpp
Go to the documentation of this file.
1
5
6#include "cdc_hal/IRtc.h"
8#include "esp_timer.h"
9
10#include <ctime>
11
12using cdc::hal::IRtc;
14
15extern "C" {
16
17uint64_t host_uptime_ms(void)
18{
19 return static_cast<uint64_t>(esp_timer_get_time() / 1000LL);
20}
21
22int64_t host_unix_time(void)
23{
24 auto* r = getRtcInstance();
25 return r ? static_cast<int64_t>(r->getTimestamp()) : 0;
26}
27
29{
30 auto* r = getRtcInstance();
31 return r ? r->isTimeSet() : false;
32}
33
35{
36 auto* r = getRtcInstance();
37 return r ? r->getTimezoneOffset() : 0;
38}
39
40int host_local_time(struct host_tm* out)
41{
42 if (!out) return HOST_ERR_INVALID_ARG;
43 auto* r = getRtcInstance();
44 if (!r) return HOST_ERR_NOT_FOUND;
45 std::time_t ts = static_cast<std::time_t>(r->getTimestamp());
46 std::tm tm{};
47 std::tm* local = std::localtime(&ts);
48 if (local) tm = *local;
49 out->year = static_cast<uint16_t>(tm.tm_year + 1900);
50 out->month = static_cast<uint8_t>(tm.tm_mon + 1);
51 out->day = static_cast<uint8_t>(tm.tm_mday);
52 out->hour = static_cast<uint8_t>(tm.tm_hour);
53 out->minute = static_cast<uint8_t>(tm.tm_min);
54 out->second = static_cast<uint8_t>(tm.tm_sec);
55 out->weekday = static_cast<uint8_t>(tm.tm_wday);
56 return HOST_OK;
57}
58
59} // extern "C"
int host_local_time(struct host_tm *out)
Fill out with the current local time broken into fields.
bool host_is_time_set(void)
True when the RTC has been synchronised at least once.
uint64_t host_uptime_ms(void)
Monotonic milliseconds since boot.
int64_t host_unix_time(void)
Current Unix timestamp in seconds, or 0 if RTC not set.
int32_t host_timezone_offset(void)
Configured timezone offset from UTC in seconds.
CDC Badge OS plugin host API - canonical C ABI contract.
#define HOST_OK
Definition host_api.h:37
#define HOST_ERR_INVALID_ARG
Definition host_api.h:39
#define HOST_ERR_NOT_FOUND
Definition host_api.h:41
IRtc * getRtcInstance()
Returns the singleton RTC service instance.
Definition Rtc.cpp:304
IRtc * getRtcInstance()
Returns the singleton RTC service instance.
Definition Rtc.cpp:304
uint8_t weekday
Definition host_api.h:89
uint8_t minute
Definition host_api.h:87
uint16_t year
Definition host_api.h:83
uint8_t hour
Definition host_api.h:86
uint8_t month
Definition host_api.h:84
uint8_t day
Definition host_api.h:85
uint8_t second
Definition host_api.h:88