diff --git a/plugins/sacn/main.js b/plugins/sacn/main.js index 6ee5107..955354c 100644 --- a/plugins/sacn/main.js +++ b/plugins/sacn/main.js @@ -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; }); } };