Subversion Repositories HomeAutomation

Rev

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