119 lines
2.7 KiB
JavaScript
119 lines
2.7 KiB
JavaScript
/* eslint-env worker */
|
|
/* eslint-disable no-restricted-globals */
|
|
import DBC from "../models/can/dbc";
|
|
import DbcUtils from "../utils/dbc";
|
|
import extend from "xtend";
|
|
|
|
function processStreamedCanMessages(
|
|
newCanMessages,
|
|
prevMsgEntries,
|
|
firstCanTime,
|
|
dbc,
|
|
lastBusTime,
|
|
byteStateChangeCountsByMessage,
|
|
maxByteStateChangeCount
|
|
) {
|
|
const messages = {};
|
|
let lastCanTime;
|
|
|
|
for (let batch = 0; batch < newCanMessages.length; batch++) {
|
|
let { time, canMessages } = newCanMessages[batch];
|
|
canMessages = canMessages.sort((msg1, msg2) => {
|
|
if (msg1[1] < msg2[1]) {
|
|
return -1;
|
|
} else if (msg1[1] > msg2[1]) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
});
|
|
|
|
let busTimeSum = 0;
|
|
|
|
for (let i = 0; i < canMessages.length; i++) {
|
|
let { address, busTime, data, bus } = canMessages[i];
|
|
|
|
let prevBusTime;
|
|
if (i === 0) {
|
|
if (lastBusTime === null) {
|
|
prevBusTime = 0;
|
|
} else {
|
|
prevBusTime = lastBusTime;
|
|
}
|
|
} else {
|
|
prevBusTime = canMessages[i - 1].busTime;
|
|
}
|
|
|
|
if (busTime >= prevBusTime) {
|
|
busTimeSum += busTime - prevBusTime;
|
|
} else {
|
|
busTimeSum += 0x10000 - prevBusTime + busTime;
|
|
}
|
|
const message = extend(canMessages[i]);
|
|
message.busTime = time + busTimeSum / 500000.0;
|
|
|
|
if (firstCanTime === 0) {
|
|
firstCanTime = message.busTime;
|
|
}
|
|
|
|
const msgEntry = DbcUtils.addCanMessage(
|
|
message,
|
|
dbc,
|
|
firstCanTime,
|
|
messages,
|
|
prevMsgEntries,
|
|
byteStateChangeCountsByMessage
|
|
);
|
|
if (i === canMessages.length - 1) {
|
|
lastCanTime = msgEntry.relTime;
|
|
}
|
|
}
|
|
|
|
lastBusTime = canMessages[canMessages.length - 1].busTime;
|
|
const newMaxByteStateChangeCount = DbcUtils.findMaxByteStateChangeCount(
|
|
messages
|
|
);
|
|
|
|
if (newMaxByteStateChangeCount > maxByteStateChangeCount) {
|
|
maxByteStateChangeCount = newMaxByteStateChangeCount;
|
|
}
|
|
|
|
Object.keys(messages).forEach(key => {
|
|
messages[key] = DbcUtils.setMessageByteColors(
|
|
messages[key],
|
|
maxByteStateChangeCount
|
|
);
|
|
});
|
|
}
|
|
|
|
self.postMessage({
|
|
newMessages: messages,
|
|
seekTime: lastCanTime,
|
|
lastBusTime,
|
|
firstCanTime,
|
|
maxByteStateChangeCount
|
|
});
|
|
}
|
|
|
|
self.onmessage = function(e) {
|
|
const {
|
|
newCanMessages,
|
|
prevMsgEntries,
|
|
firstCanTime,
|
|
dbcText,
|
|
lastBusTime,
|
|
byteStateChangeCountsByMessage,
|
|
maxByteStateChangeCount
|
|
} = e.data;
|
|
const dbc = new DBC(dbcText);
|
|
processStreamedCanMessages(
|
|
newCanMessages,
|
|
prevMsgEntries,
|
|
firstCanTime,
|
|
dbc,
|
|
lastBusTime,
|
|
byteStateChangeCountsByMessage,
|
|
maxByteStateChangeCount
|
|
);
|
|
};
|