66
77
88#include " inet/clock/base/DriftingOscillatorBase.h"
9+ #include " inet/common/DebugDefs.h"
10+ #include " inet/common/IPrintableObject.h"
911
1012namespace inet {
1113
@@ -20,7 +22,7 @@ void DriftingOscillatorBase::initialize(int stage)
2022 else if (std::abs (nominalTickLength.dbl () - nominalTickLengthAsDouble) / nominalTickLengthAsDouble > 1E-15 )
2123 throw cRuntimeError (" The nominalTickLength parameter value %lg cannot be accurately represented with the current simulation time precision, conversion result: %s" , nominalTickLengthAsDouble, nominalTickLength.ustr ().c_str ());
2224 inverseDriftRate = invertDriftRate (driftRate);
23- origin = simTime ();
25+ setOrigin ( simTime () );
2426 simtime_t currentTickLength = getCurrentTickLength ();
2527 simtime_t tickOffset = par (" tickOffset" );
2628 if (tickOffset < 0 || tickOffset >= currentTickLength)
@@ -36,6 +38,14 @@ void DriftingOscillatorBase::initialize(int stage)
3638 }
3739}
3840
41+ void DriftingOscillatorBase::setOrigin (simtime_t origin)
42+ {
43+ EV_DEBUG << " Setting oscillator origin" << EV_FIELD (origin) << EV_ENDL ;
44+ DEBUG_CMP (origin, <=, simTime ());
45+ DEBUG_CMP (this ->origin , <=, origin);
46+ this ->origin = origin;
47+ }
48+
3949void DriftingOscillatorBase::setDriftRate (ppm newDriftRate)
4050{
4151 Enter_Method (" setDriftRate" );
@@ -55,7 +65,7 @@ void DriftingOscillatorBase::setDriftRate(ppm newDriftRate)
5565 }
5666 driftRate = newDriftRate;
5767 inverseDriftRate = newInverseDriftRate;
58- origin = currentSimTime;
68+ setOrigin ( currentSimTime) ;
5969 emit (driftRateChangedSignal, driftRate.get <ppm>());
6070 emit (postOscillatorStateChangedSignal, this );
6171 }
@@ -71,7 +81,7 @@ void DriftingOscillatorBase::setTickOffset(simtime_t newTickOffset)
7181 if (newTickOffset != oldTickOffset) {
7282 emit (preOscillatorStateChangedSignal, this );
7383 EV_DEBUG << " Setting oscillator tick offset from " << oldTickOffset << " to " << newTickOffset << " at simtime " << currentSimTime << " .\n " ;
74- origin = currentSimTime;
84+ setOrigin ( currentSimTime) ;
7585 if (newTickOffset == 0 )
7686 nextTickFromOrigin = 0 ;
7787 else
0 commit comments