File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -75,16 +75,12 @@ void DriftingOscillatorBase::setDriftRate(ppm newDriftRate)
7575 emit (preOscillatorStateChangedSignal, this );
7676 simtime_t currentSimTime = simTime ();
7777 EV_INFO << " Setting oscillator drift rate from " << driftRate << " to " << newDriftRate << " at simtime " << currentSimTime << " .\n " ;
78- if (elapsedTickTime == SIMTIME_ZERO )
79- nextTickFromOrigin = 0 ;
80- else {
81- int64_t v = increaseWithDriftRate (currentTickLength.raw () - elapsedTickTime.raw ());
82- nextTickFromOrigin = SimTime::fromRaw (decreaseWithDriftRate (v, newInverseDriftRate));
83- }
8478 simtime_t oldCurrentTickLength = getCurrentTickLength ();
8579 simtime_t baseTickTime = origin + nextTickFromOrigin - oldCurrentTickLength;
8680 simtime_t elapsedTickTime = fmod (currentSimTime - baseTickTime, oldCurrentTickLength);
8781 SimTimeScale newDriftFactor = SimTimeScale::fromPpm (newDriftRate.get <ppm>());
82+ simtime_t remainingTickTime = oldCurrentTickLength - elapsedTickTime;
83+ nextTickFromOrigin = SimTime::fromRaw (remainingTickTime.raw () * driftFactor / newDriftFactor);
8884 driftRate = newDriftRate;
8985 setDriftFactor (newDriftFactor);
9086 setOrigin (currentSimTime);
You can’t perform that action at this time.
0 commit comments