Rev 758 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 758 | Rev 759 | ||
|---|---|---|---|
| Line 10... | Line 10... | ||
| 10 | private DaemonConnection dc; |
10 | private DaemonConnection dc; |
| 11 | private bool isBiosUpdate; |
11 | private bool isBiosUpdate; |
| 12 | private ulong dlOffset = 0; |
12 | private ulong dlOffset = 0; |
| 13 | //private Thread down; |
13 | //private Thread down; |
| 14 | private byte receiveID; |
14 | private byte receiveID; |
| - | 15 | private uint hwid; |
|
| - | 16 | private bool HWID_INUSE; |
|
| 15 | 17 | ||
| 16 | private enum dState { SEND_START, WAIT_ACK_PRG, SEND_PGM_DATA, WAIT_ACK_DATA, RESEND_ADDR, WAIT_DONE, SEND_DONE, SEND_BIOS_UPDATE, SEND_RESET, DONE, DEBUG_STATE2, WAIT_BOOT, SEND_EMPTY_START, WAIT_ACK_PRG_EMPTY, SEND_EMPTY_DATA, WAIT_ACK_EMPTY_DATA, SEND_DONE_EMPTY, WAIT_DONE_EMPTY}; |
18 | private enum dState { SEND_START, WAIT_ACK_PRG, SEND_PGM_DATA, WAIT_ACK_DATA, RESEND_ADDR, WAIT_DONE, SEND_DONE, SEND_BIOS_UPDATE, SEND_RESET, DONE, DEBUG_STATE2, WAIT_BOOT, SEND_EMPTY_START, WAIT_ACK_PRG_EMPTY, SEND_EMPTY_DATA, WAIT_ACK_EMPTY_DATA, SEND_DONE_EMPTY, WAIT_DONE_EMPTY}; |
| 17 | 19 | ||
| 18 | private const byte CAN_NMT = 0x00; |
20 | private const byte CAN_NMT = 0x00; |
| 19 | 21 | ||
| Line 34... | Line 36... | ||
| 34 | private const byte MY_NID = 0x0; |
36 | private const byte MY_NID = 0x0; |
| 35 | private const byte ADDR0_INDEX = 0; |
37 | private const byte ADDR0_INDEX = 0; |
| 36 | private const byte ADDR1_INDEX = 1; |
38 | private const byte ADDR1_INDEX = 1; |
| 37 | private const byte ADDR2_INDEX = 2; |
39 | private const byte ADDR2_INDEX = 2; |
| 38 | private const byte ADDR3_INDEX = 3; |
40 | private const byte ADDR3_INDEX = 3; |
| - | 41 | ||
| - | 42 | private const byte HWID0_INDEX = 4; |
|
| - | 43 | private const byte HWID1_INDEX = 5; |
|
| - | 44 | private const byte HWID2_INDEX = 6; |
|
| - | 45 | private const byte HWID3_INDEX = 7; |
|
| 39 | 46 | ||
| 40 | private const int TIMEOUT_MS = 1000; |
47 | private const int TIMEOUT_MS = 1000; |
| 41 | private const int TIMEOUT_SHORT_MS = 200; |
48 | private const int TIMEOUT_SHORT_MS = 200; |
| 42 | 49 | ||
| 43 | private long timeStart = 0; |
50 | private long timeStart = 0; |
| 44 | 51 | ||
| 45 | public Downloader(HexFile hf, DaemonConnection dc, byte receiveID, bool |
52 | public Downloader(HexFile hf, DaemonConnection dc, byte receiveID, bool isBiosUpdate, bool HWID_INUSE, uint hwid) { |
| 46 | this.hf = hf; |
53 | this.hf = hf; |
| 47 | this.dc = dc; |
54 | this.dc = dc; |
| 48 | this.receiveID = receiveID; |
55 | this.receiveID = receiveID; |
| 49 | this.isBiosUpdate = isBiosUpdate; |
56 | this.isBiosUpdate = isBiosUpdate; |
| - | 57 | this.hwid = hwid; |
|
| - | 58 | this.HWID_INUSE = HWID_INUSE; |
|
| 50 | } |
59 | } |
| 51 | 60 | ||
| 52 | public int calcCRC(HexFile hf) { |
61 | public int calcCRC(HexFile hf) { |
| 53 | int crc=0; |
62 | int crc=0; |
| 54 | for (ulong i=hf.getAddrLower(); i <= hf.getAddrUpper(); i++) { |
63 | for (ulong i=hf.getAddrLower(); i <= hf.getAddrUpper(); i++) { |
| Line 95... | Line 104... | ||
| 95 | dlOffset = hf.getAddrLower(); |
104 | dlOffset = hf.getAddrLower(); |
| 96 | //Console.WriteLine(dlOffset); |
105 | //Console.WriteLine(dlOffset); |
| 97 | //dlOffset = 200; |
106 | //dlOffset = 200; |
| 98 | } |
107 | } |
| 99 | 108 | ||
| 100 | CanNMT cpn = new CanNMT(); |
109 | CanNMT cpn = new CanNMT(HWID_INUSE); |
| 101 | cpn.setReceiver(receiveID); |
110 | cpn.setReceiver(receiveID); |
| 102 | bool hasMessage = false; |
111 | bool hasMessage = false; |
| 103 | 112 | ||
| 104 | while (!done) { |
113 | while (!done) { |
| 105 | Thread.Sleep(1); |
114 | Thread.Sleep(1); |
| Line 112... | Line 121... | ||
| 112 | //data[RID_INDEX] = TARGET_ID; |
121 | //data[RID_INDEX] = TARGET_ID; |
| 113 | data[ADDR0_INDEX] = (byte)((currentAddress-dlOffset) & 0x0000FF); |
122 | data[ADDR0_INDEX] = (byte)((currentAddress-dlOffset) & 0x0000FF); |
| 114 | data[ADDR1_INDEX] = (byte)(((currentAddress-dlOffset) & 0x00FF00) >> 8); |
123 | data[ADDR1_INDEX] = (byte)(((currentAddress-dlOffset) & 0x00FF00) >> 8); |
| 115 | data[ADDR2_INDEX] = (byte)(((currentAddress-dlOffset) & 0xFF0000) >> 16); |
124 | data[ADDR2_INDEX] = (byte)(((currentAddress-dlOffset) & 0xFF0000) >> 16); |
| 116 | data[ADDR3_INDEX] = 0; |
125 | data[ADDR3_INDEX] = 0; |
| - | 126 | if (HWID_INUSE) { |
|
| - | 127 | data[HWID0_INDEX] = (byte)((hwid) & 0xFF); |
|
| - | 128 | data[HWID1_INDEX] = (byte)((hwid>>8) & 0xFF); |
|
| - | 129 | data[HWID2_INDEX] = (byte)((hwid>>16) & 0xFF); |
|
| - | 130 | data[HWID3_INDEX] = (byte)((hwid>>24) & 0xFF); |
|
| - | 131 | } |
|
| 117 | //outCm = new CanPacket(CAN_NMT, CAN_NMT_PGM_START, MY_ID, receiveID, 4, data); |
132 | //outCm = new CanPacket(CAN_NMT, CAN_NMT_PGM_START, MY_ID, receiveID, 4, data); |
| 118 | outCm = cpn.getPgmStartPacket(data); |
133 | outCm = cpn.getPgmStartPacket(data); |
| 119 | dc.sendCanPacket(outCm); |
134 | dc.sendCanPacket(outCm); |
| 120 | t = Environment.TickCount; |
135 | t = Environment.TickCount; |
| 121 | t2 = Environment.TickCount; |
136 | t2 = Environment.TickCount; |
| 122 | pgs = dState.WAIT_ACK_PRG; |
137 | pgs = dState.WAIT_ACK_PRG; |
| 123 | timeStart = Environment.TickCount; |
138 | timeStart = Environment.TickCount; |
| 124 | break; |
139 | break; |
| 125 | 140 | ||
| 126 | 141 | ||
| 127 | case dState.WAIT_ACK_PRG: |
142 | case dState.WAIT_ACK_PRG: |
| 128 | // Check for timeout, resend start packet in that case.. |
143 | // Check for timeout, resend start packet in that case.. |
| 129 | if ((Environment.TickCount - t) > TIMEOUT_MS) { |
144 | if ((Environment.TickCount - t) > TIMEOUT_MS) { |
| 130 | Console.WriteLine("Timeout while waiting for start prg ack."); |
145 | Console.WriteLine("Timeout while waiting for start prg ack."); |
| 131 | errorOccured = true; |
146 | errorOccured = true; |
| 132 | pgs = dState.SEND_RESET; |
147 | pgs = dState.SEND_RESET; |
| 133 | } |
148 | } |
| 134 | //Thread.Sleep(1); |
149 | //Thread.Sleep(1); |
| 135 | // If received ack. |
150 | // If received ack. |
| 136 | hasMessage = dc.getData(out cm); |
151 | hasMessage = dc.getData(out cm); |
| 137 | if (hasMessage) { |
152 | if (hasMessage) { |
| 138 | CanNMT cpnin = new CanNMT( |
153 | CanNMT cpnin = new CanNMT(cm, HWID_INUSE); |
| - | 154 | if (cpnin.isNMTPacket()) { |
|
| 139 |
|
155 | //if (cpnin.isNMTPacket() && (cpnin.getSender() == receiveID)) { |
| 140 | // If no error |
156 | // If no error |
| 141 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
157 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
| 142 | // Start sending program data.. |
158 | // Start sending program data.. |
| 143 | byteSent = 0; |
159 | byteSent = 0; |
| 144 | pgs = dState.SEND_PGM_DATA; |
160 | pgs = dState.SEND_PGM_DATA; |
| Line 146... | Line 162... | ||
| 146 | else if (cpnin.getType() == CAN_NMT_PGM_NACK ) { |
162 | else if (cpnin.getType() == CAN_NMT_PGM_NACK ) { |
| 147 | // else .. |
163 | // else .. |
| 148 | Console.WriteLine("Nack on CAN_NMT_PGM_START."); |
164 | Console.WriteLine("Nack on CAN_NMT_PGM_START."); |
| 149 | errorOccured = true; |
165 | errorOccured = true; |
| 150 | pgs = dState.SEND_RESET; |
166 | pgs = dState.SEND_RESET; |
| 151 | } |
167 | } |
| 152 | - | ||
| 153 | } |
168 | } |
| 154 | } |
169 | } |
| 155 | break; |
170 | break; |
| 156 | 171 | ||
| 157 | case dState.SEND_PGM_DATA: |
172 | case dState.SEND_PGM_DATA: |
| 158 | //Console.WriteLine("byteSent = "+byteSent); |
173 | //Console.WriteLine("byteSent = "+byteSent); |
| Line 175... | Line 190... | ||
| 175 | 190 | ||
| 176 | t = Environment.TickCount; |
191 | t = Environment.TickCount; |
| 177 | t2 = Environment.TickCount; |
192 | t2 = Environment.TickCount; |
| 178 | byteSent += 6; |
193 | byteSent += 6; |
| 179 | pgs = dState.WAIT_ACK_DATA; |
194 | pgs = dState.WAIT_ACK_DATA; |
| 180 | break; |
195 | break; |
| 181 | 196 | ||
| 182 | 197 | ||
| 183 | case dState.WAIT_ACK_DATA: |
198 | case dState.WAIT_ACK_DATA: |
| 184 | // Wait for pgm ack. |
199 | // Wait for pgm ack. |
| 185 | if ((Environment.TickCount - t) > TIMEOUT_MS) { |
200 | if ((Environment.TickCount - t) > TIMEOUT_MS) { |
| 186 | // Woops, error. |
201 | // Woops, error. |
| 187 | Console.WriteLine("Timeout while waiting for data ack."); |
202 | Console.WriteLine("Timeout while waiting for data ack."); |
| Line 192... | Line 207... | ||
| 192 | // Woops, error. |
207 | // Woops, error. |
| 193 | Console.Write(":"); |
208 | Console.Write(":"); |
| 194 | byteSent -= 6; |
209 | byteSent -= 6; |
| 195 | pgs = dState.SEND_PGM_DATA; |
210 | pgs = dState.SEND_PGM_DATA; |
| 196 | break; |
211 | break; |
| 197 | } |
212 | } |
| 198 | //Thread.Sleep(1); |
213 | //Thread.Sleep(1); |
| 199 | // If received ack. |
214 | // If received ack. |
| 200 | hasMessage = dc.getData(out cm); |
215 | hasMessage = dc.getData(out cm); |
| 201 | if (hasMessage) { |
216 | if (hasMessage) { |
| 202 | CanNMT cpnin = new CanNMT( |
217 | CanNMT cpnin = new CanNMT(cm, HWID_INUSE); |
| - | 218 | if (cpnin.isNMTPacket()) { |
|
| 203 |
|
219 | //if (cpnin.isNMTPacket() && (cpnin.getSender() == receiveID)) { |
| 204 | // If no error |
220 | // If no error |
| 205 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
221 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
| 206 | //currentAddress += 2; |
222 | //currentAddress += 2; |
| 207 | // Check if end. |
223 | // Check if end. |
| 208 | if (currentAddress + byteSent > hf.getAddrUpper()) { |
224 | if (currentAddress + byteSent > hf.getAddrUpper()) { |
| Line 219... | Line 235... | ||
| 219 | // else .. |
235 | // else .. |
| 220 | Console.WriteLine("Nack on CAN_NMT_PGM_DATA."); |
236 | Console.WriteLine("Nack on CAN_NMT_PGM_DATA."); |
| 221 | errorOccured = true; |
237 | errorOccured = true; |
| 222 | pgs = dState.SEND_RESET; |
238 | pgs = dState.SEND_RESET; |
| 223 | } |
239 | } |
| 224 | - | ||
| 225 | } |
240 | } |
| 226 | } |
241 | } |
| 227 | break; |
242 | break; |
| 228 | 243 | ||
| 229 | case dState.SEND_DONE: |
244 | case dState.SEND_DONE: |
| Line 246... | Line 261... | ||
| 246 | } |
261 | } |
| 247 | //Thread.Sleep(1); |
262 | //Thread.Sleep(1); |
| 248 | 263 | ||
| 249 | hasMessage = dc.getData(out cm); |
264 | hasMessage = dc.getData(out cm); |
| 250 | if (hasMessage) { |
265 | if (hasMessage) { |
| 251 | CanNMT cpnin = new CanNMT( |
266 | CanNMT cpnin = new CanNMT(cm, HWID_INUSE); |
| - | 267 | if (cpnin.isNMTPacket()) { |
|
| 252 |
|
268 | //if (cpnin.isNMTPacket() && (cpnin.getSender() == receiveID)) { |
| 253 | // If no error |
269 | // If no error |
| 254 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
270 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
| 255 | Console.WriteLine(""); |
271 | Console.WriteLine(""); |
| 256 | // |
272 | // |
| 257 | int crc = calcCRC(hf); |
273 | int crc = calcCRC(hf); |
| Line 270... | Line 286... | ||
| 270 | string nodecrc = String.Format("{0:x4}", (int)cmdata[0] + (int)(cmdata[1]<<8)); |
286 | string nodecrc = String.Format("{0:x4}", (int)cmdata[0] + (int)(cmdata[1]<<8)); |
| 271 | nodecrc = "0x"+nodecrc; |
287 | nodecrc = "0x"+nodecrc; |
| 272 | string realcrc = String.Format("{0:x4}", (int)(crc & 0xFF) + (int)(crc & 0xFF00)); |
288 | string realcrc = String.Format("{0:x4}", (int)(crc & 0xFF) + (int)(crc & 0xFF00)); |
| 273 | realcrc = "0x"+realcrc; |
289 | realcrc = "0x"+realcrc; |
| 274 | Console.WriteLine("CRC failed. Node sent CRC "+nodecrc+" but should be "+realcrc+"."); |
290 | Console.WriteLine("CRC failed. Node sent CRC "+nodecrc+" but should be "+realcrc+"."); |
| 275 | errorOccured = true; |
291 | errorOccured = true; |
| 276 | pgs = dState.SEND_RESET; |
292 | pgs = dState.SEND_RESET; |
| 277 | } |
293 | } |
| 278 | 294 | ||
| 279 | byteSent = 0; |
295 | byteSent = 0; |
| 280 | } |
296 | } |
| 281 | //Console.WriteLine("crc: " + crc + " " + (crc>>8) + " " + (crc & 0xFF)); |
297 | //Console.WriteLine("crc: " + crc + " " + (crc>>8) + " " + (crc & 0xFF)); |
| 282 | //Console.WriteLine("ACKpkg with CRC: " + cm.ToString()); |
298 | //Console.WriteLine("ACKpkg with CRC: " + cm.ToString()); |
| 283 | // |
299 | // |
| 284 | } |
300 | } |
| Line 319... | Line 335... | ||
| 319 | } |
335 | } |
| 320 | //Thread.Sleep(1); |
336 | //Thread.Sleep(1); |
| 321 | // If received boot msg. |
337 | // If received boot msg. |
| 322 | hasMessage = dc.getData(out cm); |
338 | hasMessage = dc.getData(out cm); |
| 323 | if (hasMessage) { |
339 | if (hasMessage) { |
| 324 | CanNMT cpnin = new CanNMT( |
340 | CanNMT cpnin = new CanNMT(cm, HWID_INUSE); |
| - | 341 | if (cpnin.isNMTPacket()) { |
|
| 325 |
|
342 | //if (cpnin.isNMTPacket() && (cpnin.getSender() == receiveID)) { |
| 326 | // If no error |
343 | // If no error |
| 327 | if (cpnin.getType() == CAN_NMT_BIOS_START) { |
344 | if (cpnin.getType() == CAN_NMT_BIOS_START) { |
| 328 | pgs = dState.SEND_EMPTY_START; |
345 | pgs = dState.SEND_EMPTY_START; |
| 329 | } |
346 | } |
| 330 | else { |
347 | else { |
| Line 341... | Line 358... | ||
| 341 | //data[RID_INDEX] = TARGET_ID; |
358 | //data[RID_INDEX] = TARGET_ID; |
| 342 | data[ADDR0_INDEX] = (byte)((0) & 0x0000FF); |
359 | data[ADDR0_INDEX] = (byte)((0) & 0x0000FF); |
| 343 | data[ADDR1_INDEX] = (byte)(((0) & 0x00FF00) >> 8); |
360 | data[ADDR1_INDEX] = (byte)(((0) & 0x00FF00) >> 8); |
| 344 | data[ADDR2_INDEX] = (byte)(((0) & 0xFF0000) >> 16); |
361 | data[ADDR2_INDEX] = (byte)(((0) & 0xFF0000) >> 16); |
| 345 | data[ADDR3_INDEX] = 0; |
362 | data[ADDR3_INDEX] = 0; |
| - | 363 | if (HWID_INUSE) { |
|
| - | 364 | data[HWID0_INDEX] = (byte)((hwid) & 0xFF); |
|
| - | 365 | data[HWID1_INDEX] = (byte)((hwid>>8) & 0xFF); |
|
| - | 366 | data[HWID2_INDEX] = (byte)((hwid>>16) & 0xFF); |
|
| - | 367 | data[HWID3_INDEX] = (byte)((hwid>>24) & 0xFF); |
|
| - | 368 | } |
|
| 346 | //outCm = new CanPacket(CAN_NMT, CAN_NMT_PGM_START, MY_ID, receiveID, 4, data); |
369 | //outCm = new CanPacket(CAN_NMT, CAN_NMT_PGM_START, MY_ID, receiveID, 4, data); |
| 347 | outCm = cpn.getPgmStartPacket(data); |
370 | outCm = cpn.getPgmStartPacket(data); |
| 348 | dc.sendCanPacket(outCm); |
371 | dc.sendCanPacket(outCm); |
| 349 | t = Environment.TickCount; |
372 | t = Environment.TickCount; |
| 350 | t2 = Environment.TickCount; |
373 | t2 = Environment.TickCount; |
| 351 | pgs = dState.WAIT_ACK_PRG_EMPTY; |
374 | pgs = dState.WAIT_ACK_PRG_EMPTY; |
| 352 | timeStart = Environment.TickCount; |
- | |
| 353 | break; |
375 | break; |
| 354 | 376 | ||
| 355 | 377 | ||
| 356 | case dState.WAIT_ACK_PRG_EMPTY: |
378 | case dState.WAIT_ACK_PRG_EMPTY: |
| 357 | // Check for timeout, resend start packet in that case.. |
379 | // Check for timeout, resend start packet in that case.. |
| 358 | if ((Environment.TickCount - t) > 3*TIMEOUT_MS) { |
380 | if ((Environment.TickCount - t) > 3*TIMEOUT_MS) { |
| 359 | Console.WriteLine("Timeout while waiting for start prg ack."); |
381 | Console.WriteLine("Timeout while waiting for start prg ack during empty-first-block-cycle."); |
| 360 | errorOccured = true; |
382 | errorOccured = true; |
| 361 | pgs = dState.SEND_RESET; |
383 | pgs = dState.SEND_RESET; |
| 362 | } |
384 | } |
| 363 | //Thread.Sleep(1); |
385 | //Thread.Sleep(1); |
| 364 | // If received ack. |
386 | // If received ack. |
| 365 | hasMessage = dc.getData(out cm); |
387 | hasMessage = dc.getData(out cm); |
| 366 | if (hasMessage) { |
388 | if (hasMessage) { |
| 367 | CanNMT cpnin = new CanNMT( |
389 | CanNMT cpnin = new CanNMT(cm, HWID_INUSE); |
| - | 390 | if (cpnin.isNMTPacket()) { |
|
| 368 |
|
391 | //if (cpnin.isNMTPacket() && (cpnin.getSender() == receiveID)) { |
| 369 | // If no error |
392 | // If no error |
| 370 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
393 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
| 371 | // Start sending program data.. |
394 | // Start sending program data.. |
| 372 | byteSent = 0; |
395 | byteSent = 0; |
| 373 | pgs = dState.SEND_EMPTY_DATA; |
396 | pgs = dState.SEND_EMPTY_DATA; |
| Line 376... | Line 399... | ||
| 376 | // else .. |
399 | // else .. |
| 377 | Console.WriteLine("Nack on CAN_NMT_PGM_START."); |
400 | Console.WriteLine("Nack on CAN_NMT_PGM_START."); |
| 378 | errorOccured = true; |
401 | errorOccured = true; |
| 379 | pgs = dState.SEND_RESET; |
402 | pgs = dState.SEND_RESET; |
| 380 | } |
403 | } |
| 381 | - | ||
| 382 | } |
404 | } |
| 383 | } |
405 | } |
| 384 | break; |
406 | break; |
| 385 | 407 | ||
| 386 | case dState.SEND_EMPTY_DATA: |
408 | case dState.SEND_EMPTY_DATA: |
| 387 | // Send program data. |
409 | // Send program data. |
| 388 | data[0] = 0; |
410 | data[0] = 0; |
| 389 | data[1] = 0; |
411 | data[1] = 0; |
| 390 | data[2] = 0xff; |
412 | data[2] = 0xff; |
| 391 | data[3] = 0xff; |
413 | data[3] = 0xff; |
| 392 | 414 | ||
| 393 | outCm = cpn.getPgmDataPacket(data, 4); |
415 | outCm = cpn.getPgmDataPacket(data, 4); |
| 394 | dc.sendCanPacket(outCm); |
416 | dc.sendCanPacket(outCm); |
| 395 | 417 | ||
| 396 | t = Environment.TickCount; |
418 | t = Environment.TickCount; |
| 397 | t2 = Environment.TickCount; |
419 | t2 = Environment.TickCount; |
| Line 403... | Line 425... | ||
| 403 | case dState.WAIT_ACK_EMPTY_DATA: |
425 | case dState.WAIT_ACK_EMPTY_DATA: |
| 404 | // Wait for pgm ack. |
426 | // Wait for pgm ack. |
| 405 | if ((Environment.TickCount - t) > 2*TIMEOUT_MS) { |
427 | if ((Environment.TickCount - t) > 2*TIMEOUT_MS) { |
| 406 | // Woops, error. |
428 | // Woops, error. |
| 407 | Console.WriteLine("Timeout while waiting for data ack."); |
429 | Console.WriteLine("Timeout while waiting for data ack."); |
| 408 | errorOccured = true; |
430 | errorOccured = true; |
| 409 | pgs = dState.SEND_RESET; |
431 | pgs = dState.SEND_RESET; |
| 410 | } |
432 | } |
| 411 | //Thread.Sleep(1); |
433 | //Thread.Sleep(1); |
| 412 | // If received ack. |
434 | // If received ack. |
| 413 | hasMessage = dc.getData(out cm); |
435 | hasMessage = dc.getData(out cm); |
| 414 | if (hasMessage) { |
436 | if (hasMessage) { |
| 415 | CanNMT cpnin = new CanNMT( |
437 | CanNMT cpnin = new CanNMT(cm, HWID_INUSE); |
| - | 438 | if (cpnin.isNMTPacket()) { |
|
| 416 |
|
439 | //if (cpnin.isNMTPacket() && (cpnin.getSender() == receiveID)) { |
| 417 | // If no error |
440 | // If no error |
| 418 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
441 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
| 419 | pgs = dState.SEND_DONE_EMPTY; |
442 | pgs = dState.SEND_DONE_EMPTY; |
| 420 | } |
443 | } |
| 421 | else if (cpnin.getType() == CAN_NMT_PGM_NACK ) { |
444 | else if (cpnin.getType() == CAN_NMT_PGM_NACK ) { |
| 422 | // else .. |
445 | // else .. |
| 423 | Console.WriteLine("Nack on CAN_NMT_PGM_DATA."); |
446 | Console.WriteLine("Nack on CAN_NMT_PGM_DATA."); |
| 424 | errorOccured = true; |
447 | errorOccured = true; |
| 425 | pgs = dState.SEND_RESET; |
448 | pgs = dState.SEND_RESET; |
| 426 | } |
449 | } |
| 427 | - | ||
| 428 | } |
450 | } |
| 429 | } |
451 | } |
| 430 | break; |
452 | break; |
| 431 | 453 | ||
| 432 | case dState.SEND_DONE_EMPTY: |
454 | case dState.SEND_DONE_EMPTY: |
| Line 449... | Line 471... | ||
| 449 | } |
471 | } |
| 450 | //Thread.Sleep(1); |
472 | //Thread.Sleep(1); |
| 451 | 473 | ||
| 452 | hasMessage = dc.getData(out cm); |
474 | hasMessage = dc.getData(out cm); |
| 453 | if (hasMessage) { |
475 | if (hasMessage) { |
| 454 | CanNMT cpnin = new CanNMT( |
476 | CanNMT cpnin = new CanNMT(cm, HWID_INUSE); |
| - | 477 | if (cpnin.isNMTPacket()) { |
|
| 455 |
|
478 | //if (cpnin.isNMTPacket() && (cpnin.getSender() == receiveID)) { |
| 456 | // If no error |
479 | // If no error |
| 457 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
480 | if (cpnin.getType() == CAN_NMT_PGM_ACK) { |
| 458 | Console.WriteLine(""); |
481 | Console.WriteLine(""); |
| 459 | // |
482 | // |
| 460 | Console.WriteLine("Done, successfully cleaned application flash."); |
483 | Console.WriteLine("Done, successfully cleaned application flash."); |
| Line 469... | Line 492... | ||
| 469 | } |
492 | } |
| 470 | } |
493 | } |
| 471 | break; |
494 | break; |
| 472 | case dState.SEND_RESET: |
495 | case dState.SEND_RESET: |
| 473 | // Send reset |
496 | // Send reset |
| 474 | cpn.doReset(dc, |
497 | cpn.doReset(dc, receiveID, hwid); |
| 475 | t = Environment.TickCount; |
498 | t = Environment.TickCount; |
| 476 | t2 = Environment.TickCount; |
499 | t2 = Environment.TickCount; |
| 477 | pgs = dState.DONE; |
500 | pgs = dState.DONE; |
| 478 | break; |
501 | break; |
| 479 | 502 | ||