/* * Copyright (C) 2014 Pavel Kirienko */ #pragma once #include #include #include namespace uavcan { class GlobalTimeSyncSlave : Noncopyable { typedef MethodBinder&)> GlobalTimeSyncCallback; // Static buffers are explicitly disabled because time should never be unicasted. Subscriber sub_; UtcTime prev_ts_utc_; MonotonicTime prev_ts_mono_; MonotonicTime last_adjustment_ts_; enum State { Update, Adjust } state; NodeID master_nid_; uint8_t prev_iface_index_; ISystemClock& getSystemClock() const { return sub_.getNode().getSystemClock(); } void adjustFromMsg(const ReceivedDataStructure& msg); void updateFromMsg(const ReceivedDataStructure& msg); void processMsg(const ReceivedDataStructure& msg); void handleGlobalTimeSync(const ReceivedDataStructure& msg); public: GlobalTimeSyncSlave(INode& node) : sub_(node) , state(Update) , prev_iface_index_(0xFF) { } int start(); bool isActive() const; NodeID getMasterNodeID() const; }; }