Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
precision_clock.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: Copyright The Zephyr Project Contributors
3 * SPDX-FileCopyrightText: Copyright (c) 2026 Philipp Steiner
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
12
13#ifndef ZEPHYR_INCLUDE_ZEPHYR_PRECISION_TIMING_PRECISION_CLOCK_H_
14#define ZEPHYR_INCLUDE_ZEPHYR_PRECISION_TIMING_PRECISION_CLOCK_H_
15
16#include <stdint.h>
17
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
32
33struct precision_clock;
34
36#define PRECISION_CLOCK_SCALED_PPM_SHIFT 16
37
39#define PRECISION_CLOCK_SCALED_PPM_ONE (INT64_C(1) << PRECISION_CLOCK_SCALED_PPM_SHIFT)
40
49 int (*read)(const struct precision_clock *precision_clk, precision_time_t *time_ns);
51 int (*set)(const struct precision_clock *precision_clk, precision_time_t time_ns);
53 int (*adjust_phase)(const struct precision_clock *precision_clk, precision_time_t phase_ns);
55 int (*adjust_rate)(const struct precision_clock *precision_clk, int64_t scaled_ppm);
56};
57
61 const struct precision_clock_api *api;
63 void *data;
64};
65
75int precision_clock_read(const struct precision_clock *precision_clk, precision_time_t *time_ns);
76
86int precision_clock_set(const struct precision_clock *precision_clk, precision_time_t time_ns);
87
97int precision_clock_adjust_phase(const struct precision_clock *precision_clk,
98 precision_time_t phase_ns);
99
110int precision_clock_ppb_to_scaled_ppm(double ppb, int64_t *scaled_ppm);
111
123int precision_clock_adjust_rate(const struct precision_clock *precision_clk, int64_t scaled_ppm);
124
126
127#ifdef __cplusplus
128}
129#endif
130
131#endif /* ZEPHYR_INCLUDE_ZEPHYR_PRECISION_TIMING_PRECISION_CLOCK_H_ */
int precision_clock_ppb_to_scaled_ppm(double ppb, int64_t *scaled_ppm)
Convert parts per billion to scaled parts per million.
int precision_clock_adjust_rate(const struct precision_clock *precision_clk, int64_t scaled_ppm)
Set the rate offset of a precision clock.
int precision_clock_set(const struct precision_clock *precision_clk, precision_time_t time_ns)
Set a precision clock.
int precision_clock_adjust_phase(const struct precision_clock *precision_clk, precision_time_t phase_ns)
Apply a phase adjustment to a precision clock.
int precision_clock_read(const struct precision_clock *precision_clk, precision_time_t *time_ns)
Read a precision clock.
int64_t precision_time_t
Signed precision time value expressed in nanoseconds.
Definition precision_time.h:40
Signed precision time arithmetic.
__INT64_TYPE__ int64_t
Definition stdint.h:75
Operations implemented by a precision clock adapter.
Definition precision_clock.h:47
int(* adjust_rate)(const struct precision_clock *precision_clk, int64_t scaled_ppm)
Set the clock rate offset from its nominal frequency.
Definition precision_clock.h:55
int(* adjust_phase)(const struct precision_clock *precision_clk, precision_time_t phase_ns)
Apply a signed phase adjustment in nanoseconds.
Definition precision_clock.h:53
int(* read)(const struct precision_clock *precision_clk, precision_time_t *time_ns)
Read the current clock value.
Definition precision_clock.h:49
int(* set)(const struct precision_clock *precision_clk, precision_time_t time_ns)
Set the current clock value.
Definition precision_clock.h:51
Protocol-neutral precision clock instance.
Definition precision_clock.h:59
void * data
Adapter-specific data passed to each operation.
Definition precision_clock.h:63
const struct precision_clock_api * api
Adapter operations.
Definition precision_clock.h:61