#include "clock-fix-precision.h" #include "ns3/log.h" #include "ns3/simulator.h" #include "ns3/uinteger.h" #include #include "ns3/clock.h" namespace ns3 { NS_LOG_COMPONENT_DEFINE("FixPrecisionClock"); NS_OBJECT_ENSURE_REGISTERED(FixPrecisionClock); TypeId FixPrecisionClock::GetTypeId() { static TypeId tid = TypeId("ns3::FixPrecisionClock") .SetParent() .SetGroupName("tsn") .AddConstructor() .AddAttribute("Precision", "Fix precision offset according to the reference clock (i.e. GM)", TimeValue(Time(0)), MakeTimeAccessor(&FixPrecisionClock::m_precision), MakeTimeChecker()); return tid; } FixPrecisionClock::FixPrecisionClock() { NS_LOG_FUNCTION(this); } FixPrecisionClock::~FixPrecisionClock() { NS_LOG_FUNCTION(this); } void FixPrecisionClock::SetRefClock(Ptr refClock) { NS_LOG_FUNCTION(this); m_refClock = refClock; } Time FixPrecisionClock::GetLocalTime() { NS_LOG_FUNCTION(this); return GetUncorrectedLocalTime() + m_precision; } Time FixPrecisionClock::GetUncorrectedLocalTime() { NS_LOG_FUNCTION(this); NS_ASSERT_MSG(m_refClock != nullptr, "Reference clock no set using void VirtualClock::SetRefClock(Ptr refClock)"); return m_refClock->GetUncorrectedLocalTime(); } Time FixPrecisionClock::GetTimeAt(Time t) { NS_LOG_FUNCTION(this); return m_precision + m_refClock->GetTimeAt(t); } Time FixPrecisionClock::GetDuration(Time d) { NS_LOG_FUNCTION(this); return m_refClock->GetDuration(d); } }