| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- //
- // test-rawhid64.js -- demonstrate sending data to Teensy RawHID device
- // also demonstrates filtering on usagePage & usage
- //
- // For more details, see: https://www.pjrc.com/teensy/rawhid.html
- // and https://github.com/node-hid/node-hid/issues/165
- //
- //
- // Tod E. Kurt / github.com/todbot
- //
- var os = require('os');
- var HID = require('../');
- var devices = HID.devices();
- console.log("HID devices:",devices);
- // We must filter devices by vendorId, productId, usagePage, and usage
- // because Teensy RawHID sketch shows up as TWO devices to node-hid
- // Note this only works on Mac & Windows though as the underlying
- // hidapi C library doesn't support usagePage on libusb or hidraw
- var isTeensy = function(d) { return d.vendorId===0x16C0 && d.productId===0x0486;}
- var isRawHidUsage = function(d) {
- return ((d.usagePage===0xFFAB && d.usage===0x2000) || (d.usagePage===0xFFAB && d.usage===0x0200));
- }
- var device; // to be filled out below
- var deviceInfo
- if( os.platform() == 'linux' ) {
- var deviceList = devices.filter(function(d) { return isTeensy(d) });
- if( deviceList.length == 2 ) {
- deviceInfo = deviceList[0]
- device = new HID.HID( deviceInfo.path ); // normally first device
- }
- }
- else { // Mac & Windows
- var deviceInfo = devices.find( function(d) {
- return isTeensy(d) && isRawHidUsage(d);
- });
- if( deviceInfo ) {
- device = new HID.HID( deviceInfo.path );
- }
- }
- console.log("deviceInfo: ", deviceInfo);
- if( !device ) {
- console.log(devices);
- console.log("Could not find RawHID device in device list");
- process.exit(1);
- }
- console.log("Attaching receive 'data' handler");
- device.on('data', function(data) {
- console.log("got data:", data.toString('hex') );
- });
- device.on('error', function(err) {
- console.log("error:",err);
- });
- var messageA = [];
- for(var i=0; i < 64; i++) {
- messageA[i] = 120 + i;
- }
- // for Windows, must prepend report number, even when there isn't one
- if( os.platform() == 'win32' ) {
- messageA.unshift( 0x00 );
- }
- console.log("Sending messages to Teensy, watch Teensy Serial Montor for data");
- console.log('Sending message A: ', JSON.stringify(messageA))
- var numsentA = device.write(messageA);
- console.log('messageA len:', messageA.length, 'actual sent len:', numsentA);
- var messageB = [];
- for(var i=0; i < 64; i++) {
- messageB[i] = 1 + i;
- }
- // for Windows, must prepend report number, even when there isn't one
- if( os.platform() == 'win32' ) {
- messageB.unshift( 0x00 );
- }
- console.log('Sending message B: ', JSON.stringify(messageB))
- var numsentB = device.write(messageB);
- console.log('messageB len:', messageB.length, 'actual sent len:', numsentB);
- console.log("Waiting 10 seconds for data from Teensy");
- setTimeout( function() {
- console.log("Done");
- device.close();
- }, 10000);
|