From f8ba41fc60a64a98643a467ac24b51ce4c9917dc Mon Sep 17 00:00:00 2001 From: Nathan Kunicki Date: Mon, 5 Feb 2018 22:49:53 +0000 Subject: [PATCH] Added flash --- examples/rgb.js | 40 ++++++++++++++++------------------------ src/toypad.js | 46 ++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 54 insertions(+), 32 deletions(-) diff --git a/examples/rgb.js b/examples/rgb.js index 3d7ba7a..3143bed 100644 --- a/examples/rgb.js +++ b/examples/rgb.js @@ -8,6 +8,13 @@ PanelStates[ToyPad.Panel.RIGHT] = 0; PanelStates[ToyPad.Panel.CENTER] = 0; +const Colors = { + WYLDSTYLE: 0xff0000, + BATMAN: 0x00ff00, + GANDALF: 0x0000ff +} + + toyPad.on("connect", () => { console.log("ToyPad connected"); }); @@ -28,20 +35,16 @@ toyPad.on("add", (data) => { console.log(`Minifig added to panel ${data.panel} (Unknown signature - ${data.sig})`); } - switch (name) { - case "Wyldstyle": - PanelStates[data.panel] = PanelStates[data.panel] | 0xff0000; - break; - case "Batman": - PanelStates[data.panel] = PanelStates[data.panel] | 0x00ff00; - break; - case "Gandalf": - PanelStates[data.panel] = PanelStates[data.panel] | 0x0000ff; - break; - } + PanelStates[data.panel] = PanelStates[data.panel] | Colors[name.toUpperCase()]; - //console.log(PanelStates[data.panel]); toyPad.setColor(data.panel, PanelStates[data.panel]); + toyPad.flash(data.panel, Colors[name.toUpperCase()], 4); + + setTimeout(() => { + toyPad.getColor(data.panel, (blah) => { + console.log(blah); + }); + }, 3000); }); @@ -55,19 +58,8 @@ toyPad.on("remove", (data) => { console.log(`Minifig removed from panel ${data.panel} (Unknown signature - ${data.sig})`); } - switch (name) { - case "Wyldstyle": - PanelStates[data.panel] = PanelStates[data.panel] ^ 0xff0000; - break; - case "Batman": - PanelStates[data.panel] = PanelStates[data.panel] ^ 0x00ff00; - break; - case "Gandalf": - PanelStates[data.panel] = PanelStates[data.panel] ^ 0x0000ff; - break; - } + PanelStates[data.panel] = PanelStates[data.panel] ^ Colors[name.toUpperCase()]; - //console.log(PanelStates[data.panel]); toyPad.setColor(data.panel, PanelStates[data.panel]); }); diff --git a/src/toypad.js b/src/toypad.js index 6f37e97..db2d58e 100644 --- a/src/toypad.js +++ b/src/toypad.js @@ -38,7 +38,9 @@ const Panel = { const Request = { - COLOR: 0xc0 + GET_COLOR: 0xc1, + SET_COLOR: 0xc0, + FLASH: 0xc3 } @@ -133,7 +135,7 @@ class ToyPad extends EventEmitter { } } else if (type === Type.RESPONSE) { - //console.log(data); + } }); @@ -151,16 +153,41 @@ class ToyPad extends EventEmitter { } - setColor (panel, color) { + getColor (panel, callback) { let data = [ - this._requestId & 0xff, + this._requestId++ & 0xff, + (panel - 1) & 0xff + ]; + this._send([(data.length + 1) & 0xff, Request.GET_COLOR].concat(data), callback); + } + + + setColor (panel, color, callback) { + let data = [ + this._requestId++ & 0xff, panel & 0xff, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff ]; - this._requestId++; - this._write([0x55, (data.length + 1) & 0xff, Request.COLOR].concat(data)); + this._send([(data.length + 1) & 0xff, Request.SET_COLOR].concat(data), callback); + }; + + + flash (panel, color, count, options = {}, callback) { + options.offTicks = options.offTicks || 10; + options.onTicks = options.onTicks || 10; + let data = [ + this._requestId++ & 0xff, + panel & 0xff, + options.offTicks & 0xff, + options.onTicks & 0xff, + count & 0xff, + (color >> 16) & 0xff, + (color >> 8) & 0xff, + color & 0xff + ]; + this._send([(data.length + 1) & 0xff, Request.FLASH].concat(data), callback); }; @@ -177,8 +204,11 @@ class ToyPad extends EventEmitter { } - _write (data) { - this._device.write(ToyPad._pad(ToyPad._checksum(data))); + _send (data, callback) { + if (callback) { + this._callbacks[data[3]] = callback; + } + this._device.write(ToyPad._pad(ToyPad._checksum([Type.RESPONSE].concat(data)))); }