Subversion Repositories HomeAutomation

Rev

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

Rev 586 Rev 632
Line 35... Line 35...
35
    private const byte ADDR0_INDEX = 0;
35
    private const byte ADDR0_INDEX = 0;
36
    private const byte ADDR1_INDEX = 1;
36
    private const byte ADDR1_INDEX = 1;
37
    private const byte ADDR2_INDEX = 2;
37
    private const byte ADDR2_INDEX = 2;
38
    private const byte ADDR3_INDEX = 3;
38
    private const byte ADDR3_INDEX = 3;
39
   
39
   
40
    private const int TIMEOUT_MS = 2000;
40
    private const int TIMEOUT_MS = 1000;
-
 
41
    private const int TIMEOUT_SHORT_MS = 200;
41
   
42
   
42
    private long timeStart = 0;
43
    private long timeStart = 0;
43
   
44
   
44
    public Downloader(HexFile hf, DaemonConnection dc, byte receiveID, bool isBiosUpdate) {
45
    public Downloader(HexFile hf, DaemonConnection dc, byte receiveID, bool isBiosUpdate) {
45
        this.hf = hf;
46
        this.hf = hf;
Line 78... Line 79...
78
    }
79
    }
79
   
80
   
80
    public bool downloader() {
81
    public bool downloader() {
81
        dState pgs = dState.SEND_START;
82
        dState pgs = dState.SEND_START;
82
        int t = 0;
83
        int t = 0;
-
 
84
        int t2 = 0;
83
        CanPacket outCm = null;
85
        CanPacket outCm = null;
84
        CanPacket cm = null;
86
        CanPacket cm = null;
85
        byte[] data = new byte[8];
87
        byte[] data = new byte[8];
86
        uint byteSent = 0;
88
        uint byteSent = 0;
87
        ulong currentAddress = 0;
89
        ulong currentAddress = 0;
Line 114... Line 116...
114
                        data[ADDR3_INDEX] = 0;
116
                        data[ADDR3_INDEX] = 0;
115
                        //outCm = new CanPacket(CAN_NMT, CAN_NMT_PGM_START, MY_ID, receiveID, 4, data);
117
                        //outCm = new CanPacket(CAN_NMT, CAN_NMT_PGM_START, MY_ID, receiveID, 4, data);
116
                        outCm = cpn.getPgmStartPacket(data);
118
                        outCm = cpn.getPgmStartPacket(data);
117
                        dc.sendCanPacket(outCm);
119
                        dc.sendCanPacket(outCm);
118
                        t = Environment.TickCount;
120
                        t = Environment.TickCount;
-
 
121
                        t2 = Environment.TickCount;
119
                        pgs = dState.WAIT_ACK_PRG;
122
                        pgs = dState.WAIT_ACK_PRG;
120
                        timeStart = Environment.TickCount;
123
                        timeStart = Environment.TickCount;
121
                        break;
124
                        break;
122
                   
125
                   
123
                   
126
                   
Line 169... Line 172...
169
 
172
 
170
                        outCm = cpn.getPgmDataPacket(data, datalength);
173
                        outCm = cpn.getPgmDataPacket(data, datalength);
171
                        dc.sendCanPacket(outCm);
174
                        dc.sendCanPacket(outCm);
172
                       
175
                       
173
                        t = Environment.TickCount;
176
                        t = Environment.TickCount;
-
 
177
                        t2 = Environment.TickCount;
174
                        byteSent += 6;
178
                        byteSent += 6;
175
                        pgs = dState.WAIT_ACK_DATA;
179
                        pgs = dState.WAIT_ACK_DATA;
176
                        break;
180
                        break;
177
                       
181
                       
178
                       
182
                       
179
                    case dState.WAIT_ACK_DATA:
183
                    case dState.WAIT_ACK_DATA:
180
                        // Wait for pgm ack.
184
                        // Wait for pgm ack.
181
                        if ((Environment.TickCount - t) > 2*TIMEOUT_MS) {
185
                        if ((Environment.TickCount - t) > TIMEOUT_MS) {
182
                            // Woops, error. 
186
                            // Woops, error. 
183
                            Console.WriteLine("Timeout while waiting for data ack.");
187
                            Console.WriteLine("Timeout while waiting for data ack.");
184
                            errorOccured = true;
188
                            errorOccured = true;
185
                            pgs = dState.SEND_RESET;
189
                            pgs = dState.SEND_RESET;
-
 
190
                        }
-
 
191
                        if ((Environment.TickCount - t2) > TIMEOUT_SHORT_MS) {
-
 
192
                            // Woops, error. 
-
 
193
                            Console.Write(":");
-
 
194
                            byteSent -= 6;
-
 
195
                            pgs = dState.SEND_PGM_DATA;
-
 
196
                            break;
186
                        }
197
                        }
187
                        //Thread.Sleep(1);
198
                        //Thread.Sleep(1);
188
                        // If received ack.
199
                        // If received ack.
189
                        hasMessage = dc.getData(out cm);
200
                        hasMessage = dc.getData(out cm);
190
                        if (hasMessage) {
201
                        if (hasMessage) {
Line 219... Line 230...
219
                        // Send done
230
                        // Send done
220
                        outCm = cpn.getPgmEndPacket();
231
                        outCm = cpn.getPgmEndPacket();
221
                        dc.sendCanPacket(outCm);
232
                        dc.sendCanPacket(outCm);
222
 
233
 
223
                        t = Environment.TickCount;
234
                        t = Environment.TickCount;
-
 
235
                        t2 = Environment.TickCount;
224
                        pgs = dState.WAIT_DONE;
236
                        pgs = dState.WAIT_DONE;
225
                        break;
237
                        break;
226
                       
238
                       
227
                       
239
                       
228
                    case dState.WAIT_DONE:
240
                    case dState.WAIT_DONE:
Line 290... Line 302...
290
                       
302
                       
291
                        outCm = cpn.getPgmCopyPacket(data);
303
                        outCm = cpn.getPgmCopyPacket(data);
292
                        Console.WriteLine("Now say a prayer, moving bios");
304
                        Console.WriteLine("Now say a prayer, moving bios");
293
                        dc.sendCanPacket(outCm);
305
                        dc.sendCanPacket(outCm);
294
                        t = Environment.TickCount;
306
                        t = Environment.TickCount;
-
 
307
                        t2 = Environment.TickCount;
295
                        pgs = dState.WAIT_BOOT;
308
                        pgs = dState.WAIT_BOOT;
296
                        //pgs = dState.DONE;
309
                        //pgs = dState.DONE;
297
                        break;
310
                        break;
298
 
311
 
299
                    case dState.WAIT_BOOT:
312
                    case dState.WAIT_BOOT:
Line 332... Line 345...
332
                        data[ADDR3_INDEX] = 0;
345
                        data[ADDR3_INDEX] = 0;
333
                        //outCm = new CanPacket(CAN_NMT, CAN_NMT_PGM_START, MY_ID, receiveID, 4, data);
346
                        //outCm = new CanPacket(CAN_NMT, CAN_NMT_PGM_START, MY_ID, receiveID, 4, data);
334
                        outCm = cpn.getPgmStartPacket(data);
347
                        outCm = cpn.getPgmStartPacket(data);
335
                        dc.sendCanPacket(outCm);
348
                        dc.sendCanPacket(outCm);
336
                        t = Environment.TickCount;
349
                        t = Environment.TickCount;
-
 
350
                        t2 = Environment.TickCount;
337
                        pgs = dState.WAIT_ACK_PRG_EMPTY;
351
                        pgs = dState.WAIT_ACK_PRG_EMPTY;
338
                        timeStart = Environment.TickCount;
352
                        timeStart = Environment.TickCount;
339
                        break;
353
                        break;
340
                   
354
                   
341
                   
355
                   
Line 378... Line 392...
378
 
392
 
379
                        outCm = cpn.getPgmDataPacket(data, 4);
393
                        outCm = cpn.getPgmDataPacket(data, 4);
380
                        dc.sendCanPacket(outCm);
394
                        dc.sendCanPacket(outCm);
381
                       
395
                       
382
                        t = Environment.TickCount;
396
                        t = Environment.TickCount;
-
 
397
                        t2 = Environment.TickCount;
383
                        byteSent += 6;
398
                        byteSent += 6;
384
                        pgs = dState.WAIT_ACK_EMPTY_DATA;
399
                        pgs = dState.WAIT_ACK_EMPTY_DATA;
385
                        break;
400
                        break;
386
                       
401
                       
387
                       
402
                       
Line 418... Line 433...
418
                        // Send done
433
                        // Send done
419
                        outCm = cpn.getPgmEndPacket();
434
                        outCm = cpn.getPgmEndPacket();
420
                        dc.sendCanPacket(outCm);
435
                        dc.sendCanPacket(outCm);
421
 
436
 
422
                        t = Environment.TickCount;
437
                        t = Environment.TickCount;
-
 
438
                        t2 = Environment.TickCount;
423
                        pgs = dState.WAIT_DONE_EMPTY;
439
                        pgs = dState.WAIT_DONE_EMPTY;
424
                        break;
440
                        break;
425
                       
441
                       
426
                       
442
                       
427
                    case dState.WAIT_DONE_EMPTY:
443
                    case dState.WAIT_DONE_EMPTY:
Line 455... Line 471...
455
                        break;                     
471
                        break;                     
456
                    case dState.SEND_RESET:
472
                    case dState.SEND_RESET:
457
                        // Send reset
473
                        // Send reset
458
                        cpn.doReset(dc, receiveID);
474
                        cpn.doReset(dc, receiveID);
459
                        t = Environment.TickCount;
475
                        t = Environment.TickCount;
-
 
476
                        t2 = Environment.TickCount;
460
                        pgs = dState.DONE;
477
                        pgs = dState.DONE;
461
                        break;
478
                        break;
462
                       
479
                       
463
                       
480
                       
464
                    case dState.DONE:
481
                    case dState.DONE: