79 lines
1.9 KiB
JavaScript
Executable File
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)
|