Subversion Repositories HomeAutomation

Rev

Rev 1852 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2.  
  3. function irTransceive(type, name, id)
  4. {
  5.     this.CanService(type, name, id);
  6. }
  7.  
  8. extend(irTransceive, CanService);
  9.  
  10. irTransceive.prototype.canMessageHandler = function(canMessage)
  11. {
  12.     /*if (canMessage.getDirectionFlag() == "From_Owner")
  13.     {
  14.         switch (canMessage.getCommandName())
  15.         {
  16.         case "IR":
  17.         break;
  18.         }
  19.     }*/
  20.    
  21.     this.CanService.prototype.canMessageHandler.call(this, canMessage);
  22. }
  23.  
  24. irTransceive.prototype.sendClick = function(channel, remoteName, buttonName, time)
  25. {
  26.     this.sendButton(channel, remoteName, buttonName, true);
  27.    
  28.     if (time)
  29.     {
  30.         sleep(time);
  31.     }
  32.     else
  33.     {
  34.         sleep(50000);
  35.     }
  36.    
  37.     this.sendButton(channel, remoteName, buttonName, false);
  38. }
  39.  
  40. irTransceive.prototype.sendButton = function(channel, remoteName, buttonName, down)
  41. {
  42.     var remotesStore = DataStore.getStore("IRRemotes");
  43.    
  44.     if (remotesStore)
  45.     {
  46.         for (var n = 0; n < remotesStore['remotes'].length; n++)
  47.         {
  48.             if (remotesStore['remotes'][n]['name'] == remoteName)
  49.             {
  50.                 for (var code in remotesStore['remotes'][n]['codes'])
  51.                 {
  52.                     if (remotesStore['remotes'][n]['codes'][code] == buttonName)
  53.                     {
  54.                         this.sendData(channel, remotesStore['remotes'][n]['protocol'], code, down ? "Pressed" : "Released");
  55.                         return;
  56.                     }
  57.                 }
  58.             }
  59.         }
  60.     }
  61. }
  62.  
  63. irTransceive.prototype.sendData = function(channel, protocol, data, status)
  64. {
  65.     var canMessage = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IR");
  66.     canMessage.setData("Channel", channel);
  67.     canMessage.setData("Status", status);
  68.     canMessage.setData("Protocol", protocol);
  69.     canMessage.setData("IRdata", data);
  70.     sendMessage(canMessage);
  71. }
  72.  
  73. irTransceive.prototype.sendConfig = function(channel, direction, power, modfreq)
  74. {
  75.     var canMessage2 = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrConfig");
  76.     canMessage2.setData("Channel", channel);
  77.     canMessage2.setData("Direction", direction);
  78.     canMessage2.setData("Transmit power", power);
  79.     canMessage2.setData("Modulation divider", modfreq);
  80.     sendMessage(canMessage2);
  81. }
  82.  
  83. function hexString2NumberArray(hexString)
  84. {
  85.     var tokens = hexString.split(' ');
  86.     var numbers = new Array();
  87.     for (var i=0; i<tokens.length; i++) {
  88.         numbers[i] = parseInt(tokens[i], 16)
  89.     }
  90.     return numbers;
  91. }
  92.  
  93. // prontoHexString is a space-separated hex string, including both the pronto header and the data
  94. irTransceive.prototype.sendProntoHex = function(channel, repeatCount, prontoHexString)
  95. {
  96.     var prontoNumbers = hexString2NumberArray(prontoHexString);
  97.    
  98.     // header
  99.     var format = prontoNumbers[0];
  100.     var frqDiv = prontoNumbers[1];
  101.     var onceSeqLen = prontoNumbers[2];
  102.     var repSeqLen = prontoNumbers[3];
  103.    
  104.     print("Sending START. CH=" + channel + ", fmt=" + format + ", wFrqDiv=" + frqDiv + ", onceLen=" + onceSeqLen + ", repLen=" + repSeqLen + "\n");
  105.     var msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoStart");
  106.     msg.setData("Channel", channel);
  107.     msg.setData("Format", format);
  108.     msg.setData("wFrqDiv", frqDiv);
  109.     msg.setData("OnceSeqLen", onceSeqLen);
  110.     msg.setData("RepSeqLen",  repSeqLen);
  111.     sendMessage(msg);
  112.     sleep(10);
  113.    
  114.     // data
  115.     var nrBytes = 0;
  116.     var bytes = new Array();
  117.     var seqNr = 0;
  118.     for (var i=4; i<prontoNumbers.length; i++) {
  119.         // 8bit value?
  120.         if (prontoNumbers[i] <= 255) {
  121.             // compress into single byte
  122.             bytes[nrBytes] = prontoNumbers[i];
  123.             nrBytes++;
  124.         }
  125.         // 16bit value?
  126.         else {
  127.             // occupy 3 bytes to describe this value
  128.             bytes[nrBytes] = (prontoNumbers[i] & 0xFF00) >> 8;
  129.             bytes[nrBytes+1] = 0x00;
  130.             bytes[nrBytes+2] = (prontoNumbers[i] & 0x00FF) >> 0;
  131.             nrBytes += 3;
  132.         }
  133.         // time to send?
  134.         if (nrBytes >= 8) {
  135.             print("Sending DATA. " + nrBytes + " bytes: " + bytes + " (SEQ NR:" + (seqNr+1) + ")\n");
  136.             msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoData" + (seqNr+1));
  137.             msg.setData("Act1", bytes[0]);
  138.             msg.setData("Pas1", bytes[1]);
  139.             msg.setData("Act2", bytes[2]);
  140.             msg.setData("Pas2", bytes[3]);
  141.             msg.setData("Act3", bytes[4]);
  142.             msg.setData("Pas3", bytes[5]);
  143.             msg.setData("Act4", bytes[6]);
  144.             msg.setData("Pas4", bytes[7]);
  145.             sendMessage(msg);
  146.             sleep(10);
  147.            
  148.             bytes = new Array();
  149.             nrBytes = 0;
  150.             seqNr = (seqNr + 1) % 16;
  151.         }
  152.     }
  153.    
  154.     print("Sending END. " + nrBytes + " bytes: " + bytes + " (SEQ NR:" + (seqNr+1) + ")\n");
  155.     msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoEnd" + (seqNr+1));
  156.     if (nrBytes > 1) msg.setData("Act1", bytes[0]);
  157.     if (nrBytes > 2) msg.setData("Pas1", bytes[1]);
  158.     if (nrBytes > 3) msg.setData("Act2", bytes[2]);
  159.     if (nrBytes > 4) msg.setData("Pas2", bytes[3]);
  160.     if (nrBytes > 5) msg.setData("Act3", bytes[4]);
  161.     if (nrBytes > 6) msg.setData("Pas3", bytes[5]);
  162.     msg.setData("Repeat", repeatCount);
  163.     sendMessage(msg);
  164.     sleep(10);
  165. }
  166.  
  167. irTransceive.prototype.sendProntoStop = function(channel)
  168. {
  169.     var msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoStop");
  170.     msg.setData("Channel", channel);
  171.     sendMessage(msg);
  172. }
  173.  
  174. irTransceive.prototype.sendProntoContinue = function(channel)
  175. {
  176.     var msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoContinue");
  177.     msg.setData("Channel", channel);
  178.     sendMessage(msg);
  179. }
  180.  
  181. function prontoStart(repeats)
  182. {
  183.     var ir = ServiceManager.getService("Can","irTransceive",1);
  184.     ir.sendProntoHex(1, repeats, "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");
  185. }
  186.  
  187. function prontoStop()
  188. {
  189.     var ir = ServiceManager.getService("Can","irTransceive",1);
  190.     ir.sendProntoStop(1);
  191. }
  192.  
  193. function prontoContinue()
  194. {
  195.     var ir = ServiceManager.getService("Can","irTransceive",1);
  196.     ir.sendProntoContinue(1);
  197. }
  198.