Expose usb.sendUsbPacketsByCallback() and use it to vastly simplify blink-test-led.js and led-pwm.js

This commit is contained in:
László Monda
2017-01-15 03:22:13 +01:00
parent e87fbb3c11
commit 73f682193a
3 changed files with 56 additions and 41 deletions

View File

@@ -1,25 +1,15 @@
#!/usr/bin/env node #!/usr/bin/env node
'use strict';
let uhk = require('./uhk'); let uhk = require('./uhk');
let [endpointIn, endpointOut] = uhk.getUsbEndpoints();
var state = 1; let delayCycle = true;
let areLedsEnabled = true;
setInterval(function() { uhk.sendUsbPacketsByCallback(() => {
state = state ? 0 : 1 delayCycle = !delayCycle;
console.log('Sending ', state); if (delayCycle) {
endpointOut.transfer(new Buffer([uhk.usbCommands.setTestLed, state]), function(err) { return new uhk.DelayMs(500);
if (err) { } else {
console.error("USB error: %s", err); areLedsEnabled = !areLedsEnabled;
process.exit(1); return new Buffer([uhk.usbCommands.setTestLed, areLedsEnabled ? 1 : 0]);
} }
endpointIn.transfer(64, function(err2, receivedBuffer) { });
if (err2) {
console.error("USB error: %s", err2);
process.exit(2);
}
console.log('Received', uhk.bufferToString(receivedBuffer));
})
});
}, 500)

View File

@@ -1,23 +1,16 @@
#!/usr/bin/env node #!/usr/bin/env node
let uhk = require('./uhk'); let uhk = require('./uhk');
let [endpointIn, endpointOut] = uhk.getUsbEndpoints(); let delayCycle = true;
let brightnessPercent = 0; let areLedsEnabled = true;
setInterval(() => { uhk.sendUsbPacketsByCallback(() => {
brightnessPercent = brightnessPercent ? 0 : 100 delayCycle = !delayCycle;
console.log('Sending ', brightnessPercent); if (delayCycle) {
endpointOut.transfer(new Buffer([uhk.usbCommands.setLedPwm, brightnessPercent]), err => { return new uhk.DelayMs(500);
if (err) { } else {
console.error("USB error: %s", err); areLedsEnabled = !areLedsEnabled;
process.exit(1); let brightnessPercent = areLedsEnabled ? 100 : 0;
} return new Buffer([uhk.usbCommands.setLedPwm, brightnessPercent]);
endpointIn.transfer(64, (err2, receivedBuffer) => { }
if (err2) { });
console.error("USB error: %s", err2);
process.exit(2);
}
console.log('Received', uhk.bufferToString(receivedBuffer));
})
});
}, 500);

View File

@@ -35,7 +35,26 @@ function getUsbEndpoints() {
return [endpointIn, endpointOut]; return [endpointIn, endpointOut];
} }
function sendUsbPacket(packet) { class DelayMs {
constructor(ms) {
this.ms = ms;
}
}
function sendUsbPacketsByCallback(packetProvider) {
let packet = packetProvider()
if (!packet) {
process.exit(1);
}
if (packet instanceof DelayMs) {
setTimeout(() => {
sendUsbPacketsByCallback(packetProvider);
}, packet.ms);
return;
}
console.log('Sending: ', bufferToString(packet)); console.log('Sending: ', bufferToString(packet));
let [endpointIn, endpointOut] = usbEndpoints || getUsbEndpoints(); let [endpointIn, endpointOut] = usbEndpoints || getUsbEndpoints();
@@ -50,14 +69,27 @@ function sendUsbPacket(packet) {
process.exit(2); process.exit(2);
} }
console.log('Received:', bufferToString(receivedBuffer)); console.log('Received:', bufferToString(receivedBuffer));
sendUsbPacketsByCallback(packetProvider);
}) })
}) })
} }
function sendUsbPacket(packet) {
let isPacketSent = false;
sendUsbPacketsByCallback(() => {
if (!isPacketSent) {
isPacketSent = true;
return packet;
}
})
}
exports = module.exports = { exports = module.exports = {
DelayMs,
bufferToString, bufferToString,
getUsbEndpoints, getUsbEndpoints,
sendUsbPacket, sendUsbPacket,
sendUsbPacketsByCallback,
usbCommands: { usbCommands: {
getProperty: 0, getProperty: 0,
jumpToBootloader: 1, jumpToBootloader: 1,