Extract reenumerate() from reenumerate.js to uhk.js
This commit is contained in:
@@ -1,63 +1,10 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
const HID = require('node-hid');
|
const uhk = require('./uhk');
|
||||||
let uhk = require('./uhk');
|
const program = require('commander');
|
||||||
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;
|
|
||||||
|
|
||||||
|
program.parse(process.argv);
|
||||||
const enumerationMode = program.args[0];
|
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() {
|
(async function() {
|
||||||
await reenumerate(enumerationModeId, bootloaderTimeoutMs);
|
await uhk.reenumerate(enumerationMode);
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -73,6 +73,58 @@ let eepromOperations = {
|
|||||||
write: 1,
|
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 = {
|
exports = module.exports = moduleExports = {
|
||||||
bufferToString,
|
bufferToString,
|
||||||
getUint16,
|
getUint16,
|
||||||
@@ -83,6 +135,7 @@ exports = module.exports = moduleExports = {
|
|||||||
getBootloaderDevice,
|
getBootloaderDevice,
|
||||||
getTransferData,
|
getTransferData,
|
||||||
checkModuleSlot,
|
checkModuleSlot,
|
||||||
|
reenumerate,
|
||||||
usbCommands: {
|
usbCommands: {
|
||||||
getDeviceProperty : 0x00,
|
getDeviceProperty : 0x00,
|
||||||
reenumerate : 0x01,
|
reenumerate : 0x01,
|
||||||
|
|||||||
Reference in New Issue
Block a user