Subversion Repositories HomeAutomation

Rev

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

Rev Author Line No. Line
1489 arune 1
 
1830 myhrman 2
 
1489 arune 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
 
1492 arune 24
irTransceive.prototype.sendClick = function(channel, remoteName, buttonName, time)
1489 arune 25
{
1492 arune 26
    this.sendButton(channel, remoteName, buttonName, true);
1489 arune 27
 
28
    if (time)
29
    {
30
        sleep(time);
31
    }
32
    else
33
    {
34
        sleep(50000);
35
    }
36
 
1492 arune 37
    this.sendButton(channel, remoteName, buttonName, false);
1489 arune 38
}
39
 
1492 arune 40
irTransceive.prototype.sendButton = function(channel, remoteName, buttonName, down)
1489 arune 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
                    {
1492 arune 54
                        this.sendData(channel, remotesStore['remotes'][n]['protocol'], code, down ? "Pressed" : "Released");
1489 arune 55
                        return;
56
                    }
57
                }
58
            }
59
        }
60
    }
61
}
62
 
1492 arune 63
irTransceive.prototype.sendData = function(channel, protocol, data, status)
1489 arune 64
{
65
    var canMessage = new CanMessage("sns", "To_Owner", this.myName, this.myId, "IR");
1492 arune 66
    canMessage.setData("Channel", channel);
1489 arune 67
    canMessage.setData("Status", status);
68
    canMessage.setData("Protocol", protocol);
69
    canMessage.setData("IRdata", data);
70
    sendMessage(canMessage);
71
}
1729 arune 72
 
1817 arune 73
irTransceive.prototype.sendConfig = function(channel, direction, power, modfreq)
1729 arune 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);
1839 myhrman 79
    canMessage2.setData("Modulation divider", modfreq);
1729 arune 80
    sendMessage(canMessage2);
81
}
82
 
1844 myhrman 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
1847 myhrman 94
irTransceive.prototype.sendProntoHex = function(channel, repeatCount, prontoHexString)
1844 myhrman 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]);
1847 myhrman 162
    msg.setData("Repeat", repeatCount);
1844 myhrman 163
    sendMessage(msg);
164
    sleep(10);
165
}
166
 
1852 myhrman 167
irTransceive.prototype.sendProntoStop = function(channel)
1844 myhrman 168
{
1852 myhrman 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
 
1859 myhrman 181
function prontoStart(repeats)
1852 myhrman 182
{
1844 myhrman 183
    var ir = ServiceManager.getService("Can","irTransceive",1);
1859 myhrman 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");
1844 myhrman 185
}
1859 myhrman 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
}