test-blink1.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * Simple demostration of sendFeatureReport
  3. * for a blink(1) USB LED by ThingM http://blink1.thingm.com/
  4. */
  5. 'use strict';
  6. var HID = require('../');
  7. var VENDOR_ID = 0x27B8;
  8. var PRODUCT_ID = 0x01ED;
  9. var REPORT_ID = 1;
  10. var REPORT_LENGTH = 9;
  11. var serial_number = process.argv[2];
  12. var devices_found = HID.devices( VENDOR_ID, PRODUCT_ID );
  13. if( devices_found.length === 0 ) {
  14. console.log("no blink(1) devices found");
  15. process.exit(0);
  16. }
  17. console.log("blink(1) devices found:", devices_found,'\n');
  18. var hidDevice;
  19. try {
  20. if( serial_number ) {
  21. console.log("opening serial number "+serial_number);
  22. hidDevice = new HID.HID( VENDOR_ID, PRODUCT_ID, serial_number );
  23. } else {
  24. console.log("opening first device");
  25. hidDevice = new HID.HID( VENDOR_ID, PRODUCT_ID );
  26. }
  27. } catch(err) {
  28. console.log(err);
  29. process.exit(1);
  30. }
  31. var deviceInfo = hidDevice.getDeviceInfo();
  32. console.log("deviceInfo.manufacturer:", deviceInfo.manufacturer);
  33. console.log("deviceInfo.product:", deviceInfo.product);
  34. console.log("deviceInfo.serialNumber:", deviceInfo.serialNumber);
  35. // shamelessly stolen from node-blink1
  36. var blink1_sendCommand = function( /* command [, args ...]*/ ) {
  37. var featureReport = [REPORT_ID, 0, 0, 0, 0, 0, 0, 0, 0];
  38. featureReport[1] = arguments[0].charCodeAt(0);
  39. for (var i = 1; i < arguments.length; i++) {
  40. featureReport[i + 1] = arguments[i];
  41. }
  42. var rc = hidDevice.sendFeatureReport(featureReport);
  43. console.log("report sent:", featureReport);
  44. console.log("sent size:",featureReport.length," actual size:", rc);
  45. };
  46. var blink1_readResponse = function(callback) {
  47. callback.apply(null, [hidDevice.getFeatureReport(REPORT_ID, REPORT_LENGTH)]);
  48. };
  49. var blink1_getVersion = function(callback) {
  50. blink1_sendCommand('v');
  51. blink1_readResponse(function(response) {
  52. var version = String.fromCharCode(response[3]) + '.' + String.fromCharCode(response[4]);
  53. callback(version);
  54. });
  55. };
  56. var blink1_fadeToColor = function( fadeMillis, r,g,b, ledn ) {
  57. var dms = fadeMillis / 10;
  58. blink1_sendCommand( 'c', r,g,b, dms>>8, dms%0xff, ledn );
  59. };
  60. blink1_getVersion( function(version) {
  61. console.log("blink(1) version: ", version);
  62. });
  63. setTimeout( function() {
  64. console.log("Setting blink(1) to #00FF33 over 300 millisecs");
  65. blink1_fadeToColor( 300, 0x00,0xFF,0x33, 0);
  66. }, 100);
  67. setTimeout( function() {
  68. console.log("Setting blink(1) to #FF6633 over 700 millisecs");
  69. blink1_fadeToColor( 700, 0xff,0x66,0x00, 0);
  70. }, 1000);
  71. setTimeout( function() {
  72. console.log("Setting blink(1) to #000000 over 1000 millisecs, and closing");
  73. blink1_fadeToColor( 1000, 0x00,0x00,0x00, 0);
  74. hidDevice.close();
  75. }, 2000 );