fix timestamp rollover

This commit is contained in:
Tomasz Dobrowolski
2026-03-18 12:36:22 +01:00
parent 5313faff69
commit 1483aab2a7
2 changed files with 27 additions and 1 deletions
+23 -1
View File
@@ -17,6 +17,7 @@ LAWICELSerial::LAWICELSerial(QString portName, int serialSpeed, int lawicelSpeed
serial = nullptr;
isAutoRestart = false;
rebuildLocalTimeBasis();
readSettings();
}
@@ -203,6 +204,14 @@ bool LAWICELSerial::piSendFrame(const CANFrame& frame)
/****************************************************************/
void LAWICELSerial::rebuildLocalTimeBasis()
{
timeBasis = 0;
lastHWTimestamp = -1;
wrapAdder = 0;
lastSysMs = 0;
}
void LAWICELSerial::readSettings()
{
QSettings settings;
@@ -254,6 +263,8 @@ void LAWICELSerial::deviceConnected()
{
sendDebug("Connecting to LAWICEL Device!");
rebuildLocalTimeBasis();
QByteArray output;
output.clear();
@@ -529,7 +540,18 @@ void LAWICELSerial::readSerialData()
bool hasTimestamp = mBuildLine.length() > frameStringLen + 1;
if (hasTimestamp)
{
buildFrame.setTimeStamp(QCanBusFrame::TimeStamp(0, mBuildLine.mid(frameStringLen, 4).toInt(nullptr, 16) * 1000l));
qint64 hwTs = mBuildLine.mid(frameStringLen, 4).toInt(nullptr, 16);
qint64 sysMs = QDateTime::currentMSecsSinceEpoch();
if (lastHWTimestamp >= 0 && hwTs < lastHWTimestamp) {
qint64 sysDelta = sysMs - lastSysMs;
wrapAdder += lastHWTimestamp + sysDelta - hwTs;
}
lastHWTimestamp = hwTs;
lastSysMs = sysMs;
qint64 unwrappedMs = wrapAdder + hwTs;
if (timeBasis == 0)
timeBasis = sysMs - unwrappedMs;
buildFrame.setTimeStamp(QCanBusFrame::TimeStamp::fromMicroSeconds((timeBasis + unwrappedMs) * 1000));
}
else
{