| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // IMPORTANT: install the dependency via 'npm i node-hid' in the same location as the script
- // If the install fails on windows you may need to run 'npm i -g windows-build-tools' first to be able to compile native code needed for this library
- var HID = require('node-hid');
- var os = require('os')
- // list of supported devices
- var boards = require('./boards.js')
- var devices = HID.devices();
- // this will choose any device found in the boards.js file
- var deviceInfo = devices.find(anySupportedBoard);
- var reportLen = 64;
- var message = "Hello World!"
- // Turn our string into an array of integers e.g. 'ascii codes', though charCodeAt spits out UTF-16
- // This means if you have characters in your string that are not Latin-1 you will have to add additional logic for character codes above 255
- var messageBuffer = Array.from(message, function(c){return c.charCodeAt(0)});
- // HIDAPI requires us to prepend a 0 for single hid report as dummy reportID
- messageBuffer.unshift(0)
- // Some OSes expect that you always send a buffer that equals your report length
- // So lets fill up the rest of the buffer with zeros
- var paddingBuf = Array(reportLen-messageBuffer.length);
- paddingBuf.fill(0)
- messageBuffer = messageBuffer.concat(paddingBuf)
- // check if we actually found a device and if so send our messageBuffer to it
- if( deviceInfo ) {
- console.log(deviceInfo)
- var device = new HID.HID( deviceInfo.path );
- // register an event listener for data coming from the device
- device.on("data", function(data) {
- // Print what we get from the device
- console.log(data.toString('ascii'));
- });
- // the same for any error that occur
- device.on("error", function(err) {console.log(err)});
- // send our message to the device every 500ms
- setInterval(function () {
- device.write(messageBuffer);
- },500)
- }
- function anySupportedBoard(d) {
-
- for (var key in boards) {
- if (boards.hasOwnProperty(key)) {
- if (isDevice(boards[key],d)) {
- console.log("Found " + d.product);
- return true;
- }
- }
- }
- return false;
- }
- function isDevice(board,d){
- // product id 0xff is matches all
- return d.vendorId==board[0] && (d.productId==board[1] || board[1] == 0xFFFF);
- }
|