add per-address priority information for Net3 sACN

This commit is contained in:
sparks-alec
2023-01-09 00:57:50 -05:00
parent 1d689ef6c5
commit 7d180c889c
+40 -26
View File
@@ -20,6 +20,7 @@ exports.config = {
exports.ready = function ready(device) {
const d = device;
d.data.universes = {};
d.data.priorities = {};
d.data.source = 'Unknown Source';
d.data.orderedUniverses = [];
@@ -40,11 +41,16 @@ exports.data = function data(_device, buf) {
const device = _device;
let universe = device.data.universes[universeIndex];
let priorities = device.data.priorities[universeIndex];
if (!universe) {
device.data.universes[universeIndex] = {};
universe = device.data.universes[universeIndex];
}
if (!priorities) {
device.data.priorities[universeIndex] = new Array(512).fill(0);
priorities = device.data.priorities[universeIndex];
}
universe.sequence = buf.readUInt8(111);
universe.priority = buf.readUInt8(108);
@@ -65,15 +71,20 @@ exports.data = function data(_device, buf) {
universe.slotElems = [];
universe.slotElemsSet = false;
device.draw();
device.update('elementCache');
if (universe.priority > 0) {
device.draw();
device.update('elementCache');
}
}
if (universe.priority > 0) {
device.update('universeData', {
universeIndex,
universe,
startCode: universe.startCode,
});
} else {
device.data.priorities[universeIndex] = buf.slice(126);
}
device.update('universeData', {
universeIndex,
universe,
startCode: universe.startCode,
});
};
exports.heartbeat = function heartbeat(device) {};
@@ -92,32 +103,35 @@ exports.update = function update(_device, doc, updateType, updateData) {
const $elem = doc.getElementById(`universe-${data.universeIndex}`);
if ($elem && data.universe.slotElemsSet) {
if (data.universe.priority > 0) {
for (let i = 0; i < 512; i++) {
data.universe.slotElems[i].textContent = data.universe.slots[i];
}
const $code = doc.getElementById(`universe-${data.universeIndex}-code`);
if (data.startCode === 0xdd) {
$code.textContent = 'Net3';
} else if (data.startCode === 0x17) {
$code.textContent = 'Text';
} else if (data.startCode === 0xcf) {
$code.textContent = 'SIP';
} else if (data.startCode === 0xcc) {
$code.textContent = 'RDM';
}
for (let i = 0; i < 512; i++) {
data.universe.slotElems[i].textContent = data.universe.slots[i];
}
const $code = doc.getElementById(`universe-${data.universeIndex}-code`);
if (data.startCode === 0xdd) {
$code.textContent = 'Net3';
} else if (data.startCode === 0x17) {
$code.textContent = 'Text';
} else if (data.startCode === 0xcf) {
$code.textContent = 'SIP';
} else if (data.startCode === 0xcc) {
$code.textContent = 'RDM';
}
} else {
// console.log('x');
device.draw();
device.update('elementCache');
}
} else if (updateType === 'elementCache') {
device.data.orderedUniverses.forEach((universeIndex) => {
for (let i = 0; i < 512; i++) {
device.data.universes[universeIndex].slotElems[i] = doc.getElementById(`${universeIndex}-${i}`);
const universe = device.data.universes[universeIndex];
if (doc.getElementById(`${universeIndex}-0`)) {
for (let i = 0; i < 512; i++) {
universe.slotElems[i] = doc.getElementById(`${universeIndex}-${i}`);
universe.slotElems[i].title = `${universeIndex}/${i} ${device.data.priorities[universeIndex][i]}`;
}
universe.slotElemsSet = true;
}
device.data.universes[universeIndex].slotElemsSet = true;
});
}
};