Files
agent/usb/pulse-leds.js
2016-09-27 17:11:42 +02:00

79 lines
1.9 KiB
JavaScript
Executable File

#!/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)