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