diff --git a/main.html b/main.html index d65bb362..b3be7b87 100644 --- a/main.html +++ b/main.html @@ -16,7 +16,6 @@ - diff --git a/tabs/firmware_flasher.js b/tabs/firmware_flasher.js index 39075d90..16944da7 100644 --- a/tabs/firmware_flasher.js +++ b/tabs/firmware_flasher.js @@ -28,13 +28,21 @@ function tab_initialize_firmware_flasher() { reader.onloadend = function(e) { console.log('File loaded'); - STM32.GUI_status('Firmware loaded, ready for flashing'); intel_hex = e.target.result; - parsed_hex = read_hex_file(intel_hex); - $('span.size').html((parsed_hex.bytes / 1000) + ' kB'); - $('a.flash_firmware').removeClass('locked'); + parse_hex(intel_hex, function(data) { + parsed_hex = data; + + if (parsed_hex) { + STM32.GUI_status('Firmware loaded, ready for flashing'); + $('a.flash_firmware').removeClass('locked'); + + $('span.size').html((parsed_hex.bytes / 1000) + ' kB'); + } else { + STM32.GUI_status('HEX file appears to be corrupted'); + } + }); }; reader.readAsText(file); @@ -52,13 +60,20 @@ function tab_initialize_firmware_flasher() { $.get('https://raw.github.com/multiwii/baseflight/master/obj/baseflight.hex', function(data) { intel_hex = data; - parsed_hex = read_hex_file(intel_hex); - $('span.path').html('Using remote Firmware'); - $('span.size').html((parsed_hex.bytes / 1000) + ' kB'); - $('a.flash_firmware').removeClass('locked'); - - STM32.GUI_status('Remote Firmware loaded, ready for flashing'); + parse_hex(intel_hex, function(data) { + parsed_hex = data; + + if (parsed_hex) { + STM32.GUI_status('Remote Firmware loaded, ready for flashing'); + $('a.flash_firmware').removeClass('locked'); + + $('span.path').html('Using remote Firmware'); + $('span.size').html((parsed_hex.bytes / 1000) + ' kB'); + } else { + STM32.GUI_status('HEX file appears to be corrupted'); + } + }); }).fail(function() { STM32.GUI_status('Failed to load remote firmware'); $('a.flash_firmware').addClass('locked'); @@ -87,4 +102,17 @@ function tab_initialize_firmware_flasher() { } }); }); +} + +function parse_hex(str, callback) { + // parsing hex in different thread + var worker = new Worker('./workers/hex_parser.js'); + + // "callback" + worker.onmessage = function (event) { + callback(event.data); + }; + + // send data/string over for processing + worker.postMessage(str); } \ No newline at end of file diff --git a/js/hex_reader.js b/workers/hex_parser.js similarity index 93% rename from js/hex_reader.js rename to workers/hex_parser.js index 30663ba7..ef4799a0 100644 --- a/js/hex_reader.js +++ b/workers/hex_parser.js @@ -69,13 +69,16 @@ function read_hex_file(data) { } } - if (hexfile_valid) { - console.log('HEX file parsed: ' + result.bytes + ' bytes'); - - return result; + if (result.end_of_file && hexfile_valid) { + postMessage(result); } else { - console.log('HEX file parsed, CRC check failed: ' + result.bytes + ' bytes'); - - return false; + postMessage(false); } +} + +onmessage = function(event) { + read_hex_file(event.data); + + // terminate worker + close(); } \ No newline at end of file