Files
agent/packages/usb/uhk.js
Róbert Kiss 0f558e4132 refactore: create feature modules (#387)
* add @angular/cli to the project

* increase nodejs version -> 8.2.1

* add lerna

* merge web and shared module

* move electron module into packages as uhk-agent

Electron agent functionality is not working

* delete symlinker

* convert private properties to public of component if used in html

* revert uhk-message.component

* fix component path

* fix the correct name of the uhk-message.component.scss

* building web and electron module

* delete uhk-renderer package

* handle device connect disconnect state

* add privilege detection

* fix set privilege functionality

* turn back download keymap functionality

* add bootstrap, select2 js and fix null pointer exception

* turn back upload data to keyboard

* fix send keymap

* fix test-serializer

* add missing package.json

* merging

* fix appveyor build

* fix linting

* turn back electron storage service

* commit the missing electron-datastorage-repository

* update node to 8.3.0 in .nvmrc and log node version in appveyor build

* set exact version number in appveyor build

* vertical align privilege and missing device components

* set back node version to 8 in appveyor

* move node-usb dependency from usb dir to root

maybe it is fix the appveyor build

* revert usb to root

* fix electron builder script

* fix electron builder script

* turn off electron devtools

* remove CTRL+U functionality

* fix CTRL+o

* fix lint error

* turnoff store freeze

* start process when got `Error: EPERM: operation not permitted` error

* move files from root usb dir -> packages/usb
2017-08-19 20:02:17 +02:00

156 lines
3.8 KiB
JavaScript
Executable File

let usb = require('usb');
let receiveCallback;
function bufferToString(buffer) {
let str = '';
for (let i = 0; i < buffer.length; i++) {
let hex = buffer[i].toString(16) + ' ';
if (hex.length <= 2) {
hex = '0' + hex;
}
str += hex;
};
return str;
}
let usbEndpoints;
function getUhkDevice() {
return usb.findByIds(0x1d50, 0x6122);
}
function getBootloaderDevice() {
return usb.findByIds(0x1d50, 0x6120);
}
function getUsbEndpoints() {
let device = getUhkDevice();
device = getUhkDevice();
device.open();
let usbInterface = device.interface(0);
// https://github.com/tessel/node-usb/issues/147
// The function 'isKernelDriverActive' is not available on Windows and not even needed.
if (process.platform !== 'win32' && usbInterface.isKernelDriverActive()) {
usbInterface.detachKernelDriver();
}
usbInterface.claim();
let endpointIn = usbInterface.endpoints[0];
let endpointOut = usbInterface.endpoints[1];
return [endpointIn, endpointOut];
}
class DelayMs {
constructor(ms) {
this.ms = ms;
}
}
function registerReceiveCallback(receiveCallbackParam) {
receiveCallback = receiveCallbackParam;
}
function sendUsbPacketsByCallback(packetProvider, options={}) {
let packet = packetProvider()
if (packet instanceof DelayMs) {
setTimeout(() => {
sendUsbPacketsByCallback(packetProvider);
}, packet.ms);
return;
}
if (!(packet instanceof Buffer)) {
return;
}
if (!moduleExports.silent) {
console.log('Sending: ', bufferToString(packet));
}
let [endpointIn, endpointOut] = usbEndpoints || getUsbEndpoints();
endpointOut.transfer(packet, function(err) {
if (err) {
console.error("USB error: %s", err);
process.exit(1);
}
if (options.noReceive) {
sendUsbPacketsByCallback(packetProvider);
} else {
endpointIn.transfer(64, function(err2, receivedBuffer) {
if (err2) {
console.error("USB error: %s", err2);
process.exit(2);
}
if (!moduleExports.silent) {
console.log('Received:', bufferToString(receivedBuffer));
}
(receiveCallback || (()=>{}))(receivedBuffer);
sendUsbPacketsByCallback(packetProvider);
})
}
})
}
function sendUsbPacket(packet, options={}) {
sendUsbPackets([packet], options);
}
function sendUsbPackets(packets, options={}) {
sendUsbPacketsByCallback(() => {
return packets.shift();
}, options)
}
exports = module.exports = moduleExports = {
DelayMs,
bufferToString,
getUhkDevice,
getBootloaderDevice,
getUsbEndpoints,
registerReceiveCallback,
sendUsbPacket,
sendUsbPackets,
sendUsbPacketsByCallback,
usbCommands: {
getProperty: 0,
jumpToBootloader: 1,
setTestLed: 2,
writeLedDriver: 3,
readLedDriver: 4,
writeEeprom: 5,
readEeprom: 6,
readMergeSensor: 7,
writeUserConfig: 8,
applyConfig: 9,
setLedPwm: 10,
readAdc: 11,
launchEepromTransfer: 12,
readHardwareConfig: 13,
writeHardwareConfig: 14,
readUserConfig: 15,
getKeyboardState: 16,
readDebugInfo: 17,
},
systemPropertyIds: {
usbProtocolVersion: 0,
bridgeProtocolVersion: 1,
dataModelVersion: 2,
firmwareVersion: 3,
hardwareConfigSize: 4,
userConfigSize: 5,
},
eepromTransfer: {
readHardwareConfig: 0,
writeHardwareConfig: 1,
readUserConfig: 2,
writeUserConfig: 3,
},
leftLedDriverAddress: 0b1110100,
rightLedDriverAddress: 0b1110111
}