diff --git a/packages/usb/factory-update.js b/packages/usb/factory-update.js new file mode 100755 index 00000000..880d0f8d --- /dev/null +++ b/packages/usb/factory-update.js @@ -0,0 +1,48 @@ +#!/usr/bin/env node +const fs = require('fs'); +const program = require('commander'); +const tmp = require('tmp'); +const decompress = require('decompress'); +const decompressTarbz = require('decompress-tarbz2'); +const uhk = require('./uhk') +require('shelljs/global'); + +(async function() { + try { + config.fatal = true; + + program + .usage(`firmwarePath`) + .option('-u, --overwrite-user-config', 'Overwrite the user configuration with the one that is bundled with the firmware') + .parse(process.argv); + + if (program.args.length == 0) { + console.error('No firmware path specified.'); + exit(1); + } + + let firmwarePath = program.args[0]; + + // If a tarball is specified then extract it and override firmwarePath with the target directory name. + if (test('-f', firmwarePath)) { + const tmpObj = tmp.dirSync(); + await decompress(firmwarePath, tmpObj.name, {plugins: [decompressTarbz()]}); + firmwarePath = tmpObj.name; + } + config.verbose = true; + await uhk.updateFirmwares(firmwarePath); + + if (program.overwriteUserConfig) { + const device = uhk.getUhkDevice(); + const configBuffer = fs.readFileSync(`${firmwarePath}/devices/uhk60-right/config.bin`); + await uhk.writeConfig(device, configBuffer, false); + await uhk.applyConfig(device); + await uhk.launchEepromTransfer(device, uhk.eepromOperations.write, uhk.eepromTransfer.writeUserConfig); + } + + config.verbose = false; + } catch (exception) { + console.error(exception.message); + exit(1); + } +})();