/* * Copyright (c) 2018 Oticon A/S * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief API to the native_posix (Real) Time Clock */ #ifndef _NATIVE_POSIX_RTC_H #define _NATIVE_POSIX_RTC_H #include "hw_models_top.h" #include #include "zephyr/types.h" #ifdef __cplusplus extern "C" { #endif /* * Types of clocks this RTC provides: */ /** Time since boot, cannot be offset. Microsecond resolution */ #define RTC_CLOCK_BOOT 0 /** Persistent clock, can be offset. Microsecond resolution */ #define RTC_CLOCK_REALTIME 1 /** * Pseudo-host real time clock (Please see documentation). * Nanosecond resolution */ #define RTC_CLOCK_PSEUDOHOSTREALTIME 2 /** * @brief Get the value of a clock in microseconds * * @param clock_type Which clock to measure from * * @return Number of microseconds */ uint64_t native_rtc_gettime_us(int clock_type); /** * @brief Get the value of a clock split in in nsec and seconds * * @param clock_type Which clock to measure from * @param nsec Pointer to store the nanoseconds * @param nsec Pointer to store the seconds */ void native_rtc_gettime(int clock_type, uint32_t *nsec, uint64_t *sec); /** * @brief Offset the real time clock by a number of microseconds. * Note that this only affects the RTC_CLOCK_REALTIME and * RTC_CLOCK_PSEUDOHOSTREALTIME clocks. * * @param delta_us Number of microseconds to offset. The value is added to all * offsetable clocks. */ void native_rtc_offset(int64_t delta_us); /** * @brief Adjust the speed of the clock source by a multiplicative factor * * @param clock_correction Factor by which to correct the clock speed */ void native_rtc_adjust_clock(double clock_correction); #ifdef __cplusplus } #endif #endif /* _NATIVE_POSIX_RTC_H */