Subversion Repositories HomeAutomation

Rev

Rev 2170 | Rev 2188 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
1657 runge 1
 
2
Node_ResetNodeId = null;
3
Node_ResetClientId = null;
4
 
1666 runge 5
Node_ProgramNodeId = null;
6
Node_ProgramClientId = null;
7
 
1669 runge 8
Node_WaitClientId = null;
9
 
2170 arune 10
Node_ResetNodeNativeId = null;
11
Node_ProgramNodeNativeId = null;
2160 arune 12
Node_Native_Reset = false;
13
Node_Native_Program = false;
2162 arune 14
Node_Native_WaitNodeId = false;
2160 arune 15
 
1887 arune 16
Node_HexData = "";
1968 arune 17
Node_HexNumLines = 0;
1887 arune 18
 
1657 runge 19
function Node_OnChange(node_id, available)
20
{
2162 arune 21
//Log("Node_OnChange "+Node_ResetNodeId+" "+Node_ProgramNodeId+" "+node_id+" "+available+"\n");
1657 runge 22
    if (node_id == Node_ResetNodeId && available)
23
    {
2162 arune 24
//Log("ResetNodeId "+Node_Native_Reset+"\n");
1657 runge 25
        Console_LogToClient(Node_ResetClientId, "\033[32m" + Node_ResetNodeId + " started okay.\033[0m\n");
2083 runge 26
 
2160 arune 27
        Console_NewConnection(Node_ResetClientId); // This is a ugly hack for a bad design for multiusers
28
        Node_ResetNodeId = null;
29
        Node_ResetClientId = null;
2170 arune 30
    }
2171 arune 31
    if (node_id == Node_ResetNodeNativeId && available)
2170 arune 32
    {
2160 arune 33
        Node_Native_Reset = true;
2170 arune 34
        Node_ResetNodeNativeId = null;
35
    }
2083 runge 36
 
1666 runge 37
    if (node_id == Node_ProgramNodeId && available)
38
    {
2162 arune 39
//Log("ProgramNodeId "+Node_Native_Program+"\n");
1666 runge 40
        Console_LogToClient(Node_ProgramClientId, "\033[32m" + Node_ProgramNodeId + " started okay.\033[0m\n");
2083 runge 41
 
42
        Console_NewConnection(Node_ProgramClientId); // This is a ugly hack for a bad design for multiusers
1666 runge 43
        Node_ProgramNodeId = null;
44
        Node_ProgramClientId = null;
2170 arune 45
    }
2171 arune 46
    if (node_id == Node_ProgramNodeNativeId && available)
2170 arune 47
    {
48
        Node_ProgramNodeNativeId = null;
2160 arune 49
        Node_Native_Program = true;
1666 runge 50
    }
2083 runge 51
 
1669 runge 52
    if (Node_WaitClientId != null && available)
2083 runge 53
    {
1669 runge 54
        var result = NodeExport_GetNodeInformation(node_id);
2162 arune 55
        Node_Native_WaitNodeId = node_id;
2083 runge 56
 
1669 runge 57
        if (!result)
58
        {
59
            Console_LogToClient(Node_WaitClientId, "\033[31mNo node with id " + node_id + " found.\033[0m\n");
60
            return false;
61
        }
2083 runge 62
 
1669 runge 63
        var date = new Date(result["LastActive"] * 1000);
2083 runge 64
 
1669 runge 65
        Console_LogToClient(Node_WaitClientId, "Id: " + result["Id"] + "\n");
66
        Console_LogToClient(Node_WaitClientId, "Valid: " + result["Valid"] + "\n");
67
        Console_LogToClient(Node_WaitClientId, "Bios Version: " + result["BiosVersion"] + "\n");
68
        Console_LogToClient(Node_WaitClientId, "Device Type: " + result["DeviceType"] + "\n");
69
        Console_LogToClient(Node_WaitClientId, "Has Application: " + result["HasApplication"] + "\n");
70
        Console_LogToClient(Node_WaitClientId, "Last Active: " + date.toString() + "\n");
2083 runge 71
 
72
        Console_NewConnection(Node_WaitClientId); // This is a ugly hack for a bad design for multiusers
1669 runge 73
        Node_WaitClientId = null;
74
    }
1657 runge 75
}
76
 
77
function Node_GetAvailableIds()
78
{
79
    var result_list = [];
80
    var available_nodes = NodeExport_GetAvailableNodes();
2083 runge 81
 
1657 runge 82
    for (var n in available_nodes)
83
    {
84
        var id_parts = available_nodes[n].split(",", 2);
2083 runge 85
 
1657 runge 86
        result_list.push(id_parts[0]);
87
    }
2083 runge 88
 
1657 runge 89
    return result_list;
90
}
91
 
92
function Node_ListAvailable()
93
{
94
    var available_nodes = NodeExport_GetAvailableNodes();
2083 runge 95
 
1660 runge 96
    var lines = [["Id", "Modules"]];
2083 runge 97
 
1657 runge 98
    for (var n in available_nodes)
99
    {
1660 runge 100
        var parts = available_nodes[n].split(",");
101
        var id = parts.shift();
102
        var modules = "<none>";
2083 runge 103
 
1660 runge 104
        if (parts.length > 0)
1657 runge 105
        {
1660 runge 106
            modules = parts.join(", ");
1657 runge 107
        }
2083 runge 108
 
1660 runge 109
        lines.push([id, modules]);
1657 runge 110
    }
2083 runge 111
 
1660 runge 112
    var table_lines = create_table(lines);
2083 runge 113
 
1660 runge 114
    Log("\033[29;1m" + table_lines[0] + "\033[0m\n");
2083 runge 115
 
1660 runge 116
    for (var n = 1; n < table_lines.length; n++)
117
    {
118
        Log(table_lines[n] + "\n");
119
    }
2083 runge 120
 
1657 runge 121
    return true;
122
}
123
Console_RegisterCommand(Node_ListAvailable);
124
 
2162 arune 125
function Node_WaitNodePollNative()
126
{
127
    if (Node_Native_WaitNodeId)
128
    {
129
        var result = NodeExport_GetNodeInformation(Node_Native_WaitNodeId);
130
 
131
        if (!result)
132
        {
133
            return "\033[31mError: No node with id " + Node_Native_WaitNodeId + " found.\033[0m";
134
        }
135
 
136
        var date = new Date(result["LastActive"] * 1000);
137
 
138
        return "Id: " + result["Id"] + "\t"+
139
        "Valid: " + result["Valid"] + "\t"+
140
        "Bios Version: " + result["BiosVersion"] + "\t"+
141
        "Device Type: " + result["DeviceType"] + "\t"+
142
        "Has Application: " + result["HasApplication"] + "\t"+
143
        "Last Active: " + date.toString();
144
    }
145
    else
146
    {
147
        return false;
148
    }
149
}
150
 
151
function Node_WaitForInformationNative()
152
{
153
    Node_WaitClientId = Console_GetClientId();
154
    Node_Native_WaitNodeId = false;
155
}
156
 
2160 arune 157
function Node_ResetPollNative()
158
{
159
    return Node_Native_Reset;
160
}
161
 
162
function Node_ResetNative(node_id)
163
{
164
    if (arguments.length < 1)
165
    {
166
        return "\033[31mError: Not enough parameters given.\033[0m";
167
    }
168
 
169
    Node_Native_Reset = false;
170
    if (!NodeExport_ResetNode(node_id))
171
    {
172
        return "\033[31mError: Failed to send reset, this can happen if node only contains bios and it was connected before atom was started/restarted.\033[0m";
173
    }
174
 
2170 arune 175
    Node_ResetNodeNativeId = node_id;
2160 arune 176
 
177
    return "Reset command sent successfully";
178
}
179
 
1657 runge 180
function Node_Reset(node_id)
181
{
182
    if (arguments.length < 1)
183
    {
184
        Log("\033[31mNot enough parameters given.\033[0m\n");
185
        return false;
186
    }
2083 runge 187
 
1665 runge 188
    Log("Sending reset to " + node_id + "...\n");
2083 runge 189
 
1657 runge 190
    if (!NodeExport_ResetNode(node_id))
191
    {
2160 arune 192
        Log("\033[31mFailed to send reset, this can happen if node only contains bios and it was connected before atom was started/restarted.\033[0m\n");
1657 runge 193
        return false;
194
    }
2083 runge 195
 
2160 arune 196
    Node_ResetClientId = Console_GetClientId();
197
    Node_ResetNodeId = node_id;
1657 runge 198
    Console_PreventDefaultPrompt();
199
 
200
    return true;
201
}
202
Console_RegisterCommand(Node_Reset, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Node_GetAvailableIds()); });
1665 runge 203
 
2160 arune 204
function Node_ProgramPollNative()
205
{
206
    return Node_Native_Program;
207
}
208
 
209
function Node_AppendHexNative(hexrow)
210
{
211
    if (arguments.length < 1)
212
    {
213
        return "\033[31mError: Not enough parameters given.\033[0m";
214
    }
215
 
216
    Node_HexData = Node_HexData + hexrow + "\n";
217
    Node_HexNumLines += 1;
218
 
219
    return true;
220
}
221
 
2164 arune 222
function Node_GetProgramProgress(node_id)
223
{
224
    if (arguments.length < 1)
225
    {
226
        return "\033[31mError: Not enough parameters given.\033[0m";
227
    }
228
 
229
    //if (!NodeExport_ProgramNodeHex(node_id, bios > 0, Node_HexData))
230
    //{
231
    //    return "\033[31mError: Failed to start programming, this can happen if node only contains bios and it was connected before atom was started/restarted.\033[0m";
232
    //}
233
 
234
    return NodeExport_GetProgramProgress(node_id);
235
}
236
 
2160 arune 237
function Node_ProgramNative(node_id, bios, hexnumlines)
238
{
239
    if (arguments.length < 3)
240
    {
241
        return "\033[31mError: Not enough parameters given.\033[0m";
242
    }
243
    if (Node_HexNumLines != hexnumlines)
244
    {
245
        return "\033[31mError: Number of hex lines does not match received (" + Node_HexNumLines + " received, should be " + hexnumlines + ").\033[0m";
246
    }
247
 
248
    Node_Native_Program = false;
249
    if (!NodeExport_ProgramNodeHex(node_id, bios > 0, Node_HexData))
250
    {
251
        return "\033[31mError: Failed to start programming, this can happen if node only contains bios and it was connected before atom was started/restarted.\033[0m";
252
    }
253
 
2170 arune 254
    Node_ProgramNodeNativeId = node_id;
2160 arune 255
    Node_HexData = "";
256
    Node_HexNumLines = 0;
257
 
258
    return "Program command sent successfully";
259
}
260
 
1666 runge 261
function Node_Program(node_id, bios, filename)
262
{
263
    if (arguments.length < 3)
264
    {
265
        Log("\033[31mNot enough parameters given.\033[0m\n");
266
        return false;
267
    }
2083 runge 268
 
1666 runge 269
    Log("Initiating programming of " + node_id + "...\n");
2083 runge 270
 
1666 runge 271
    if (!NodeExport_ProgramNode(node_id, bios > 0, filename))
272
    {
2160 arune 273
        Log("\033[31mFailed to start programming, this can happen if node only contains bios and it was connected before atom was started/restarted.\033[0m\n");
1666 runge 274
        return false;
275
    }
2083 runge 276
 
2160 arune 277
    Node_ProgramClientId = Console_GetClientId();
278
    Node_ProgramNodeId = node_id;
1666 runge 279
    Console_PreventDefaultPrompt();
2083 runge 280
 
1666 runge 281
    return true;
282
}
283
Console_RegisterCommand(Node_Program, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Node_GetAvailableIds(), [0, 1]); });
284
 
1968 arune 285
function Node_ProgramHex(node_id, bios, hexnumlines)
1887 arune 286
{
287
    if (arguments.length < 2)
288
    {
289
        Log("\033[31mNot enough parameters given.\033[0m\n");
290
        return false;
291
    }
1968 arune 292
    if (Node_HexNumLines != hexnumlines)
293
    {
294
        Log("\033[31mNumber of hex lines does not match received (" + Node_HexNumLines + " received, should be " + hexnumlines + ").\033[0m\n");
295
        return false;
296
    }
2083 runge 297
 
1887 arune 298
    Log("Initiating programming of " + node_id + "...\n");
2083 runge 299
 
1887 arune 300
    if (!NodeExport_ProgramNodeHex(node_id, bios > 0, Node_HexData))
301
    {
2160 arune 302
        Log("\033[31mFailed to start programming, this can happen if node only contains bios and it was connected before atom was started/restarted.\033[0m\n");
1887 arune 303
        return false;
304
    }
2083 runge 305
 
2160 arune 306
    Node_ProgramClientId = Console_GetClientId();
307
    Node_ProgramNodeId = node_id;
1887 arune 308
    Console_PreventDefaultPrompt();
309
 
310
    Node_HexData = "";
1968 arune 311
    Node_HexNumLines = 0;
1887 arune 312
 
1968 arune 313
 
1887 arune 314
    return true;
315
}
316
Console_RegisterCommand(Node_ProgramHex, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Node_GetAvailableIds(), [0, 1]); });
317
 
318
function Node_ClearHex()
319
{
1889 arune 320
//    Log("Clearing hexdata...\n");
2083 runge 321
 
1887 arune 322
    Node_HexData = "";
1968 arune 323
    Node_HexNumLines = 0;
1889 arune 324
 
1887 arune 325
    return true;
326
}
327
Console_RegisterCommand(Node_ClearHex);
328
 
329
function Node_AppendHex(hexrow)
330
{
331
    if (arguments.length < 1)
332
    {
333
        Log("\033[31mNot enough parameters given.\033[0m\n");
334
        return false;
335
    }
2083 runge 336
 
1889 arune 337
//    Log("Appending hexrow...\n");
2083 runge 338
 
1887 arune 339
    Node_HexData = Node_HexData + hexrow + "\n";
1968 arune 340
    Node_HexNumLines += 1;
1889 arune 341
 
1887 arune 342
    return true;
343
}
344
Console_RegisterCommand(Node_AppendHex);
345
 
1665 runge 346
function Node_GetInformation(node_id)
347
{
348
    if (arguments.length < 1)
349
    {
350
        Log("\033[31mNot enough parameters given.\033[0m\n");
351
        return false;
352
    }
2083 runge 353
 
1665 runge 354
    var result = NodeExport_GetNodeInformation(node_id);
2083 runge 355
 
1665 runge 356
    if (!result)
357
    {
358
        Log("\033[31mNo node with id " + node_id + " found.\033[0m\n");
359
        return false;
360
    }
2083 runge 361
 
1665 runge 362
    var date = new Date(result["LastActive"] * 1000);
2083 runge 363
 
1673 runge 364
    Log("\033[96mId: \033[0;1m" + result["Id"] + "\033[0m\n");
365
    Log("\033[96mValid: \033[0;1m" + result["Valid"] + "\033[0m\n");
366
    Log("\033[96mBios Version: \033[0;1m" + result["BiosVersion"] + "\033[0m\n");
367
    Log("\033[96mDevice Type: \033[0;1m" + result["DeviceType"] + "\033[0m\n");
368
    Log("\033[96mHas Application: \033[0;1m" + result["HasApplication"] + "\033[0m\n");
369
    Log("\033[96mLast Active: \033[0;1m" + date.toString() + "\033[0m\n");
2083 runge 370
 
1665 runge 371
    return true;
372
}
373
Console_RegisterCommand(Node_GetInformation, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Node_GetAvailableIds()); });
1669 runge 374
 
375
function Node_WaitForInformation()
376
{
377
    Node_WaitClientId = Console_GetClientId();
378
    Console_PreventDefaultPrompt();
2083 runge 379
 
1669 runge 380
    return true;
381
}
382
Console_RegisterCommand(Node_WaitForInformation);