diff --git a/packages/usb/reenumerate.js b/packages/usb/reenumerate.js index 5f2173fd..10fc61df 100755 --- a/packages/usb/reenumerate.js +++ b/packages/usb/reenumerate.js @@ -1,63 +1,10 @@ #!/usr/bin/env node -const HID = require('node-hid'); -let uhk = require('./uhk'); -var program = require('commander'); - -program - .option('-dt, --polling-timeout ', 'Polling timeout (ms)') - .option('-bt, --bootloader-timeout ', 'Bootloader timeout (ms)') - .option('-f, --force', 'Force reenumeration') - .parse(process.argv); - -let pollingTimeoutMs = 10000; -const pollingIntervalMs = 100; -const bootloaderTimeoutMs = 5000; -let jumped = false; +const uhk = require('./uhk'); +const program = require('commander'); +program.parse(process.argv); const enumerationMode = program.args[0]; -const enumerationModeId = uhk.enumerationModes[enumerationMode]; - -if (enumerationModeId === undefined) { - const enumerationModes = Object.keys(uhk.enumerationModes).join(', '); - console.log(`Invalid enumeration mode '${enumerationMode}' is not one of: ${enumerationModes}`); - process.exit(1); -} - -function reenumerate(enumerationModeId, bootloaderTimeoutMs) { - return new Promise((resolve, reject) => { - console.log(`Trying to reenumerate as ${enumerationMode}...`); - const intervalId = setInterval(() => { - pollingTimeoutMs -= pollingIntervalMs; - - const foundDevice = HID.devices().find(device => - device.vendorId === uhk.vendorId && device.productId === uhk.enumerationModeIdToProductId[enumerationModeId]); - - if (foundDevice) { - console.log(`${enumerationMode} is up`); - resolve(); - clearInterval(intervalId); - return; - } - - if (pollingTimeoutMs <= 0) { - console.log(`Couldn't reenumerate as ${enumerationMode}`); - reject(); - clearInterval(intervalId); - return; - } - - let device = uhk.getUhkDevice(); - if (device && !jumped) { - console.log(`UHK found, reenumerating as ${enumerationMode}`); - let message = new Buffer([uhk.usbCommands.reenumerate, enumerationModeId, ...uhk.uint32ToArray(bootloaderTimeoutMs)]); - device.write(uhk.getTransferData(message)); - jumped = true; - } - - }, pollingIntervalMs); - }) -}; (async function() { - await reenumerate(enumerationModeId, bootloaderTimeoutMs); + await uhk.reenumerate(enumerationMode); })(); diff --git a/packages/usb/uhk.js b/packages/usb/uhk.js index 0dacb6fb..46c1a5e1 100644 --- a/packages/usb/uhk.js +++ b/packages/usb/uhk.js @@ -73,6 +73,58 @@ let eepromOperations = { write: 1, }; +// USB commands + +function reenumerate(enumerationMode) { + const bootloaderTimeoutMs = 5000; + const pollingIntervalMs = 100; + let pollingTimeoutMs = 10000; + + let jumped = false; + + return new Promise((resolve, reject) => { + const enumerationModeId = exports.enumerationModes[enumerationMode]; + + if (enumerationModeId === undefined) { + const enumerationModes = Object.keys(uhk.enumerationModes).join(', '); + console.log(`Invalid enumeration mode '${enumerationMode}' is not one of: ${enumerationModes}`); + reject(); + return; + } + + console.log(`Trying to reenumerate as ${enumerationMode}...`); + const intervalId = setInterval(() => { + pollingTimeoutMs -= pollingIntervalMs; + + const foundDevice = HID.devices().find(device => + device.vendorId === exports.vendorId && device.productId === exports.enumerationModeIdToProductId[enumerationModeId]); + + if (foundDevice) { + console.log(`${enumerationMode} is up`); + resolve(); + clearInterval(intervalId); + return; + } + + if (pollingTimeoutMs <= 0) { + console.log(`Couldn't reenumerate as ${enumerationMode}`); + reject(); + clearInterval(intervalId); + return; + } + + let device = exports.getUhkDevice(); + if (device && !jumped) { + console.log(`UHK found, reenumerating as ${enumerationMode}`); + let message = new Buffer([exports.usbCommands.reenumerate, enumerationModeId, ...uint32ToArray(bootloaderTimeoutMs)]); + device.write(getTransferData(message)); + jumped = true; + } + + }, pollingIntervalMs); + }) +}; + exports = module.exports = moduleExports = { bufferToString, getUint16, @@ -83,6 +135,7 @@ exports = module.exports = moduleExports = { getBootloaderDevice, getTransferData, checkModuleSlot, + reenumerate, usbCommands: { getDeviceProperty : 0x00, reenumerate : 0x01,