1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-16 04:45:20 +03:00

i18n stm32 driver

This commit is contained in:
Miguel Angel Mulero Martinez 2018-01-29 09:22:11 +01:00
parent fd0afd1456
commit 1de9efd590
3 changed files with 120 additions and 47 deletions

View file

@ -237,6 +237,78 @@
"usbDeviceUdevNotice": { "usbDeviceUdevNotice": {
"message": "Are <strong>udev rules</strong> installed correctly? See docs for instructions" "message": "Are <strong>udev rules</strong> installed correctly? See docs for instructions"
}, },
"stm32UsbDfuNotFound": {
"message": "USB DFU not found"
},
"stm32TimedOut": {
"message": "STM32 - timed out, programming: FAILED"
},
"stm32WrongResponse": {
"message": "STM32 Communication failed, wrong response, expected: $1 (0x$2) received: $3 (0x$4)"
},
"stm32ContactingBootloader": {
"message": "Contacting bootloader ..."
},
"stm32ContactingBootloaderFailed": {
"message": "Communication with bootloader failed"
},
"stm32ResponseBootloaderFailed": {
"message": "No response from the bootloader, programming: FAILED"
},
"stm32GlobalEraseExtended": {
"message": "Executing global chip erase (via extended erase) ..."
},
"stm32LocalEraseExtended": {
"message": "Executing local erase (via extended erase) ..."
},
"stm32GlobalErase": {
"message": "Executing global chip erase ..."
},
"stm32LocalErase": {
"message": "Executing local erase ..."
},
"stm32Erase": {
"message": "Erasing ..."
},
"stm32Flashing": {
"message": "Flashing ..."
},
"stm32Verifying": {
"message": "Verifying ..."
},
"stm32ProgrammingSuccessful": {
"message": "Programming: SUCCESSFUL"
},
"stm32ProgrammingFailed": {
"message": "Programming: FAILED"
},
"stm32AddressLoadFailed": {
"message": "Address load for option bytes sector failed. Very likely due to read protection."
},
"stm32AddressLoadSuccess": {
"message": "Address load for option bytes sector succeeded."
},
"stm32AddressLoadUnknown": {
"message": "Address load for option bytes sector failed with unknown error. Aborting."
},
"stm32NotReadProtected": {
"message": "Read protection not active"
},
"stm32ReadProtected": {
"message": "Board seems read protected. Unprotecting. Do not disconnect/unplug!"
},
"stm32UnprotectSuccessful": {
"message": "Unprotect successful."
},
"stm32UnprotectUnplug": {
"message": "ACTION REQUIRED: Unplug and re-connect flight controller in DFU mode to try flashing again!"
},
"stm32UnprotectFailed": {
"message": "Failed to unprotect board"
},
"stm32UnprotectInitFailed": {
"message": "Failed to initiate unprotect routine"
},
"noConfigurationReceived": { "noConfigurationReceived": {
"message": "No configuration received within <span class=\"message-negative\">10 seconds</span>, communication <span class=\"message-negative\">failed</span>" "message": "No configuration received within <span class=\"message-negative\">10 seconds</span>, communication <span class=\"message-negative\">failed</span>"

View file

@ -81,7 +81,7 @@ STM32_protocol.prototype.connect = function (port, baud, hex, options, callback)
self.initialize(); self.initialize();
} else { } else {
GUI.log('<span style="color: red">Failed</span> to open serial port'); GUI.log(i18n.getMessage('serialPortOpenFail'));
} }
}); });
} else { } else {
@ -113,7 +113,7 @@ STM32_protocol.prototype.connect = function (port, baud, hex, options, callback)
self.initialize(); self.initialize();
} else { } else {
GUI.connect_lock = false; GUI.connect_lock = false;
GUI.log('<span style="color: red">Failed</span> to open serial port'); GUI.log(i18n.getMessage('serialPortOpenFail'));
} }
}); });
} }
@ -125,7 +125,7 @@ STM32_protocol.prototype.connect = function (port, baud, hex, options, callback)
}); });
}); });
} else { } else {
GUI.log('<span style="color: red">Failed</span> to open serial port'); GUI.log(i18n.getMessage('serialPortOpenFail'));
} }
}); });
} }
@ -160,7 +160,7 @@ STM32_protocol.prototype.initialize = function () {
} else { } else {
console.log('STM32 - timed out, programming failed ...'); console.log('STM32 - timed out, programming failed ...');
$('span.progressLabel').text('STM32 - timed out, programming: FAILED'); $('span.progressLabel').text(i18n.getMessage('stm32TimedOut'));
self.progress_bar_e.addClass('invalid'); self.progress_bar_e.addClass('invalid');
// protocol got stuck, clear timer and disconnect // protocol got stuck, clear timer and disconnect
@ -243,7 +243,7 @@ STM32_protocol.prototype.verify_response = function (val, data) {
if (val != data[0]) { if (val != data[0]) {
var message = 'STM32 Communication failed, wrong response, expected: ' + val + ' (0x' + val.toString(16) + ') received: ' + data[0] + ' (0x' + data[0].toString(16) + ')'; var message = 'STM32 Communication failed, wrong response, expected: ' + val + ' (0x' + val.toString(16) + ') received: ' + data[0] + ' (0x' + data[0].toString(16) + ')';
console.error(message); console.error(message);
$('span.progressLabel').text(message); $('span.progressLabel').text(i18n.getMessage('stm32WrongResponse',[val, val.toString(16), data[0], data[0].toString(16)]));
self.progress_bar_e.addClass('invalid'); self.progress_bar_e.addClass('invalid');
// disconnect // disconnect
@ -356,7 +356,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
switch (step) { switch (step) {
case 1: case 1:
// initialize serial interface on the MCU side, auto baud rate settings // initialize serial interface on the MCU side, auto baud rate settings
$('span.progressLabel').text('Contacting bootloader ...'); $('span.progressLabel').text(i18n.getMessage('stm32ContactingBootloader'));
var send_counter = 0; var send_counter = 0;
GUI.interval_add('stm32_initialize_mcu', function () { // 200 ms interval (just in case mcu was already initialized), we need to break the 2 bytes command requirement GUI.interval_add('stm32_initialize_mcu', function () { // 200 ms interval (just in case mcu was already initialized), we need to break the 2 bytes command requirement
@ -368,7 +368,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
// proceed to next step // proceed to next step
self.upload_procedure(2); self.upload_procedure(2);
} else { } else {
$('span.progressLabel').text('Communication with bootloader failed'); $('span.progressLabel').text(i18n.getMessage('stm32ContactingBootloaderFailed'));
self.progress_bar_e.addClass('invalid'); self.progress_bar_e.addClass('invalid');
GUI.interval_remove('stm32_initialize_mcu'); GUI.interval_remove('stm32_initialize_mcu');
@ -382,7 +382,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
// stop retrying, its too late to get any response from MCU // stop retrying, its too late to get any response from MCU
console.log('STM32 - no response from bootloader, disconnecting'); console.log('STM32 - no response from bootloader, disconnecting');
$('span.progressLabel').text('No response from the bootloader, programming: FAILED'); $('span.progressLabel').text(i18n.getMessage('stm32ResponseBootloaderFailed'));
self.progress_bar_e.addClass('invalid'); self.progress_bar_e.addClass('invalid');
GUI.interval_remove('stm32_initialize_mcu'); GUI.interval_remove('stm32_initialize_mcu');
@ -435,7 +435,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
var message = 'Executing global chip erase (via extended erase)'; var message = 'Executing global chip erase (via extended erase)';
console.log(message); console.log(message);
$('span.progressLabel').text(message + ' ...'); $('span.progressLabel').text(i18n.getMessage('stm32GlobalEraseExtended'));
self.send([self.command.extended_erase, 0xBB], 1, function (reply) { self.send([self.command.extended_erase, 0xBB], 1, function (reply) {
if (self.verify_response(self.status.ACK, reply)) { if (self.verify_response(self.status.ACK, reply)) {
@ -451,7 +451,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
} else { } else {
var message = 'Executing local erase (via extended erase)'; var message = 'Executing local erase (via extended erase)';
console.log(message); console.log(message);
$('span.progressLabel').text(message + ' ...'); $('span.progressLabel').text(i18n.getMessage('stm32LocalEraseExtended'));
self.send([self.command.extended_erase, 0xBB], 1, function (reply) { self.send([self.command.extended_erase, 0xBB], 1, function (reply) {
if (self.verify_response(self.status.ACK, reply)) { if (self.verify_response(self.status.ACK, reply)) {
@ -503,7 +503,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
if (self.options.erase_chip) { if (self.options.erase_chip) {
var message = 'Executing global chip erase' ; var message = 'Executing global chip erase' ;
console.log(message); console.log(message);
$('span.progressLabel').text(message + ' ...'); $('span.progressLabel').text(i18n.getMessage('stm32GlobalErase'));
self.send([self.command.erase, 0xBC], 1, function (reply) { // 0x43 ^ 0xFF self.send([self.command.erase, 0xBC], 1, function (reply) { // 0x43 ^ 0xFF
if (self.verify_response(self.status.ACK, reply)) { if (self.verify_response(self.status.ACK, reply)) {
@ -519,7 +519,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
} else { } else {
var message = 'Executing local erase'; var message = 'Executing local erase';
console.log(message); console.log(message);
$('span.progressLabel').text(message + ' ...'); $('span.progressLabel').text(i18n.getMessage('stm32LocalErase'));
self.send([self.command.erase, 0xBC], 1, function (reply) { // 0x43 ^ 0xFF self.send([self.command.erase, 0xBC], 1, function (reply) { // 0x43 ^ 0xFF
if (self.verify_response(self.status.ACK, reply)) { if (self.verify_response(self.status.ACK, reply)) {
@ -552,7 +552,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
case 5: case 5:
// upload // upload
console.log('Writing data ...'); console.log('Writing data ...');
$('span.progressLabel').text('Flashing ...'); $('span.progressLabel').text(i18n.getMessage('stm32Flashing'));
var blocks = self.hex.data.length - 1, var blocks = self.hex.data.length - 1,
flashing_block = 0, flashing_block = 0,
@ -627,7 +627,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
case 6: case 6:
// verify // verify
console.log('Verifying data ...'); console.log('Verifying data ...');
$('span.progressLabel').text('Verifying ...'); $('span.progressLabel').text(i18n.getMessage('stm32Verifying'));
var blocks = self.hex.data.length - 1, var blocks = self.hex.data.length - 1,
reading_block = 0, reading_block = 0,
@ -699,7 +699,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
if (verify) { if (verify) {
console.log('Programming: SUCCESSFUL'); console.log('Programming: SUCCESSFUL');
$('span.progressLabel').text('Programming: SUCCESSFUL'); $('span.progressLabel').text(i18n.getMessage('stm32ProgrammingSuccessful'));
// update progress bar // update progress bar
self.progress_bar_e.addClass('valid'); self.progress_bar_e.addClass('valid');
@ -708,7 +708,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
self.upload_procedure(7); self.upload_procedure(7);
} else { } else {
console.log('Programming: FAILED'); console.log('Programming: FAILED');
$('span.progressLabel').text('Programming: FAILED'); $('span.progressLabel').text(i18n.getMessage('stm32ProgrammingFailed'));
// update progress bar // update progress bar
self.progress_bar_e.addClass('invalid'); self.progress_bar_e.addClass('invalid');

View file

@ -95,7 +95,7 @@ STM32DFU_protocol.prototype.connect = function (device, hex, options, callback)
self.openDevice(result[0]); self.openDevice(result[0]);
} else { } else {
console.log('USB DFU not found'); console.log('USB DFU not found');
GUI.log('USB DFU not found'); GUI.log(i18n.getMessage('stm32UsbDfuNotFound'));
} }
}); });
}; };
@ -541,8 +541,8 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
var unprotect = function() { var unprotect = function() {
console.log('Initiate read unprotect'); console.log('Initiate read unprotect');
GUI.log('Chip seems read protected. Initiating read unprotect'); GUI.log(i18n.getMessage('stm32ReadProtected'));
$('span.progressLabel').text('Board seems read protected. Unprotecting. Do not disconnect/unplug!'); $('span.progressLabel').text(i18n.getMessage('stm32ReadProtected'));
self.progress_bar_e.addClass('actionRequired'); self.progress_bar_e.addClass('actionRequired');
self.controlTransfer('out', self.request.DNLOAD, 0, 0, 0, [0x92], function () { // 0x92 initiates read unprotect self.controlTransfer('out', self.request.DNLOAD, 0, 0, 0, [0x92], function () { // 0x92 initiates read unprotect
@ -563,14 +563,15 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
self.controlTransfer('in', self.request.GETSTATUS, 0, 0, 6, 0, function (data, error) { // should stall/disconnect self.controlTransfer('in', self.request.GETSTATUS, 0, 0, 6, 0, function (data, error) { // should stall/disconnect
if(error) { // we encounter an error, but this is expected. should be a stall. if(error) { // we encounter an error, but this is expected. should be a stall.
console.log('Unprotect memory command ran successfully. Unplug flight controller. Connect again in DFU mode and try flashing again.'); console.log('Unprotect memory command ran successfully. Unplug flight controller. Connect again in DFU mode and try flashing again.');
GUI.log('Unprotect successful. ACTION REQUIRED: Unplug and re-connect flight controller in DFU mode to try flashing again!'); GUI.log(i18n.getMessage('stm32UnprotectSuccessful'));
$('span.progressLabel').text('ACTION REQUIRED: Unplug and re-connect flight controller in DFU mode to try flashing again!'); GUI.log(i18n.getMessage('stm32UnprotectUnplug'));
$('span.progressLabel').text(i18n.getMessage('stm32UnprotectUnplug'));
self.progress_bar_e.val(0); self.progress_bar_e.val(0);
self.progress_bar_e.addClass('actionRequired'); self.progress_bar_e.addClass('actionRequired');
} else { // unprotecting the flight controller did not work. It did not reboot. } else { // unprotecting the flight controller did not work. It did not reboot.
console.log('Failed to execute unprotect memory command'); console.log('Failed to execute unprotect memory command');
GUI.log('Failed to unprotect chip'); GUI.log(i18n.getMessage('stm32UnprotectFailed'));
$('span.progressLabel').text('Failed to unprotect board'); $('span.progressLabel').text(i18n.getMessage('stm32UnprotectFailed'));
self.progress_bar_e.addClass('invalid'); self.progress_bar_e.addClass('invalid');
console.log(data); console.log(data);
self.upload_procedure(99); self.upload_procedure(99);
@ -579,8 +580,8 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
}, incr); }, incr);
} else { } else {
console.log('Failed to initiate unprotect memory command'); console.log('Failed to initiate unprotect memory command');
GUI.log('Failed to initiate unprotect routine'); GUI.log(i18n.getMessage('stm32UnprotectInitFailed'));
$('span.progressLabel').text('Failed to initate unprotect'); $('span.progressLabel').text(i18n.getMessage('stm32UnprotectInitFailed'));
self.progress_bar_e.addClass('invalid'); self.progress_bar_e.addClass('invalid');
self.upload_procedure(99); self.upload_procedure(99);
} }
@ -601,7 +602,7 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
if (data[4] == self.state.dfuUPLOAD_IDLE && ob_data.length == self.chipInfo.option_bytes.total_size) { if (data[4] == self.state.dfuUPLOAD_IDLE && ob_data.length == self.chipInfo.option_bytes.total_size) {
console.log('Option bytes read successfully'); console.log('Option bytes read successfully');
console.log('Chip does not appear read protected'); console.log('Chip does not appear read protected');
GUI.log('Read protection not active'); GUI.log(i18n.getMessage('stm32NotReadProtected'));
// it is pretty safe to continue to erase flash // it is pretty safe to continue to erase flash
self.clearStatus(function() { self.clearStatus(function() {
self.upload_procedure(2); self.upload_procedure(2);
@ -645,22 +646,22 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
}); });
} }
var initReadOB = function (loadAddressResponse) { var initReadOB = function (loadAddressResponse) {
// contrary to what is in the docs. Address load should in theory work even if read protection is active // contrary to what is in the docs. Address load should in theory work even if read protection is active
// if address load fails with this specific error though, it is very likely bc of read protection // if address load fails with this specific error though, it is very likely bc of read protection
if(loadAddressResponse[4] == self.state.dfuERROR && loadAddressResponse[0] == self.status.errVENDOR) { if(loadAddressResponse[4] == self.state.dfuERROR && loadAddressResponse[0] == self.status.errVENDOR) {
// read protected // read protected
GUI.log('Address load for option bytes sector failed. Very likely due to read protection.'); GUI.log(i18n.getMessage('stm32AddressLoadFailed'));
self.clearStatus(unprotect); self.clearStatus(unprotect);
return; return;
} else if(loadAddressResponse[4] == self.state.dfuDNLOAD_IDLE) { } else if(loadAddressResponse[4] == self.state.dfuDNLOAD_IDLE) {
console.log('Address load for option bytes sector succeeded.'); console.log('Address load for option bytes sector succeeded.');
self.clearStatus(tryReadOB); self.clearStatus(tryReadOB);
} else { } else {
GUI.log('Address load for option bytes sector failed with unknown error. Aborting.'); GUI.log(i18n.getMessage('stm32AddressLoadUnknown'));
self.upload_procedure(99); self.upload_procedure(99);
} }
} }
self.clearStatus(function () { self.clearStatus(function () {
// load address fails if read protection is active unlike as stated in the docs // load address fails if read protection is active unlike as stated in the docs
@ -696,7 +697,7 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
} }
} }
} }
$('span.progressLabel').text('Erasing ...'); $('span.progressLabel').text(i18n.getMessage('stm32Erase'));
console.log('Executing local chip erase'); console.log('Executing local chip erase');
var page = 0; var page = 0;
@ -751,7 +752,7 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
// upload // upload
// we dont need to clear the state as we are already using DFU_DNLOAD // we dont need to clear the state as we are already using DFU_DNLOAD
console.log('Writing data ...'); console.log('Writing data ...');
$('span.progressLabel').text('Flashing ...'); $('span.progressLabel').text(i18n.getMessage('stm32Flashing'));
var blocks = self.hex.data.length - 1; var blocks = self.hex.data.length - 1;
var flashing_block = 0; var flashing_block = 0;
@ -823,7 +824,7 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
case 5: case 5:
// verify // verify
console.log('Verifying data ...'); console.log('Verifying data ...');
$('span.progressLabel').text('Verifying ...'); $('span.progressLabel').text(i18n.getMessage('stm32Verifying'));
var blocks = self.hex.data.length - 1; var blocks = self.hex.data.length - 1;
var reading_block = 0; var reading_block = 0;
@ -890,7 +891,7 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
if (verify) { if (verify) {
console.log('Programming: SUCCESSFUL'); console.log('Programming: SUCCESSFUL');
$('span.progressLabel').text('Programming: SUCCESSFUL'); $('span.progressLabel').text(i18n.getMessage('stm32ProgrammingSuccessful'));
// update progress bar // update progress bar
self.progress_bar_e.addClass('valid'); self.progress_bar_e.addClass('valid');
@ -899,7 +900,7 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
self.upload_procedure(6); self.upload_procedure(6);
} else { } else {
console.log('Programming: FAILED'); console.log('Programming: FAILED');
$('span.progressLabel').text('Programming: FAILED'); $('span.progressLabel').text(i18n.getMessage('stm32ProgrammingFailed'));
// update progress bar // update progress bar
self.progress_bar_e.addClass('invalid'); self.progress_bar_e.addClass('invalid');