Extract uhk.writeUserConfig()
This commit is contained in:
@@ -276,6 +276,33 @@ async function updateFirmwares(firmwarePath) {
|
|||||||
await uhk.updateModuleFirmware(uhk.moduleSlotToI2cAddress.leftHalf, uhk.moduleSlotToId.leftHalf, `${firmwarePath}/modules/uhk60-left.bin`);
|
await uhk.updateModuleFirmware(uhk.moduleSlotToI2cAddress.leftHalf, uhk.moduleSlotToId.leftHalf, `${firmwarePath}/modules/uhk60-left.bin`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function writeUserConfig(device, configBuffer, isHardwareConfig) {
|
||||||
|
const chunkSize = 60;
|
||||||
|
let offset = 0;
|
||||||
|
let chunkSizeToRead;
|
||||||
|
let buffer = await uhk.writeDevice(device, [uhk.usbCommands.getDeviceProperty, uhk.devicePropertyIds.configSizes]);
|
||||||
|
const hardwareConfigMaxSize = buffer[1] + (buffer[2]<<8);
|
||||||
|
const userConfigMaxSize = buffer[3] + (buffer[4]<<8);
|
||||||
|
const configMaxSize = isHardwareConfig ? hardwareConfigMaxSize : userConfigMaxSize;
|
||||||
|
const configSize = Math.min(configMaxSize, configBuffer.length);
|
||||||
|
|
||||||
|
while (offset < configSize) {
|
||||||
|
const usbCommand = isHardwareConfig ? uhk.usbCommands.writeHardwareConfig : uhk.usbCommands.writeStagingUserConfig;
|
||||||
|
chunkSizeToRead = Math.min(chunkSize, configSize - offset);
|
||||||
|
|
||||||
|
if (chunkSizeToRead === 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer = [
|
||||||
|
...[usbCommand, chunkSizeToRead, offset & 0xff, offset >> 8],
|
||||||
|
...configBuffer.slice(offset, offset+chunkSizeToRead)
|
||||||
|
];
|
||||||
|
await uhk.writeDevice(device, buffer)
|
||||||
|
offset += chunkSizeToRead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uhk = exports = module.exports = moduleExports = {
|
uhk = exports = module.exports = moduleExports = {
|
||||||
bufferToString,
|
bufferToString,
|
||||||
getUint16,
|
getUint16,
|
||||||
@@ -297,6 +324,7 @@ uhk = exports = module.exports = moduleExports = {
|
|||||||
waitForKbootIdle,
|
waitForKbootIdle,
|
||||||
updateModuleFirmware,
|
updateModuleFirmware,
|
||||||
updateFirmwares,
|
updateFirmwares,
|
||||||
|
writeUserConfig,
|
||||||
usbCommands: {
|
usbCommands: {
|
||||||
getDeviceProperty : 0x00,
|
getDeviceProperty : 0x00,
|
||||||
reenumerate : 0x01,
|
reenumerate : 0x01,
|
||||||
|
|||||||
@@ -2,47 +2,25 @@
|
|||||||
const program = require('commander');
|
const program = require('commander');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const uhk = require('./uhk');
|
const uhk = require('./uhk');
|
||||||
const device = uhk.getUhkDevice();
|
|
||||||
require('shelljs/global');
|
|
||||||
|
|
||||||
program
|
|
||||||
.usage(`config.bin`)
|
|
||||||
.option('-h, --hardware-config', 'Write the hardware config instead of the user config')
|
|
||||||
.parse(process.argv);
|
|
||||||
|
|
||||||
if (program.args.length == 0) {
|
|
||||||
console.error('No binary config file specified.');
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const configBin = program.args[0];
|
|
||||||
const chunkSize = 60;
|
|
||||||
const isHardwareConfig = program.hardwareConfig;
|
|
||||||
const configTypeString = isHardwareConfig ? 'hardware' : 'user';
|
|
||||||
let offset = 0;
|
|
||||||
let configBuffer = fs.readFileSync(configBin);
|
|
||||||
let chunkSizeToRead;
|
|
||||||
|
|
||||||
(async function() {
|
(async function() {
|
||||||
let buffer = await uhk.writeDevice(device, [uhk.usbCommands.getDeviceProperty, uhk.devicePropertyIds.configSizes]);
|
const device = uhk.getUhkDevice();
|
||||||
const hardwareConfigMaxSize = buffer[1] + (buffer[2]<<8);
|
require('shelljs/global');
|
||||||
const userConfigMaxSize = buffer[3] + (buffer[4]<<8);
|
|
||||||
const configMaxSize = isHardwareConfig ? hardwareConfigMaxSize : userConfigMaxSize;
|
|
||||||
const configSize = Math.min(configMaxSize, configBuffer.length);
|
|
||||||
|
|
||||||
while (offset < configSize) {
|
program
|
||||||
const usbCommand = isHardwareConfig ? uhk.usbCommands.writeHardwareConfig : uhk.usbCommands.writeStagingUserConfig;
|
.usage(`config.bin`)
|
||||||
chunkSizeToRead = Math.min(chunkSize, configSize - offset);
|
.option('-h, --hardware-config', 'Write the hardware config instead of the user config')
|
||||||
|
.parse(process.argv);
|
||||||
|
|
||||||
if (chunkSizeToRead === 0) {
|
if (program.args.length == 0) {
|
||||||
break;
|
console.error('No binary config file specified.');
|
||||||
}
|
exit(1);
|
||||||
|
|
||||||
buffer = [
|
|
||||||
...[usbCommand, chunkSizeToRead, offset & 0xff, offset >> 8],
|
|
||||||
...configBuffer.slice(offset, offset+chunkSizeToRead)
|
|
||||||
];
|
|
||||||
await uhk.writeDevice(device, buffer)
|
|
||||||
offset += chunkSizeToRead;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const configBin = program.args[0];
|
||||||
|
const isHardwareConfig = program.hardwareConfig;
|
||||||
|
const configTypeString = isHardwareConfig ? 'hardware' : 'user';
|
||||||
|
let configBuffer = fs.readFileSync(configBin);
|
||||||
|
|
||||||
|
await uhk.writeUserConfig(device, configBuffer, isHardwareConfig);
|
||||||
})();
|
})();
|
||||||
Reference in New Issue
Block a user