Skip to content

Commit fbe5505

Browse files
authored
Merge pull request #3 from PTS93/master
Added node.js example which works on every OS
2 parents c3ad0f6 + 8420c4c commit fbe5505

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

Diff for: examples/HID/hid_generic_inout/hid_test.js

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// IMPORTANT: install dependency via 'npm i node-hid' in the same location as the script
2+
// 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
3+
4+
var HID = require('node-hid');
5+
var os = require('os')
6+
7+
var isWin = (os.platform() === 'win32');
8+
var devices = HID.devices();
9+
10+
// choose either of the following supported devices:
11+
// Metro_nRF52840, Feather_nRF52840
12+
13+
var deviceInfo = devices.find(Feather_nRF52840);
14+
var reportLen = 64;
15+
16+
var message = "Hello World!"
17+
18+
// Turn our string into an array of integers e.g. 'ascii codes', though charCodeAt spits out UTF-16
19+
// 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
20+
var messageBuffer = Array.from(message, function(c){return c.charCodeAt(0)});
21+
22+
// Windows wants you to prepend a 0 to whatever you send
23+
if(isWin){
24+
messageBuffer.unshift(0)
25+
}
26+
27+
// Some OSes expect that you always send a buffer that equals your report length
28+
// So lets fill up the rest of the buffer with zeros
29+
var paddingBuf = Array(reportLen-messageBuffer.length);
30+
paddingBuf.fill(0)
31+
messageBuffer = messageBuffer.concat(paddingBuf)
32+
33+
// check if we actually found a device and if so send our messageBuffer to it
34+
if( deviceInfo ) {
35+
console.log(deviceInfo)
36+
var device = new HID.HID( deviceInfo.path );
37+
38+
// register an event listener for data coming from the device
39+
device.on("data", function(data) {
40+
// Print what we get from the device
41+
console.log(data.toString('ascii'));
42+
});
43+
44+
// the same for any error that occur
45+
device.on("error", function(err) {console.log(err)});
46+
47+
// send our message to the device every 500ms
48+
setInterval(function () {
49+
device.write(messageBuffer);
50+
},500)
51+
}
52+
53+
54+
55+
56+
function Feather_nRF52840(d) {
57+
return isDevice(0X239A,0X8029,d)
58+
}
59+
60+
function Metro_nRF52840(d) {
61+
return isDevice(0X239A,0X803F,d)
62+
}
63+
64+
65+
function isDevice(vid,pid,d){
66+
return d.vendorId==vid && d.productId==pid;
67+
}

0 commit comments

Comments
 (0)