diff --git a/packages/usb/uhk.js b/packages/usb/uhk.js index 255f181d..10309fd4 100644 --- a/packages/usb/uhk.js +++ b/packages/usb/uhk.js @@ -233,6 +233,32 @@ async function waitForKbootIdle(device) { }); } +async function updateModuleFirmware(i2cAddress, moduleSlotId, firmwareImage) { + const usbDir = `${__dirname}`; + const blhostUsb = uhk.getBlhostCmd(uhk.enumerationNameToProductId.buspal); + const blhostBuspal = `${blhostUsb} --buspal i2c,${i2cAddress}`; + + config.verbose = true; + let device = uhk.getUhkDevice(); + await uhk.sendKbootCommandToModule(device, uhk.kbootCommands.ping, i2cAddress); + await uhk.jumpToModuleBootloader(device, moduleSlotId); + await uhk.waitForKbootIdle(device); + device.close(); + + await uhk.reenumerate('buspal'); + uhk.execRetry(`${blhostBuspal} get-property 1`); + exec(`${blhostBuspal} flash-erase-all-unsecure`); + exec(`${blhostBuspal} write-memory 0x0 ${firmwareImage}`); + exec(`${blhostUsb} reset`); + + await uhk.reenumerate('normalKeyboard'); + device = uhk.getUhkDevice(); + await uhk.sendKbootCommandToModule(device, uhk.kbootCommands.reset, i2cAddress); + await uhk.sendKbootCommandToModule(device, uhk.kbootCommands.idle, i2cAddress); + config.verbose = false; + echo('Firmware updated successfully.'); +}; + uhk = exports = module.exports = moduleExports = { bufferToString, getUint16, @@ -251,6 +277,7 @@ uhk = exports = module.exports = moduleExports = { sendKbootCommandToModule, jumpToModuleBootloader, waitForKbootIdle, + updateModuleFirmware, usbCommands: { getDeviceProperty : 0x00, reenumerate : 0x01, diff --git a/packages/usb/update-module-firmware.js b/packages/usb/update-module-firmware.js index a1e9ac8c..012113ef 100755 --- a/packages/usb/update-module-firmware.js +++ b/packages/usb/update-module-firmware.js @@ -17,28 +17,6 @@ const i2cAddress = uhk.checkModuleSlot(moduleSlot, uhk.moduleSlotToI2cAddress); const firmwareImage = program.args[1]; uhk.checkFirmwareImage(firmwareImage, extension); -const usbDir = `${__dirname}`; -const blhostUsb = uhk.getBlhostCmd(uhk.enumerationNameToProductId.buspal); -const blhostBuspal = `${blhostUsb} --buspal i2c,${i2cAddress}`; - (async function() { - config.verbose = true; - let device = uhk.getUhkDevice(); - await uhk.sendKbootCommandToModule(device, uhk.kbootCommands.ping, i2cAddress); - await uhk.jumpToModuleBootloader(device, moduleSlotId); - await uhk.waitForKbootIdle(device); - device.close(); - - await uhk.reenumerate('buspal'); - uhk.execRetry(`${blhostBuspal} get-property 1`); - exec(`${blhostBuspal} flash-erase-all-unsecure`); - exec(`${blhostBuspal} write-memory 0x0 ${firmwareImage}`); - exec(`${blhostUsb} reset`); - - await uhk.reenumerate('normalKeyboard'); - device = uhk.getUhkDevice(); - await uhk.sendKbootCommandToModule(device, uhk.kbootCommands.reset, i2cAddress); - await uhk.sendKbootCommandToModule(device, uhk.kbootCommands.idle, i2cAddress); - config.verbose = false; - echo('Firmware updated successfully.'); + await uhk.updateModuleFirmware(i2cAddress, moduleSlotId, firmwareImage); })();