Subversion Repositories HomeAutomation

Rev

Rev 1063 | Rev 1377 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1063 Rev 1066
Line 146... Line 146...
146
        this.reset();
146
        this.reset();
147
        break;
147
        break;
148
    case "COPY":
148
    case "COPY":
149
        //this will never occur, bios does not send ack for copy command, it just moves data in flash then reset itself
149
        //this will never occur, bios does not send ack for copy command, it just moves data in flash then reset itself
150
        this.myProgrammingCallback(true, "ERROR", "Unexpected error 100", false);
150
        this.myProgrammingCallback(true, "ERROR", "Unexpected error 100", false);
-
 
151
        break;
-
 
152
    case "DONE":
-
 
153
        this.stopProgramming(true, "Timeout while waiting for node to start bios");
-
 
154
        this.reset();
151
        break;
155
        break;
152
    default:
156
    default:
153
        this.myProgrammingCallback(true, "ERROR", "Unexpected error 101, state: " + this.myProgrammingState, false);
157
        this.myProgrammingCallback(true, "ERROR", "Unexpected error 101, state: " + this.myProgrammingState, false);
154
        break;
158
        break;
155
    }
159
    }
156
}
160
}
157
 
161
 
158
CanNode.prototype.programmingResend = function()
162
CanNode.prototype.programmingResend = function()
159
{
163
{
160
this.myProgrammingCallback(true, "", "Resend timeout, a packet was lost, either program data or ack", false);
164
this.myProgrammingCallback(true, "", "Resend timeout, a packet was lost, either program data or ack", false);
161
    this.myProgrammingResend.reset();
165
    this.myProgrammingResend.reset();
162
    //if we did not got ack then try to resend the data
166
    //if we did not got ack then try to resend the data
163
    this.myProgrammingLastPacket.send();
167
    this.myProgrammingLastPacket.send();
164
}
168
}
165
 
169
 
166
CanNode.prototype.handleBiosStart = function(biosVersion, hasApplication)
170
CanNode.prototype.handleBiosStart = function(biosVersion, hasApplication)
167
{
171
{
168
    if (this.myResetCallback)
172
    if (this.myResetCallback)
169
    {
173
    {
170
        this.myResetCallback(true);
174
        this.myResetCallback(true);
Line 173... Line 177...
173
   
177
   
174
    if (this.myResetTimer)
178
    if (this.myResetTimer)
175
    {
179
    {
176
        this.myResetTimer.stop();
180
        this.myResetTimer.stop();
177
        this.myResetTimer = null;
181
        this.myResetTimer = null;
178
    }
182
    }
179
 
183
 
180
//print("node was reset and bios just started, ver:" + biosVersion);
184
//print("node was reset and bios just started, ver:" + biosVersion);
181
    if (this.myProgramming)
185
    if (this.myProgramming)
182
    {
186
    {
183
        switch (this.myProgrammingState)
187
        switch (this.myProgrammingState)
184
        {
188
        {
Line 195... Line 199...
195
            canMessage.send();
199
            canMessage.send();
196
            this.myProgrammingState = "DATA";
200
            this.myProgrammingState = "DATA";
197
       
201
       
198
            var self = this;
202
            var self = this;
199
            this.myProgrammingTimeout.setTimeout(1000);
203
            this.myProgrammingTimeout.setTimeout(1000);
200
       
204
       
201
            this.myProgrammingResend = new Interval(function() { self.programmingResend() }, 1100);
205
            this.myProgrammingResend = new Interval(function() { self.programmingResend() }, 1100);
202
            this.myProgrammingResend.start();
206
            this.myProgrammingResend.start();
203
 
207
 
204
            var date = new Date();
208
            var date = new Date();
205
            this.myProgrammingTimeStarted = date.getTime();
209
            this.myProgrammingTimeStarted = date.getTime();
206
 
210
 
207
            this.myProgrammingCallback(true, "START", "Started programming of node", false);
211
            this.myProgrammingCallback(true, "START", "Started programming of node", false);
208
            this.myProgrammingCallback(true, "", "  0% [", true);
212
            this.myProgrammingCallback(true, "", "  0% [", true);
209
            break;
213
            break;
210
        case "COPY":
214
        case "COPY":
211
            //bios was moved and now started (so it seems like it was successfully programmed and moved)
215
            //bios was moved and now started (so it seems like it was successfully programmed and moved)
Line 217... Line 221...
217
            canMessage.setData("Address1", 0);
221
            canMessage.setData("Address1", 0);
218
            canMessage.setData("Address3", 0);
222
            canMessage.setData("Address3", 0);
219
            canMessage.setData("Address4", 0);
223
            canMessage.setData("Address4", 0);
220
            canMessage.send();
224
            canMessage.send();
221
            this.myProgrammingState = "APPCLEANDATA";
225
            this.myProgrammingState = "APPCLEANDATA";
222
            break;
226
            break;
223
        case "DONE":
227
        case "DONE":
224
            this.stopProgramming(true, "Done, successful");
228
            this.stopProgramming(true, "Done, successful");
225
            break;
229
            break;
226
        default:
230
        default:
227
            this.myProgrammingCallback(true, "ERROR", "Unexpected error 105, state: " + this.myProgrammingState, false);
231
            this.myProgrammingCallback(true, "ERROR", "Unexpected error 105, state: " + this.myProgrammingState, false);
228
            break;
232
            break;
229
        }
233
        }
230
   
234
   
231
    }
235
    }
232
}
236
}
233
 
237
 
234
CanNode.prototype.handleNack = function(data)
238
CanNode.prototype.handleNack = function(data)
235
{
239
{
236
    this.stopProgramming(true, "Failed, got NACK, sending reset");
240
    this.stopProgramming(true, "Failed, got NACK, sending reset");
237
    this.reset();
241
    this.reset();
238
    if (false) 
242
    if (false) 
Line 336... Line 340...
336
            this.myProgrammingWantAck = ((this.myProgrammingHex.getCRC16()<<8)|(this.myProgrammingHex.getCRC16()>>8))&0xffff;
340
            this.myProgrammingWantAck = ((this.myProgrammingHex.getCRC16()<<8)|(this.myProgrammingHex.getCRC16()>>8))&0xffff;
337
           
341
           
338
            var timeElapsed = 0;
342
            var timeElapsed = 0;
339
            var printTime = "";
343
            var printTime = "";
340
            if (this.myProgrammingTimeStarted>0)
344
            if (this.myProgrammingTimeStarted>0)
341
            {
345
            {
342
                var date = new Date();
346
                var date = new Date();
343
                timeElapsed = date.getTime() - this.myProgrammingTimeStarted;
347
                timeElapsed = date.getTime() - this.myProgrammingTimeStarted;
344
                printTime = " in " + Math.round(timeElapsed/1000) + "s, " + Math.round(this.myProgrammingHex.getLength()*1000/timeElapsed)+"bytes/s";
348
                printTime = " in " + Math.round(timeElapsed/1000) + "s, " + Math.round(this.myProgrammingHex.getLength()*1000/timeElapsed)+"bytes/s";
345
            }
349
            }
346
           
350
           
347
            var canMessage = new CanNMTMessage("nmt", "Pgm_End");
351
            var canMessage = new CanNMTMessage("nmt", "Pgm_End");
348
            canMessage.send();
352
            canMessage.send();
349
 
353
 
350
            this.myProgrammingState = "CRC";
354
            this.myProgrammingState = "CRC";
351
            for (var i=this.myProgrammingnrOfTicks; i<40; i++) this.myProgrammingCallback(true, "", " ", true);
355
            for (var i=this.myProgrammingnrOfTicks; i<40; i++) this.myProgrammingCallback(true, "", " ", true);
352
            this.myProgrammingCallback(true, "", "]", true);
356
            this.myProgrammingCallback(true, "", "]", true);
353
            this.myProgrammingCallback(true, "", "\r", true);
357
            this.myProgrammingCallback(true, "", "\r", true);
354
            this.myProgrammingCallback(true, "", "100% [========================================]"+printTime, true);
358
            this.myProgrammingCallback(true, "", "100% [========================================]"+printTime, true);
355
 
359
 
356
            if (this.myProgrammingResend != null)
360
            if (this.myProgrammingResend != null)
357
            {
361
            {
358
                /* Stop the interval */
362
                /* Stop the interval */
359
                this.myProgrammingResend.stop();
363
                this.myProgrammingResend.stop();
360
            }
364
            }
361
 
365
 
362
            break;
366
            break;
363
           
367
           
364
        case "CRC":
368
        case "CRC":
-
 
369
            this.myProgrammingTimeout.setTimeout(6000);
365
            //is this a bios programming?
370
            //is this a bios programming?
366
            if (this.myProgrammingIsBios)
371
            if (this.myProgrammingIsBios)
367
            {
372
            {
368
                this.myProgrammingTimeout.setTimeout(6000);
-
 
369
                this.myProgrammingState = "COPY";
373
                this.myProgrammingState = "COPY";
370
                this.myProgrammingCallback(true, "\nBIOS", "Start to copy bios to new location", false);
374
                this.myProgrammingCallback(true, "\nBIOS", "Start to copy bios to new location", false);
371
                var canMessage = new CanNMTMessage("nmt", "Pgm_Copy");
375
                var canMessage = new CanNMTMessage("nmt", "Pgm_Copy");
372
                canMessage.setData("Source0", 0);
376
                canMessage.setData("Source0", 0);
373
                canMessage.setData("Source1", 0);
377
                canMessage.setData("Source1", 0);