From 976e402445ac7a65cf4067c26032dc8c1d655d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Sun, 29 Oct 2017 17:17:12 +0100 Subject: [PATCH] Make update-slave-firmware.js extremely resilient (not a single failure out of 100 updates). Add shared.js --- scripts/shared.js | 24 ++++++++++++++++++++++++ scripts/update-slave-firmware.js | 8 ++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 scripts/shared.js diff --git a/scripts/shared.js b/scripts/shared.js new file mode 100644 index 0000000..6387d12 --- /dev/null +++ b/scripts/shared.js @@ -0,0 +1,24 @@ +require('shelljs/global'); + +function execRetry(command) { + let firstRun = true; + let remainingRetries = 3; + let code; + do { + if (!firstRun) { + console.log(`Retrying ${command}`) + } + config.fatal = !remainingRetries; + code = exec(command).code; + config.fatal = true; + firstRun = false; + } while(code && --remainingRetries); +} + +const exp = { + execRetry +} + +Object.keys(exp).forEach(function (cmd) { + global[cmd] = exp[cmd]; +}); diff --git a/scripts/update-slave-firmware.js b/scripts/update-slave-firmware.js index 0fbf455..a97fcba 100755 --- a/scripts/update-slave-firmware.js +++ b/scripts/update-slave-firmware.js @@ -1,6 +1,7 @@ #!/usr/bin/env node const program = require('commander'); require('shelljs/global'); +require('./shared') config.fatal = true; @@ -53,9 +54,12 @@ config.verbose = true; exec(`${usbDir}/send-kboot-command-to-slave.js ping 0x10`); exec(`${usbDir}/jump-to-slave-bootloader.js`); exec(`${usbDir}/reenumerate.js buspal`); -exec(`${blhostBuspal} get-property 1`); +execRetry(`${blhostBuspal} get-property 1`); exec(`${blhostBuspal} flash-erase-all-unsecure`); exec(`${blhostBuspal} write-memory 0x0 ${firmwareImage}`); exec(`${blhostUsb} reset`); exec(`${usbDir}/reenumerate.js normalKeyboard`); -exec(`${usbDir}/send-kboot-command-to-slave.js reset 0x10`); +execRetry(`${usbDir}/send-kboot-command-to-slave.js reset 0x10`); + +config.verbose = false; +echo('Firmware updated successfully');