Files
agent/packages/usb/write-hca.js
2017-12-11 20:39:29 +01:00

50 lines
1.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
const {HardwareConfiguration, UhkBuffer} = require('uhk-common');
const {EepromTransfer, getTransferBuffers, UhkHidDevice, UsbCommand} = require('uhk-usb');
const Logger = require('./logger');
if (process.argv.length < 2) {
console.log(`use: write-hca {iso|ansi}`);
process.exit(1);
}
const layout = process.argv[2];
if (layout !== 'iso' && layout !== 'ansi') {
console.log('Invalid layout. Layout should be either iso or ansi');
process.exit(1);
}
const hardwareConfig = new HardwareConfiguration();
hardwareConfig.signature = 'UHK';
hardwareConfig.majorVersion = 1;
hardwareConfig.minorVersion = 0;
hardwareConfig.patchVersion = 0;
hardwareConfig.brandId = 0;
hardwareConfig.deviceId = 1;
hardwareConfig.uniqueId = Math.floor(2**32 * Math.random());
hardwareConfig.isVendorModeOn = false;
hardwareConfig.isIso = layout === 'iso';
const logger = new Logger();
async function writeHca() {
const device = new UhkHidDevice(logger);
const hardwareBuffer = new UhkBuffer();
hardwareConfig.toBinary(hardwareBuffer);
const buffer = hardwareBuffer.getBufferContent();
const fragments = getTransferBuffers(UsbCommand.WriteHardwareConfig, buffer);
logger.debug('USB[T]: Write hardware configuration to keyboard');
for (const fragment of fragments) {
await device.write(fragment);
}
logger.debug('USB[T]: Write hardware configuration to EEPROM');
await device.writeConfigToEeprom(EepromTransfer.WriteHardwareConfig);
}
writeHca()
.catch((err)=>{
console.error(err);
});