diff --git a/usb/blink-test-led.js b/usb/blink-test-led.js index c45b222d..59268204 100755 --- a/usb/blink-test-led.js +++ b/usb/blink-test-led.js @@ -1,25 +1,15 @@ #!/usr/bin/env node -'use strict'; - let uhk = require('./uhk'); -let [endpointIn, endpointOut] = uhk.getUsbEndpoints(); -var state = 1; +let delayCycle = true; +let areLedsEnabled = true; -setInterval(function() { - state = state ? 0 : 1 - console.log('Sending ', state); - endpointOut.transfer(new Buffer([uhk.usbCommands.setTestLed, state]), function(err) { - if (err) { - console.error("USB error: %s", err); - process.exit(1); - } - endpointIn.transfer(64, function(err2, receivedBuffer) { - if (err2) { - console.error("USB error: %s", err2); - process.exit(2); - } - console.log('Received', uhk.bufferToString(receivedBuffer)); - }) - }); -}, 500) +uhk.sendUsbPacketsByCallback(() => { + delayCycle = !delayCycle; + if (delayCycle) { + return new uhk.DelayMs(500); + } else { + areLedsEnabled = !areLedsEnabled; + return new Buffer([uhk.usbCommands.setTestLed, areLedsEnabled ? 1 : 0]); + } +}); diff --git a/usb/led-pwm.js b/usb/led-pwm.js index 84c03cef..6bbd81ac 100755 --- a/usb/led-pwm.js +++ b/usb/led-pwm.js @@ -1,23 +1,16 @@ #!/usr/bin/env node let uhk = require('./uhk'); -let [endpointIn, endpointOut] = uhk.getUsbEndpoints(); -let brightnessPercent = 0; +let delayCycle = true; +let areLedsEnabled = true; -setInterval(() => { - brightnessPercent = brightnessPercent ? 0 : 100 - console.log('Sending ', brightnessPercent); - endpointOut.transfer(new Buffer([uhk.usbCommands.setLedPwm, brightnessPercent]), err => { - if (err) { - console.error("USB error: %s", err); - process.exit(1); - } - endpointIn.transfer(64, (err2, receivedBuffer) => { - if (err2) { - console.error("USB error: %s", err2); - process.exit(2); - } - console.log('Received', uhk.bufferToString(receivedBuffer)); - }) - }); -}, 500); +uhk.sendUsbPacketsByCallback(() => { + delayCycle = !delayCycle; + if (delayCycle) { + return new uhk.DelayMs(500); + } else { + areLedsEnabled = !areLedsEnabled; + let brightnessPercent = areLedsEnabled ? 100 : 0; + return new Buffer([uhk.usbCommands.setLedPwm, brightnessPercent]); + } +}); diff --git a/usb/uhk.js b/usb/uhk.js index 2c53c540..b25ab641 100755 --- a/usb/uhk.js +++ b/usb/uhk.js @@ -35,7 +35,26 @@ function getUsbEndpoints() { 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)); let [endpointIn, endpointOut] = usbEndpoints || getUsbEndpoints(); @@ -50,14 +69,27 @@ function sendUsbPacket(packet) { process.exit(2); } console.log('Received:', bufferToString(receivedBuffer)); + sendUsbPacketsByCallback(packetProvider); }) }) } +function sendUsbPacket(packet) { + let isPacketSent = false; + sendUsbPacketsByCallback(() => { + if (!isPacketSent) { + isPacketSent = true; + return packet; + } + }) +} + exports = module.exports = { + DelayMs, bufferToString, getUsbEndpoints, sendUsbPacket, + sendUsbPacketsByCallback, usbCommands: { getProperty: 0, jumpToBootloader: 1,