Extract reenumerate() from reenumerate.js to uhk.js
This commit is contained in:
@@ -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 <n>', 'Polling timeout (ms)')
|
||||
.option('-bt, --bootloader-timeout <n>', '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);
|
||||
})();
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user