diff --git a/plugins/sacn/main.js b/plugins/sacn/main.js index c234626..488d2cf 100644 --- a/plugins/sacn/main.js +++ b/plugins/sacn/main.js @@ -28,72 +28,67 @@ exports.ready = function ready(device) { }; +exports.data = function data(_device, buf) { -exports.data = function data(device, buf) { + const universeIndex = buf.readUInt16BE(113); + const device = _device; - const univ = buf.readUInt16BE(113); - const d = device; + let universe = device.data.universes[universeIndex]; - let u = d.data.universes[univ]; - - if(!u){ - d.data.universes[univ] = {}; - u = d.data.universes[univ]; + if(!universe){ + device.data.universes[universeIndex] = {}; + universe = device.data.universes[universeIndex]; } - u.sequence = buf.readUInt8(111); - u.priority = buf.readUInt8(108); - u.cid = buf.toString('hex', 22, 38); - u.slots = Array.prototype.slice.call(buf, 126); + universe.sequence = buf.readUInt8(111); + universe.priority = buf.readUInt8(108); + universe.cid = buf.toString('hex', 22, 38); + universe.slots = buf.slice(126); + if(buf.readUInt8(125) !== 0){ - u.startCode = buf.readUInt8(125); + universe.startCode = buf.readUInt8(125); } + device.data.source = buf.toString('utf8', 44, 108); + device.displayName = `${device.data.source} sACN`; + device.data.ip = device.addresses[0]; - d.data.source = buf.toString('utf8', 44, 108); - d.displayName = `${d.data.source} sACN`; - d.data.ip = d.addresses[0]; - - if(!_.includes(d.data.orderedUniverses, univ)){ - d.data.orderedUniverses.push(univ); - d.data.orderedUniverses.sort(); - u.slotElems = []; - u.slotElemsSet = false; - - d.draw(); - updateElementsCache(d, d.data.universes, d.data.orderedUniverses); + if(!_.includes(device.data.orderedUniverses, universeIndex)){ + device.data.orderedUniverses.push(universeIndex); + device.data.orderedUniverses.sort(); + universe.slotElems = []; + universe.slotElemsSet = false; + device.draw(); + device.update("elementCache") } - d.update("universeData", { - u: univ, - universe: u, - startCode: u.startCode + device.update("universeData", { + universeIndex, + universe, + startCode: universe.startCode }); }; - exports.heartbeat = function heartbeat(device) { }; - - let lastUpdate = Date.now(); -exports.update = function update(device, doc, updateType, updateData){ +exports.update = function update(_device, doc, updateType, updateData){ - const d = device; + const device = _device; const data = updateData; if(updateType === "universeData" && data.universe){ if(Date.now() - lastUpdate > 1000){ lastUpdate = Date.now(); - updateElementsCache(d, d.data.universes, d.data.orderedUniverses); + device.update("elementCache") } - const $elem = doc.getElementById(`universe-${data.u}`); + const $elem = doc.getElementById(`universe-${data.universeIndex}`); if($elem && data.universe.slotElemsSet){ @@ -102,7 +97,7 @@ exports.update = function update(device, doc, updateType, updateData){ data.universe.slotElems[i].innerText = data.universe.slots[i]; } - const $code = doc.getElementById(`universe-${data.u}-code`); + const $code = doc.getElementById(`universe-${data.universeIndex}-code`); if(data.startCode === 0xDD){ $code.innerText = "Net3" }else if(data.startCode === 0x17){ @@ -112,47 +107,25 @@ exports.update = function update(device, doc, updateType, updateData){ }else if(data.startCode === 0xCC){ $code.innerText = "RDM" } - } - }else{ - d.draw(); - updateElementsCache(d, d.data.universes, d.data.orderedUniverses); + device.draw(); + device.update("elementCache") } - }else if(updateType === "elementCache"){ - - data.orderedUniverses.forEach(univ => { + device.data.orderedUniverses.forEach(universeIndex => { for(let i = 0; i < 512; i++){ - data.universes[univ].slotElems[i] = doc.getElementById(`${univ}-${i}`); + device.data.universes[universeIndex].slotElems[i] = doc.getElementById(`${universeIndex}-${i}`); } - data.universes[univ].slotElemsSet = true; + device.data.universes[universeIndex].slotElemsSet = true; }); - } - - } - -function updateElementsCache(device, univ, ordered){ - device.update("elementCache", { - universes: univ, - orderedUniverses: ordered - }); -} - - - - - - - // From https://github.com/hhromic/e131-node/blob/master/lib/e131.js function getMulticastGroup(universe) { if (universe < 1 || universe > 63999) { throw new RangeError('universe should be in the range [1-63999]'); } return `239.255.${universe >> 8}.${universe & 0xff}`; - } \ No newline at end of file diff --git a/plugins/sacn/template.ejs b/plugins/sacn/template.ejs index de4a90a..aa2a835 100644 --- a/plugins/sacn/template.ejs +++ b/plugins/sacn/template.ejs @@ -4,15 +4,15 @@
-<% data.orderedUniverses.forEach(univ => { - let universe = data.universes[univ]; +<% data.orderedUniverses.forEach(universeIndex => { + let universe = data.universes[universeIndex]; %> - +
@@ -45,7 +45,7 @@ <% for(col=0; col<16; col++){ %> <% slot++%> - + <% } %> <% } %>
Universe -
<%= univ %> +
<%= universeIndex %>
Priority @@ -28,7 +28,7 @@ Flavor -
0 +
0
<%= row*16+1 %><%= universe.slots[slot-1] %><%= universe.slots[slot-1] %>