diff --git a/js/stm32.js b/js/stm32.js index df32826e1a..785993d1be 100644 --- a/js/stm32.js +++ b/js/stm32.js @@ -133,8 +133,8 @@ STM32_protocol.prototype.initialize = function() { // reset and set some variables before we start self.receive_buffer = []; - self.flashing_memory_address = self.hex.extended_linear_address; - self.verify_memory_address = self.hex.extended_linear_address; + self.flashing_memory_address = self.hex.extended_linear_address[0]; + self.verify_memory_address = self.hex.extended_linear_address[0]; self.bytes_flashed = 0; self.bytes_verified = 0; @@ -412,7 +412,7 @@ STM32_protocol.prototype.upload_procedure = function(step) { self.send([self.command.write_memory, 0xCE], 1, function(reply) { // 0x31 ^ 0xFF if (self.verify_response(self.status.ACK, reply)) { // address needs to be transmitted as 32 bit integer, we need to bit shift each byte out and then calculate address checksum - var address = [(self.flashing_memory_address >> 24), (self.flashing_memory_address >> 16) & 0xFF, (self.flashing_memory_address >> 8) & 0xFF, (self.flashing_memory_address & 0xFF)]; + var address = [(self.flashing_memory_address >> 24), (self.flashing_memory_address >> 16), (self.flashing_memory_address >> 8), self.flashing_memory_address]; var address_checksum = address[0] ^ address[1] ^ address[2] ^ address[3]; self.send([address[0], address[1], address[2], address[3], address_checksum], 1, function(reply) { // write start address + checksum @@ -466,7 +466,7 @@ STM32_protocol.prototype.upload_procedure = function(step) { self.send([self.command.read_memory, 0xEE], 1, function(reply) { // 0x11 ^ 0xFF if (self.verify_response(self.status.ACK, reply)) { - var address = [(self.verify_memory_address >> 24), (self.verify_memory_address >> 16) & 0x00FF, (self.verify_memory_address >> 8) & 0x00FF, (self.verify_memory_address & 0x00FF)]; + var address = [(self.verify_memory_address >> 24), (self.verify_memory_address >> 16), (self.verify_memory_address >> 8), self.verify_memory_address]; var address_checksum = address[0] ^ address[1] ^ address[2] ^ address[3]; self.send([address[0], address[1], address[2], address[3], address_checksum], 1, function(reply) { // read start address + checksum @@ -524,12 +524,12 @@ STM32_protocol.prototype.upload_procedure = function(step) { case 7: // go // memory address = 4 bytes, 1st high byte, 4th low byte, 5th byte = checksum XOR(byte 1, byte 2, byte 3, byte 4) - console.log('Sending GO command: 0x' + self.hex.extended_linear_address.toString(16)); + console.log('Sending GO command: 0x' + self.hex.extended_linear_address[0].toString(16)); self.send([self.command.go, 0xDE], 1, function(reply) { // 0x21 ^ 0xFF if (self.verify_response(self.status.ACK, reply)) { - var gt_address = self.hex.extended_linear_address; - var address = [(gt_address >> 24), (gt_address >> 16) & 0x00FF, (gt_address >> 8) & 0x00FF, (gt_address & 0x00FF)]; + var gt_address = self.hex.extended_linear_address[0]; + var address = [(gt_address >> 24), (gt_address >> 16), (gt_address >> 8), gt_address]; var address_checksum = address[0] ^ address[1] ^ address[2] ^ address[3]; self.send([address[0], address[1], address[2], address[3], address_checksum], 1, function(reply) { diff --git a/workers/hex_parser.js b/workers/hex_parser.js index ef4799a09e..bbca98160a 100644 --- a/workers/hex_parser.js +++ b/workers/hex_parser.js @@ -14,7 +14,7 @@ function read_hex_file(data) { var result = { data: [], end_of_file: false, - extended_linear_address: 0, + extended_linear_address: [], start_linear_address: 0, bytes: 0 }; @@ -56,12 +56,14 @@ function read_hex_file(data) { break; case 0x02: // extended segment address record // not implemented + console.log('extended segment address record found - NOT IMPLEMENTED !!!'); break; case 0x03: // start segment address record // not implemented + console.log('start segment address record found - NOT IMPLEMENTED !!!'); break; case 0x04: // extended linear address record - result.extended_linear_address = (parseInt(content.substr(0, 2), 16) << 24) | parseInt(content.substr(2, 2), 16) << 16; + result.extended_linear_address.push((parseInt(content.substr(0, 2), 16) << 24) | parseInt(content.substr(2, 2), 16) << 16); break; case 0x05: // start linear address record result.start_linear_address = (parseInt(content.substr(0, 2), 16) << 24) | (parseInt(content.substr(2, 2), 16) << 16) | (parseInt(content.substr(4, 2), 16) << 8) | parseInt(content.substr(6, 2), 16);