Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
uavcan_linux::SystemClock Class Reference

#include <clock.hpp>

Inheritance diagram for uavcan_linux::SystemClock:
Inheritance graph
[legend]

Public Member Functions

void adjustUtc (const uavcan::UtcDuration adjustment) override
 
std::uint64_t getAdjustmentCount () const
 
ClockAdjustmentMode getAdjustmentMode () const
 
std::uint64_t getGradualAdjustmentCount () const
 
uavcan::UtcDuration getGradualAdjustmentLimit () const
 
uavcan::MonotonicTime getMonotonic () const override
 
uavcan::UtcDuration getPrivateAdjustment () const
 
std::uint64_t getStepAdjustmentCount () const
 
uavcan::UtcTime getUtc () const override
 
void setGradualAdjustmentLimit (uavcan::UtcDuration limit)
 
 SystemClock (ClockAdjustmentMode adj_mode=detectPreferredClockAdjustmentMode())
 
- Public Member Functions inherited from uavcan::ISystemClock
virtual ~ISystemClock ()
 

Static Public Member Functions

static ClockAdjustmentMode detectPreferredClockAdjustmentMode ()
 

Private Member Functions

bool performGradualAdjustment (const uavcan::UtcDuration adjustment)
 
bool performStepAdjustment (const uavcan::UtcDuration adjustment)
 

Private Attributes

const ClockAdjustmentMode adj_mode_
 
std::uint64_t gradual_adj_cnt_
 
uavcan::UtcDuration gradual_adj_limit_
 
uavcan::UtcDuration private_adj_
 
std::uint64_t step_adj_cnt_
 

Static Private Attributes

static constexpr std::int64_t Int1e6 = 1000000
 
static constexpr std::uint64_t UInt1e6 = 1000000
 

Detailed Description

Linux system clock driver. Requires librt.

Definition at line 33 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

Constructor & Destructor Documentation

◆ SystemClock()

uavcan_linux::SystemClock::SystemClock ( ClockAdjustmentMode  adj_mode = detectPreferredClockAdjustmentMode())
inlineexplicit

By default, the clock adjustment mode will be selected automatically - global if root, private otherwise.

Definition at line 72 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

Member Function Documentation

◆ adjustUtc()

void uavcan_linux::SystemClock::adjustUtc ( const uavcan::UtcDuration  adjustment)
inlineoverridevirtual

Adjusts the wall clock. Behavior depends on the selected clock adjustment mode - ClockAdjustmentMode. Clock adjustment mode can be set only once via constructor.

If the system wide adjustment mode is selected, two ways for performing adjustment exist:

  • Gradual adjustment using adjtime(), if the phase error is less than gradual adjustment limit.
  • Step adjustment using settimeofday(), if the phase error is above gradual adjustment limit. The gradual adjustment limit can be configured at any time via the setter method.
Exceptions
uavcan_linux::Exception.

Implements uavcan::ISystemClock.

Definition at line 124 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

◆ detectPreferredClockAdjustmentMode()

static ClockAdjustmentMode uavcan_linux::SystemClock::detectPreferredClockAdjustmentMode ( )
inlinestatic

This static method decides what is the optimal clock sync adjustment mode for the current configuration. It selects system wide mode if the application is running as root; otherwise it prefers the private adjustment mode because the system wide mode requires root privileges.

Definition at line 189 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

◆ getAdjustmentCount()

std::uint64_t uavcan_linux::SystemClock::getAdjustmentCount ( ) const
inline

◆ getAdjustmentMode()

ClockAdjustmentMode uavcan_linux::SystemClock::getAdjustmentMode ( ) const
inline

◆ getGradualAdjustmentCount()

std::uint64_t uavcan_linux::SystemClock::getGradualAdjustmentCount ( ) const
inline

◆ getGradualAdjustmentLimit()

uavcan::UtcDuration uavcan_linux::SystemClock::getGradualAdjustmentLimit ( ) const
inline

◆ getMonotonic()

uavcan::MonotonicTime uavcan_linux::SystemClock::getMonotonic ( ) const
inlineoverridevirtual

Returns monotonic timestamp from librt.

Exceptions
uavcan_linux::Exception.

Implements uavcan::ISystemClock.

Definition at line 83 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

◆ getPrivateAdjustment()

uavcan::UtcDuration uavcan_linux::SystemClock::getPrivateAdjustment ( ) const
inline

This is only applicable if the selected clock adjustment mode is private. In system wide mode this method will always return zero duration.

Definition at line 172 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

◆ getStepAdjustmentCount()

std::uint64_t uavcan_linux::SystemClock::getStepAdjustmentCount ( ) const
inline

Statistics that allows to evaluate clock sync preformance.

Definition at line 177 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

◆ getUtc()

uavcan::UtcTime uavcan_linux::SystemClock::getUtc ( ) const
inlineoverridevirtual

Returns wall time from gettimeofday().

Exceptions
uavcan_linux::Exception.

Implements uavcan::ISystemClock.

Definition at line 97 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

◆ performGradualAdjustment()

bool uavcan_linux::SystemClock::performGradualAdjustment ( const uavcan::UtcDuration  adjustment)
inlineprivate

◆ performStepAdjustment()

bool uavcan_linux::SystemClock::performStepAdjustment ( const uavcan::UtcDuration  adjustment)
inlineprivate

◆ setGradualAdjustmentLimit()

void uavcan_linux::SystemClock::setGradualAdjustmentLimit ( uavcan::UtcDuration  limit)
inline

Sets the maximum phase error to use adjtime(). If the phase error exceeds this value, settimeofday() will be used instead.

Definition at line 155 of file platform_specific_components/linux/libuavcan/include/uavcan_linux/clock.hpp.

Member Data Documentation

◆ adj_mode_

const ClockAdjustmentMode uavcan_linux::SystemClock::adj_mode_
private

◆ gradual_adj_cnt_

std::uint64_t uavcan_linux::SystemClock::gradual_adj_cnt_
private

◆ gradual_adj_limit_

uavcan::UtcDuration uavcan_linux::SystemClock::gradual_adj_limit_
private

◆ Int1e6

constexpr std::int64_t uavcan_linux::SystemClock::Int1e6 = 1000000
staticconstexprprivate

◆ private_adj_

uavcan::UtcDuration uavcan_linux::SystemClock::private_adj_
private

◆ step_adj_cnt_

std::uint64_t uavcan_linux::SystemClock::step_adj_cnt_
private

◆ UInt1e6

constexpr std::uint64_t uavcan_linux::SystemClock::UInt1e6 = 1000000
staticconstexprprivate

The documentation for this class was generated from the following file:


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:05