function irTransceive(type, name, id)
{
this.CanService(type, name, id);
}
extend(irTransceive, CanService);
irTransceive.prototype.canMessageHandler = function(canMessage)
{
/*if (canMessage.getDirectionFlag() == "From_Owner")
{
switch (canMessage.getCommandName())
{
case "IR":
break;
}
}*/
this.CanService.prototype.canMessageHandler.call(this, canMessage);
}
irTransceive.prototype.sendClick = function(channel, remoteName, buttonName, time)
{
this.sendButton(channel, remoteName, buttonName, true);
if (time)
{
sleep(time);
}
else
{
sleep(50000);
}
this.sendButton(channel, remoteName, buttonName, false);
}
irTransceive.prototype.sendButton = function(channel, remoteName, buttonName, down)
{
var remotesStore = DataStore.getStore("IRRemotes");
if (remotesStore)
{
for (var n = 0; n < remotesStore['remotes'].length; n++)
{
if (remotesStore['remotes'][n]['name'] == remoteName)
{
for (var code in remotesStore['remotes'][n]['codes'])
{
if (remotesStore['remotes'][n]['codes'][code] == buttonName)
{
this.sendData(channel, remotesStore['remotes'][n]['protocol'], code, down ? "Pressed" : "Released");
return;
}
}
}
}
}
}
irTransceive.prototype.sendData = function(channel, protocol, data, status)
{
var canMessage = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IR");
canMessage.setData("Channel", channel);
canMessage.setData("Status", status);
canMessage.setData("Protocol", protocol);
canMessage.setData("IRdata", data);
sendMessage(canMessage);
}
irTransceive.prototype.sendConfig = function(channel, direction, power, modfreq)
{
var canMessage2 = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrConfig");
canMessage2.setData("Channel", channel);
canMessage2.setData("Direction", direction);
canMessage2.setData("Transmit power", power);
canMessage2.setData("Modulation divider", modfreq);
sendMessage(canMessage2);
}
function hexString2NumberArray(hexString)
{
var tokens = hexString.split(' ');
var numbers = new Array();
for (var i=0; i<tokens.length; i++) {
numbers[i] = parseInt(tokens[i], 16)
}
return numbers;
}
// prontoHexString is a space-separated hex string, including both the pronto header and the data
irTransceive.prototype.sendProntoHex = function(channel, repeatCount, prontoHexString)
{
var prontoNumbers = hexString2NumberArray(prontoHexString);
// header
var format = prontoNumbers[0];
var frqDiv = prontoNumbers[1];
var onceSeqLen = prontoNumbers[2];
var repSeqLen = prontoNumbers[3];
print("Sending START. CH=" + channel + ", fmt=" + format + ", wFrqDiv=" + frqDiv + ", onceLen=" + onceSeqLen + ", repLen=" + repSeqLen + "\n");
var msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoStart");
msg.setData("Channel", channel);
msg.setData("Format", format);
msg.setData("wFrqDiv", frqDiv);
msg.setData("OnceSeqLen", onceSeqLen);
msg.setData("RepSeqLen", repSeqLen);
sendMessage(msg);
sleep(10);
// data
var nrBytes = 0;
var bytes = new Array();
var seqNr = 0;
for (var i=4; i<prontoNumbers.length; i++) {
// 8bit value?
if (prontoNumbers[i] <= 255) {
// compress into single byte
bytes[nrBytes] = prontoNumbers[i];
nrBytes++;
}
// 16bit value?
else {
// occupy 3 bytes to describe this value
bytes[nrBytes] = (prontoNumbers[i] & 0xFF00) >> 8;
bytes[nrBytes+1] = 0x00;
bytes[nrBytes+2] = (prontoNumbers[i] & 0x00FF) >> 0;
nrBytes += 3;
}
// time to send?
if (nrBytes >= 8) {
print("Sending DATA. " + nrBytes + " bytes: " + bytes + " (SEQ NR:" + (seqNr+1) + ")\n");
msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoData" + (seqNr+1));
msg.setData("Act1", bytes[0]);
msg.setData("Pas1", bytes[1]);
msg.setData("Act2", bytes[2]);
msg.setData("Pas2", bytes[3]);
msg.setData("Act3", bytes[4]);
msg.setData("Pas3", bytes[5]);
msg.setData("Act4", bytes[6]);
msg.setData("Pas4", bytes[7]);
sendMessage(msg);
sleep(10);
bytes = new Array();
nrBytes = 0;
seqNr = (seqNr + 1) % 16;
}
}
print("Sending END. " + nrBytes + " bytes: " + bytes + " (SEQ NR:" + (seqNr+1) + ")\n");
msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoEnd" + (seqNr+1));
if (nrBytes > 1) msg.setData("Act1", bytes[0]);
if (nrBytes > 2) msg.setData("Pas1", bytes[1]);
if (nrBytes > 3) msg.setData("Act2", bytes[2]);
if (nrBytes > 4) msg.setData("Pas2", bytes[3]);
if (nrBytes > 5) msg.setData("Act3", bytes[4]);
if (nrBytes > 6) msg.setData("Pas3", bytes[5]);
msg.setData("Repeat", repeatCount);
sendMessage(msg);
sleep(10);
}
irTransceive.prototype.sendProntoStop = function(channel)
{
var msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoStop");
msg.setData("Channel", channel);
sendMessage(msg);
}
irTransceive.prototype.sendProntoContinue = function(channel)
{
var msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoContinue");
msg.setData("Channel", channel);
sendMessage(msg);
}
function prontoTest()
{
var ir = ServiceManager.getService("Can","irTransceive",1);
ir.sendProntoHex(1, 10, "0000 006d 0022 0002 0156 00ad 0016 0016 0016 0041 0016 0041 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 05ed 0156 0056 0016 0e62");
//ir.sendProntoHex(1, "0000 006d 0022 0000 0156 00A9 0015 0014 0015 003D 0016 003D 0015 003F 0015 0015 0015 003E 0015 003D 0016 003D 0016 003E 0015 003E 0016 003E 0015 0014 0016 0014 0017 0013 0017 0013 0017 003C 0016 0014 0017 003C 0017 0013 0016 003D 0017 0013 0016 0014 0017 0013 0017 0013 0016 0014 0017 003C 0017 0013 0017 0013 0016 003D 0018 003B 0017 003C 0017 003D 0017 01CD");
//ir.sendProntoContinue(1);
//ir.sendProntoStop(1);
}