/** * Copyright 2013 IBM Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. **/ module.exports = function(RED) { "use strict"; var HID = require('node-hid'); var device; var node; function DigiRGBNode(n) { RED.nodes.createNode(this,n); node=this; var devices = HID.devices(0x16c0,0x05df); for (var i=0; i< devices.length; i++) { if (devices[i].product == 'DigiUSB') { path = devices[i].path; node.log("found: " + path); try { device = new HID.HID(devices[i].path); break; } catch (e) { node.log(e) } } } var p1 = /^\#[A-Fa-f0-9]{6}$/ var p2 = /[0-9]+,[0-9]+,[0-9]+/ if (device) { this.on("input", function(msg) { if (msg != null) { if (p1.test(msg.payload)) { var r = parseInt(msg.payload.slice(1,3),16); var g = parseInt(msg.payload.slice(3,5),16); var b = parseInt(msg.payload.slice(5),16); device.sendFeatureReport([115,r,g,b]); } else if (p2.test(msg.payload)) { var args = msg.payload.split(','); if (args.length == 3) { device.sendFeatureReport([115,parseInt(args[0]),parseInt(args[1]),parseInt(args[2])]); } } else { node.warn("incompatable input - " + msg.payload); } } }); } else { node.warn("no digispark RGB found"); } this.on('close', function() { if (device) { device.close(); } }); } RED.nodes.registerType("digiRGB",DigiRGBNode); }