mirror of
https://github.com/stagehacks/Cue-View.git
synced 2026-08-06 22:33:39 +00:00
116 lines
2.9 KiB
JavaScript
116 lines
2.9 KiB
JavaScript
exports.defaultName = "PJLink Projector";
|
|
exports.connectionType = "TCPsocket";
|
|
exports.heartbeatInterval = 5000;
|
|
exports.searchOptions = {
|
|
type: "UDPsocket",
|
|
searchBuffer: Buffer.from([0x25, 0x32, 0x53, 0x52, 0x43, 0x48, 0x0d]),
|
|
devicePort: 4352,
|
|
listenPort: 4352,
|
|
validateResponse: function(msg, info){
|
|
return (msg.toString().indexOf("%2ACKN=")>=0);
|
|
}
|
|
}
|
|
exports.defaultPort = 4352;
|
|
|
|
exports.ready = function(device){
|
|
//Power status query
|
|
//device.send("%1POWR ?\r");
|
|
}
|
|
var password = false;
|
|
|
|
exports.data = function(device, message){
|
|
this.deviceInfoUpdate(device, "status", "ok");
|
|
var msg = message.toString();
|
|
|
|
const md5 = require("md5");
|
|
|
|
if(msg.substring(0, 8)=="PJLINK 1"){
|
|
password = md5(msg.substring(9, 17)+"JBMIAProjectorLink")
|
|
device.send(password+"%1POWR ?\r%1INPT ?\r%1AVMT ?\r%1ERST ?\r%1LAMP ?\r%1NAME ?\r%1INF1 ?\r%1INF2 ?\r%2SNUM ?\r%2SVER ?\r");
|
|
}
|
|
if(msg.substring(0, 7)=="%1POWR="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%1INPT="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%1AVMT="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%1ERST="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%1LAMP="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%1NAME="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%1INF1="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%1INF2="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%2SNUM="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
if(msg.substring(0, 7)=="%2SVER="){
|
|
processPJLink(device, msg, this);
|
|
}
|
|
}
|
|
|
|
function processPJLink(device, str, that){
|
|
var arr = str.split("%");
|
|
for(var key in arr){
|
|
var split = arr[key].split("=");
|
|
var key = split[0];
|
|
var value = split[1];
|
|
|
|
switch(key){
|
|
case "1POWR":
|
|
device.data.power = value;
|
|
break;
|
|
case "1INPT":
|
|
device.data.input = value;
|
|
break;
|
|
case "1AVMT":
|
|
device.data.avmute = value;
|
|
break;
|
|
case "1ERST":
|
|
device.data.fanError = value[0];
|
|
device.data.lampError = value[1];
|
|
device.data.tempError = value[2];
|
|
device.data.coverError = value[3];
|
|
device.data.filterError = value[4];
|
|
device.data.otherError = value[5];
|
|
break;
|
|
case "1LAMP":
|
|
device.data.lamp = value.split(" ");
|
|
break;
|
|
case "1NAME":
|
|
device.data.name = value;
|
|
that.deviceInfoUpdate(device, "defaultName", device.data.name);
|
|
break;
|
|
case "1INF1":
|
|
device.data.info1 = value;
|
|
break;
|
|
case "1INF2":
|
|
device.data.info2 = value;
|
|
break;
|
|
case "2SNUM":
|
|
device.data.serial = value;
|
|
break;
|
|
case "2SVER":
|
|
device.data.version = value;
|
|
break;
|
|
}
|
|
}
|
|
device.draw();
|
|
}
|
|
|
|
exports.heartbeat = function(device){
|
|
if(password){
|
|
device.send(password+"%1POWR ?\r%1INPT ?\r%1AVMT ?\r%1ERST ?\r%1LAMP ?\r%1NAME ?\r%1INF1 ?\r%1INF2 ?\r%2SNUM ?\r%2SVER ?\r");
|
|
}
|
|
} |