Subversion Repositories HomeAutomation

Rev

Rev 1839 | Rev 1852 | Go to most recent revision | 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. irTransceive.prototype.sendProntoTest = function(channel)
  84. {
  85.     // pronto start
  86.     var msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoStart");
  87.     msg.setData("Channel", channel);
  88.     msg.setData("Format", 0);
  89.     msg.setData("wFrqDiv", 109); // 4.145146MHz / 38kHz
  90.     msg.setData("OnceSeqLen", 7);
  91.     msg.setData("RepSeqLen", 0);
  92.     sendMessage(msg);
  93.     sleep(10);
  94.    
  95.     // pronto data
  96.     msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoData1");
  97.     msg.setData("Act1", 150); // 3.9
  98.     msg.setData("Pas1", 45); // 1.2
  99.     msg.setData("Act2", 40); // 1.2
  100.     msg.setData("Pas2", 65); // 1.7
  101.     msg.setData("Act3", 37); // 0.98
  102.     msg.setData("Pas3", 26); // 0.7
  103.     msg.setData("Act4", 40); // 1.05
  104.     msg.setData("Pas4", 62); // 1.6
  105.     sendMessage(msg);
  106.     sleep(10);
  107.    
  108.     // pronto data/end
  109.     msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoEnd2");
  110.     msg.setData("Act1", 93); // 2.4
  111.     msg.setData("Pas1", 40); // 1.1
  112.     msg.setData("Act2", 40); // 1.1
  113.     msg.setData("Pas2", 80); // 2.1
  114.     msg.setData("Act3", 80); // 2.1
  115.     msg.setData("Pas3", 83);
  116.     msg.setData("Repeat", 0);
  117.     sendMessage(msg);
  118.     sleep(10);
  119. }
  120.  
  121. function hexString2NumberArray(hexString)
  122. {
  123.     var tokens = hexString.split(' ');
  124.     var numbers = new Array();
  125.     for (var i=0; i<tokens.length; i++) {
  126.         numbers[i] = parseInt(tokens[i], 16)
  127.     }
  128.     return numbers;
  129. }
  130.  
  131. // prontoHexString is a space-separated hex string, including both the pronto header and the data
  132. irTransceive.prototype.sendProntoHex = function(channel, prontoHexString)
  133. {
  134.     var prontoNumbers = hexString2NumberArray(prontoHexString);
  135.    
  136.     // header
  137.     var format = prontoNumbers[0];
  138.     var frqDiv = prontoNumbers[1];
  139.     var onceSeqLen = prontoNumbers[2];
  140.     var repSeqLen = prontoNumbers[3];
  141.    
  142.     print("Sending START. CH=" + channel + ", fmt=" + format + ", wFrqDiv=" + frqDiv + ", onceLen=" + onceSeqLen + ", repLen=" + repSeqLen + "\n");
  143.     var msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoStart");
  144.     msg.setData("Channel", channel);
  145.     msg.setData("Format", format);
  146.     msg.setData("wFrqDiv", frqDiv);
  147.     msg.setData("OnceSeqLen", onceSeqLen);
  148.     msg.setData("RepSeqLen",  repSeqLen);
  149.     sendMessage(msg);
  150.     sleep(10);
  151.    
  152.     // data
  153.     var nrBytes = 0;
  154.     var bytes = new Array();
  155.     var seqNr = 0;
  156.     for (var i=4; i<prontoNumbers.length; i++) {
  157.         // 8bit value?
  158.         if (prontoNumbers[i] <= 255) {
  159.             // compress into single byte
  160.             bytes[nrBytes] = prontoNumbers[i];
  161.             nrBytes++;
  162.         }
  163.         // 16bit value?
  164.         else {
  165.             // occupy 3 bytes to describe this value
  166.             bytes[nrBytes] = (prontoNumbers[i] & 0xFF00) >> 8;
  167.             bytes[nrBytes+1] = 0x00;
  168.             bytes[nrBytes+2] = (prontoNumbers[i] & 0x00FF) >> 0;
  169.             nrBytes += 3;
  170.         }
  171.         // time to send?
  172.         if (nrBytes >= 8) {
  173.             print("Sending DATA. " + nrBytes + " bytes: " + bytes + " (SEQ NR:" + (seqNr+1) + ")\n");
  174.             msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoData" + (seqNr+1));
  175.             msg.setData("Act1", bytes[0]);
  176.             msg.setData("Pas1", bytes[1]);
  177.             msg.setData("Act2", bytes[2]);
  178.             msg.setData("Pas2", bytes[3]);
  179.             msg.setData("Act3", bytes[4]);
  180.             msg.setData("Pas3", bytes[5]);
  181.             msg.setData("Act4", bytes[6]);
  182.             msg.setData("Pas4", bytes[7]);
  183.             sendMessage(msg);
  184.             sleep(10);
  185.            
  186.             bytes = new Array();
  187.             nrBytes = 0;
  188.             seqNr = (seqNr + 1) % 16;
  189.         }
  190.     }
  191.    
  192.     print("Sending END. " + nrBytes + " bytes: " + bytes + " (SEQ NR:" + (seqNr+1) + ")\n");
  193.     msg = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IrProntoEnd" + (seqNr+1));
  194.     if (nrBytes > 1) msg.setData("Act1", bytes[0]);
  195.     if (nrBytes > 2) msg.setData("Pas1", bytes[1]);
  196.     if (nrBytes > 3) msg.setData("Act2", bytes[2]);
  197.     if (nrBytes > 4) msg.setData("Pas2", bytes[3]);
  198.     if (nrBytes > 5) msg.setData("Act3", bytes[4]);
  199.     if (nrBytes > 6) msg.setData("Pas3", bytes[5]);
  200.     msg.setData("Repeat", 0x00);
  201.     sendMessage(msg);
  202.     sleep(10);
  203. }
  204.  
  205. function sendProntoTest()
  206. {
  207.     var ir = ServiceManager.getService("Can","irTransceive",1);
  208.     ir.sendProntoHex(1, "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");
  209. }
  210.