diff --git a/usb/led_pwm.js b/usb/led_pwm.js index 43641dee..84c03cef 100755 --- a/usb/led_pwm.js +++ b/usb/led_pwm.js @@ -1,14 +1,13 @@ #!/usr/bin/env node -let util = require('./util'); +let uhk = require('./uhk'); -let LED_PWM_COMMAND_ID = 10; -let [endpointIn, endpointOut] = util.getUsbEndpoints(); +let [endpointIn, endpointOut] = uhk.getUsbEndpoints(); let brightnessPercent = 0; setInterval(() => { brightnessPercent = brightnessPercent ? 0 : 100 console.log('Sending ', brightnessPercent); - endpointOut.transfer(new Buffer([LED_PWM_COMMAND_ID, brightnessPercent]), err => { + endpointOut.transfer(new Buffer([uhk.usbCommands.setLedPwm, brightnessPercent]), err => { if (err) { console.error("USB error: %s", err); process.exit(1); @@ -18,7 +17,7 @@ setInterval(() => { console.error("USB error: %s", err2); process.exit(2); } - console.log('Received', util.bufferToString(receivedBuffer)); + console.log('Received', uhk.bufferToString(receivedBuffer)); }) }); }, 500); diff --git a/usb/read-eeprom.js b/usb/read-eeprom.js index a6378af7..2466ea7d 100755 --- a/usb/read-eeprom.js +++ b/usb/read-eeprom.js @@ -1,19 +1,3 @@ #!/usr/bin/env node let uhk = require('./uhk'); -let [endpointIn, endpointOut] = uhk.getUsbEndpoints(); - -var payload = new Buffer([uhk.usbCommands.readEeprom, 63, 0x00, 0x00]); -console.log('Sending ', uhk.bufferToString(payload)); -endpointOut.transfer(payload, 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)); - }) -}); +uhk.sendUsbPacket(new Buffer([uhk.usbCommands.readEeprom, 63, 0x00, 0x00])) diff --git a/usb/uhk.js b/usb/uhk.js index 59e2c274..2c53c540 100755 --- a/usb/uhk.js +++ b/usb/uhk.js @@ -1,27 +1,63 @@ let usb = require('usb'); -exports = module.exports = { - getUsbEndpoints: () => { - let vid = 0x16d3; - let pid = 0x05ea; - - let device = usb.findByIds(vid, pid); - 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(); +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; } - usbInterface.claim(); + str += hex; + }; + return str; +} - let endpointIn = usbInterface.endpoints[0]; - let endpointOut = usbInterface.endpoints[1]; - return [endpointIn, endpointOut]; - }, +let usbEndpoints; +function getUsbEndpoints() { + let vid = 0x16d3; + let pid = 0x05ea; + + let device = usb.findByIds(vid, pid); + 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]; +} + +function sendUsbPacket(packet) { + 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); + } + endpointIn.transfer(64, function(err2, receivedBuffer) { + if (err2) { + console.error("USB error: %s", err2); + process.exit(2); + } + console.log('Received:', bufferToString(receivedBuffer)); + }) + }) +} + +exports = module.exports = { + bufferToString, + getUsbEndpoints, + sendUsbPacket, usbCommands: { getProperty: 0, jumpToBootloader: 1, @@ -35,16 +71,4 @@ exports = module.exports = { applyConfig: 9, setLedPwm: 10 }, - - 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; - } } diff --git a/usb/write-eeprom.js b/usb/write-eeprom.js index 7327c369..19c6e6bd 100755 --- a/usb/write-eeprom.js +++ b/usb/write-eeprom.js @@ -1,6 +1,5 @@ #!/usr/bin/env node let uhk = require('./uhk'); -let [endpointIn, endpointOut] = uhk.getUsbEndpoints(); var arg = process.argv[2] || ''; if (arg.length === 0) { @@ -8,18 +7,4 @@ if (arg.length === 0) { process.exit(1); } -var payload = Buffer.concat([new Buffer([uhk.usbCommands.writeEeprom, arg.length+2, 0x00, 0x00]), new Buffer(arg, 'utf8')]); -console.log('Sending ', uhk.bufferToString(payload)); -endpointOut.transfer(payload, 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)); - }) -}); +uhk.sendUsbPacket(Buffer.concat([new Buffer([uhk.usbCommands.writeEeprom, arg.length+2, 0x00, 0x00]), new Buffer(arg, 'utf8')]))