Skip to content

Commit 5ee68cf

Browse files
committed
DriftingOscillatorBase: Added setOrigin method to check that the origin is always in the past.
1 parent b63287f commit 5ee68cf

2 files changed

Lines changed: 15 additions & 3 deletions

File tree

src/inet/clock/base/DriftingOscillatorBase.cc

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77

88
#include "inet/clock/base/DriftingOscillatorBase.h"
9+
#include "inet/common/DebugDefs.h"
10+
#include "inet/common/IPrintableObject.h"
911

1012
namespace 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+
3949
void 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

src/inet/clock/base/DriftingOscillatorBase.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class INET_API DriftingOscillatorBase : public OscillatorBase, public IScriptabl
3131
protected:
3232
virtual void initialize(int stage) override;
3333

34+
virtual void setOrigin(simtime_t origin);
35+
3436
// IScriptable implementation
3537
virtual void processCommand(const cXMLElement& node) override;
3638

0 commit comments

Comments
 (0)