Subversion Repositories HomeAutomation

Rev

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

Rev Author Line No. Line
969 runge 1
 
986 runge 2
CanNodes = new Array();
969 runge 3
CanServices = new Array();
972 runge 4
CanOfflineTimer = new Interval(offlineCheck, 10000);
1008 runge 5
CanProgrammingNode = null;
969 runge 6
 
986 runge 7
function handleNMTMessage(className, commandName, data)
8
{
997 runge 9
    var canMessage = new CanNMTMessage(className, commandName, data);
986 runge 10
 
11
    switch (canMessage.getCommandName())
12
    {
13
    case "Reset":
1008 runge 14
    // Someone sent a reset command... should we do something?
986 runge 15
    break;
16
 
17
    case "Bios_Start":
1008 runge 18
    var node = CanNodes[canMessage.getData("HardwareId")];
19
 
20
    if (!node)
21
    {
22
        log("A can node with hardware id " + uint2hex(canMessage.getData("HardwareId"), 32) + " was not found, starting.\n");
23
        node = new CanNode(canMessage.getData("HardwareId"), null);
24
        CanNodes[canMessage.getData("HardwareId")] = node;
25
    }
26
 
27
    node.handleBiosStart(canMessage.getData("BiosVersion"), canMessage.getData("HasApplication"));
986 runge 28
    break;
29
 
30
    case "Pgm_Start":
1008 runge 31
    // Someone sent a programming start command... should we do something?
986 runge 32
    break;
33
 
34
    case "Pgm_Data":
1008 runge 35
    // Someone sent a programming data command... should we do something?
986 runge 36
    break;
37
 
38
    case "Pgm_End":
1008 runge 39
    // Someone sent a programming end command... should we do something?
986 runge 40
    break;
41
 
42
    case "Pgm_Copy":
1008 runge 43
    // Someone sent a programming copy command... should we do something?
986 runge 44
    break;
45
 
46
    case "Pgm_Ack":
1008 runge 47
    if (CanProgrammingNode)
48
    {
49
        CanProgrammingNode.handleAck(canMessage.getData("Data"));
50
    }
51
    //else
52
    //{
53
        // A node sent pgm ack but we are not in the progress of programming, probably to someone else
54
    //}
986 runge 55
    break;
56
 
57
    case "Pgm_Nack":
1020 arune 58
    if (CanProgrammingNode)
59
    {
60
        CanProgrammingNode.handleNack(canMessage.getData("Data"));
61
    }
1008 runge 62
    // I do not now what this is for...
986 runge 63
    break;
64
 
65
    case "Start_App":
1008 runge 66
    // Someone sent a app start command... should we do something?
986 runge 67
    break;
68
 
69
    case "App_Start":
1008 runge 70
    var node = CanNodes[canMessage.getData("HardwareId")];
71
 
72
    if (!node)
73
    {
74
        log("A can node with hardware id " + uint2hex(canMessage.getData("HardwareId"), 32) + " was not found, starting.\n");
75
        node = new CanNode(canMessage.getData("HardwareId"), null);
76
        CanNodes[canMessage.getData("HardwareId")] = node;
77
    }
78
 
79
    node.handleHeartbeat();
986 runge 80
    break;
81
 
82
    case "Heartbeat":
83
    var node = CanNodes[canMessage.getData("HardwareId")];
84
 
85
    if (!node)
86
    {
87
        log("A can node with hardware id " + uint2hex(canMessage.getData("HardwareId"), 32) + " was not found, starting.\n");
88
        node = new CanNode(canMessage.getData("HardwareId"), canMessage.getData("NumberOfModules"));
89
        CanNodes[canMessage.getData("HardwareId")] = node;
90
    }
91
 
92
    node.handleHeartbeat(canMessage.getData("NumberOfModules"));
93
    break;
94
    }
95
}
96
 
97
// This is used to send messages to the can network
98
function sendNMTMessage(canMessage)
99
{
100
    sendCanNMTMessage(  canMessage.getClassName(),
101
                canMessage.getCommandName(),
102
                canMessage.getDataString());
103
}
104
 
969 runge 105
// This is called when a message has been received from the can network
106
function handleMessage(className, directionFlag, moduleName, moduleId, commandName, data)
107
{
997 runge 108
    var canMessage = new CanMessage(className, directionFlag, moduleName, moduleId, commandName, data);
109
 
969 runge 110
    var fullId = canMessage.getModuleName() + canMessage.getModuleId();
111
 
112
    if (canMessage.getCommandName() == "List" && canMessage.getDirectionFlag() == "From_Owner")
113
    {
114
        if (!CanServices[fullId])
115
        {
116
            var service = ServiceManager.getService("Can", canMessage.getModuleName(), canMessage.getModuleId())
117
 
118
            if (service != null)
119
            {
986 runge 120
                var node = CanNodes[canMessage.getData("HardwareId")];
997 runge 121
 
986 runge 122
                if (node)
123
                {
124
                    service.setNode(node);
125
                    node.addService(canMessage.getData("SequenceNumber"), service);
126
                    CanNodes[canMessage.getData("HardwareId")] = node;
127
                }
997 runge 128
 
969 runge 129
                CanServices[fullId] = service;
130
            }
131
            else
132
            {
133
                log("No such service found: " + canMessage.getModuleName() + "\n");
134
            }
135
        }
136
    }
137
    else
138
    {
139
        if (CanServices[fullId])
140
        {
141
            // Tell the service to handle the message, a module service must implement canMessageHandler or derive from CanService-class
142
            CanServices[fullId].canMessageHandler(canMessage);
143
        }
144
        else if (canMessage.getModuleName() == "Debug")
145
        {
146
            var service = ServiceManager.getService("Can", canMessage.getModuleName(), canMessage.getModuleId())
147
            if (service != null)
148
            {
149
                CanServices[fullId] = service;
150
                CanServices[fullId].canMessageHandler(canMessage);
151
            }
152
        }
153
    }
154
}
155
 
156
// This is used to send messages to the can network
157
function sendMessage(canMessage)
158
{
159
    sendCanMessage( canMessage.getClassName(),
160
            canMessage.getDirectionFlag(),
161
            canMessage.getModuleName(),
162
            canMessage.getModuleId(),
163
            canMessage.getCommandName(),
164
            canMessage.getDataString());
165
}
166
 
167
// This will be called at reqular intervals
168
function offlineCheck()
169
{
986 runge 170
    for (var n in CanNodes)
969 runge 171
    {
986 runge 172
        CanNodes[n].checkOffline();
969 runge 173
    }
174
}
175
 
974 runge 176
function setAllOffline()
177
{
986 runge 178
    for (var n in CanNodes)
974 runge 179
    {
986 runge 180
        CanNodes[n].setOffline();
974 runge 181
    }
182
}