diff --git a/usb/pulse-leds.js b/usb/pulse-leds.js new file mode 100755 index 00000000..038a47f4 --- /dev/null +++ b/usb/pulse-leds.js @@ -0,0 +1,78 @@ +#!/usr/bin/env node +'use strict'; + +var usb = require('usb'); +var util = require('./util'); + +var vid = 0x16d3; +var pid = 0x05ea; +var ledMatrixSize = 144; +var ledCountToUpdatePerCommand = ledMatrixSize / 3; +var writeLedDriverCommandId = 3; +var leftLedDriverAddress = 0b1110100; +var rightLedDriverAddress = 0b1110111; + +var device = usb.findByIds(vid, pid); +device.open(); + +var usbInterface = device.interface(0); +if (usbInterface.isKernelDriverActive()) { + usbInterface.detachKernelDriver(); +} +usbInterface.claim(); + +var endpointIn = usbInterface.endpoints[0]; +var endpointOut = usbInterface.endpoints[1]; + +var state = 1; + +var ledsLeft = new Buffer(ledMatrixSize); +var ledsRight = new Buffer(ledMatrixSize); + +var ledIndex = 0; +var matrixId = 0; + +function updateLeds() { + console.log('update') + endpointOut.transfer(Buffer.concat([ + new Buffer([ + writeLedDriverCommandId, + matrixId ? rightLedDriverAddress : leftLedDriverAddress, + ledCountToUpdatePerCommand, + 0x24 + ledIndex + ]), + (matrixId ? ledsRight : ledsLeft).slice(ledIndex, ledCountToUpdatePerCommand) + ]), function(err) { + if (err) { + console.error("USB error: %s", err); + process.exit(1); + } + console.log('update success') + endpointIn.transfer(64, function(err2, receivedBuffer) { + if (err2) { + console.error("USB error: %s", err2); + process.exit(2); + } + console.log('Received', util.bufferToString(receivedBuffer)); + + ledIndex += ledCountToUpdatePerCommand; + if (ledIndex >= ledMatrixSize) { + ledIndex = 0; + } + matrixId = matrixId ? 0 : 1; + + updateLeds(); + }) + }); +} + +updateLeds(); +var i = 0; +setInterval(function() { + console.log('iter') + ledsLeft.fill(0) + ledsLeft[i] = 0xff; + if (++i >= ledMatrixSize) { + i = 0; + } +}, 100)