cabana/src/workers/CanStreamerWorker.worker.js

119 lines
2.7 KiB
JavaScript
Raw Normal View History

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