|
Infuse-IoT SDK API 0.0.1
A Scalable Open Source RTOS
|
Infuse-IoT time based on the GPS epoch. More...
#include <stdint.h>#include <stdbool.h>#include <time.h>#include <zephyr/kernel.h>#include <zephyr/toolchain.h>#include <zephyr/sys/timeutil.h>#include "epoch_units.h"Go to the source code of this file.
Data Structures | |
| struct | epoch_time_cb |
| epoch time event callback structure. More... | |
Macros | |
| #define | SECONDS_PER_MINUTE (60) |
| #define | SECONDS_PER_HOUR (60 * SECONDS_PER_MINUTE) |
| #define | SECONDS_PER_DAY (24 * SECONDS_PER_HOUR) |
| #define | SECONDS_PER_WEEK (7 * SECONDS_PER_DAY) |
| #define | INFUSE_EPOCH_TIME_GPS_UNIX_OFFSET_SECONDS_LEAP 18 |
| Current offset between GPS and UNIX timestamps. | |
| #define | INFUSE_EPOCH_TIME_GPS_UNIX_OFFSET_SECONDS_BASE 315964800 |
| Unix time at the instant of the GPS epoch. | |
| #define | INFUSE_EPOCH_TIME_TICKS_PER_SEC (UINT16_MAX + 1) |
| Base tick rate of Infuse-IoT epoch time. | |
Enumerations | |
| enum | epoch_time_source { TIME_SOURCE_NONE = 0 , TIME_SOURCE_GNSS , TIME_SOURCE_NTP , TIME_SOURCE_RPC , TIME_SOURCE_INVALID , TIME_SOURCE_RECOVERED = 0x80 } |
Functions | |
| void | epoch_time_register_callback (struct epoch_time_cb *cb) |
| Register to be notified of epoch time events. | |
| static bool | epoch_time_trusted_source (enum epoch_time_source source, bool recovered_ok) |
| Determine whether a given time source should be trusted. | |
| static uint64_t | epoch_time_seconds (uint64_t epoch_time) |
| Extracts epoch seconds from a complete epoch time. | |
| static uint16_t | epoch_time_subseconds (uint64_t epoch_time) |
| Extracts epoch subseconds from a complete epoch time. | |
| static uint16_t | epoch_time_milliseconds (uint64_t epoch_time) |
| Extracts epoch milliseconds from a complete epoch time. | |
| static uint64_t | epoch_time_from (uint64_t seconds, uint16_t subseconds) |
| Convert seconds and subseconds to complete epoch time. | |
| static uint64_t | epoch_time_from_gps (uint16_t week, uint32_t week_seconds, uint16_t subseconds) |
| Convert GPS time format to complete epoch time. | |
| static uint32_t | unix_time_from_epoch (uint64_t epoch_time) |
| Convert epoch time to current unix time. | |
| static uint64_t | epoch_time_from_unix (uint32_t unix_time, uint16_t subseconds) |
| Convert unix time to current epoch time. | |
| uint64_t | ticks_from_epoch_time (uint64_t epoch_time) |
| Get a tick count associated with a epoch time. | |
| uint64_t | epoch_time_from_ticks (uint64_t ticks) |
| Get the epoch time associated with a local uptime. | |
| uint32_t | epoch_period_from_array_ticks (uint64_t array_ticks, uint16_t array_num) |
| Get the epoch time period associated with an array. | |
| static uint64_t | epoch_time_now (void) |
| Get the current epoch time. | |
| void | epoch_time_unix_calendar (uint64_t epoch_time, struct tm *calendar) |
| Convert a epoch time to a unix time calendar. | |
| enum epoch_time_source | epoch_time_get_source (void) |
| Get the current source of epoch time knowledge. | |
| int | epoch_time_set_reference (enum epoch_time_source source, struct timeutil_sync_instant *reference) |
| Set the local to epoch time reference instant. | |
| uint32_t | epoch_time_reference_age (void) |
| Query how many seconds ago the reference instant was set. | |
| int | epoch_time_reference_shift (const struct timeutil_sync_instant *ref_a, const struct timeutil_sync_instant *ref_b, int64_t *epoch_shift) |
| Determine the epoch time shift due to moving from ref_a to ref_b. | |
Infuse-IoT time based on the GPS epoch.
SPDX-License-Identifier: FSL-1.1-ALv2
Infuse-IoT uses the GPS epoch for local timekeeping. For simplicity, seconds and subseconds are encoded into a single uint64_t. The top 48 bits are the number of seconds elapsed since the GPS epoch (00:00:00 06/01/1980 UTC). The bottom 16 bits are in units of (1/65536) seconds.