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 = |
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) > |
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: |