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); |