123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #pragma once
- #include "AP_HAL_ChibiOS.h"
- #if HAL_WITH_UAVCAN
- #include <uavcan/driver/system_clock.hpp>
- namespace ChibiOS_CAN {
- namespace clock {
- void init();
- uavcan::MonotonicTime getMonotonic();
- void setUtc(uavcan::UtcTime time);
- uavcan::UtcTime getUtc();
- void adjustUtc(uavcan::UtcDuration adjustment);
- struct UtcSyncParams {
- float offset_p;
- float rate_i;
- float rate_error_corner_freq;
- float max_rate_correction_ppm;
- float lock_thres_rate_ppm;
- uavcan::UtcDuration lock_thres_offset;
- uavcan::UtcDuration min_jump;
- UtcSyncParams()
- : offset_p(0.01F)
- , rate_i(0.02F)
- , rate_error_corner_freq(0.01F)
- , max_rate_correction_ppm(300.0F)
- , lock_thres_rate_ppm(2.0F)
- , lock_thres_offset(uavcan::UtcDuration::fromMSec(4))
- , min_jump(uavcan::UtcDuration::fromMSec(10))
- { }
- };
- float getUtcRateCorrectionPPM();
- uavcan::uint32_t getUtcJumpCount();
- bool isUtcLocked();
- UtcSyncParams getUtcSyncParams();
- void setUtcSyncParams(const UtcSyncParams& params);
- }
- class SystemClock : public uavcan::ISystemClock, uavcan::Noncopyable {
- SystemClock() { }
- virtual void adjustUtc(uavcan::UtcDuration adjustment) override
- {
- clock::adjustUtc(adjustment);
- }
- public:
- virtual uavcan::MonotonicTime getMonotonic() const override
- {
- return clock::getMonotonic();
- }
- virtual uavcan::UtcTime getUtc() const override
- {
- return clock::getUtc();
- }
-
- static SystemClock& get_singleton();
- };
- }
- #endif
|