Эх сурвалжийг харах

Merge branch 'master' into develop

hathach 6 жил өмнө
parent
commit
991aaf0158

+ 4 - 0
examples/device/hid_generic_inout/boards.js

@@ -0,0 +1,4 @@
+module.exports = {
+	"Feather_nRF52840":[0X239A,0X8029],
+	"Metro_nRF52840":[0X239A,0X803F],
+}

+ 60 - 6
examples/device/hid_generic_inout/hid_test.js

@@ -1,17 +1,71 @@
+// 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 isWin = (os.platform() === 'win32');
 var devices = HID.devices();
-var deviceInfo = devices.find( function(d) {
-    var isNRF = d.vendorId===0Xcafe && d.productId===0X4004;
-    return isNRF;
-});
+
+// 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)});
+
+// Windows wants you to prepend a 0 to whatever you send
+if(isWin){
+	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 );
-	device.on("data", function(data) {console.log(data)});
 
+	// 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([0x00, 0x01, 0x01, 0x05, 0xff, 0xff]);
+		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){
+	return d.vendorId==board[0] && d.productId==board[1];
+}
+