Made betterer
This commit is contained in:
parent
320d8d73b1
commit
c4969214e5
28
Wirefile
28
Wirefile
@ -1,28 +0,0 @@
|
||||
{
|
||||
"name": "Lego Dimensions",
|
||||
"description": "Node.js and Wirething module for interacting with the Lego Dimensions ToyPad",
|
||||
"author": "Nathan Kunicki <me@nathankunicki.com>",
|
||||
"main": "./index.js",
|
||||
"devices": [{
|
||||
"name": "ToyPad",
|
||||
"type": "toypad",
|
||||
"outputs": [{
|
||||
"name": "Add",
|
||||
"event": "add",
|
||||
"params": [{
|
||||
"name": "Decoded Payload",
|
||||
"param": "payload",
|
||||
"type": "Object"
|
||||
}]
|
||||
},{
|
||||
"name": "Remove",
|
||||
"event": "remove",
|
||||
"params": [{
|
||||
"name": "Decoded Payload",
|
||||
"param": "payload",
|
||||
"type": "Object"
|
||||
}]
|
||||
}],
|
||||
"inputs": []
|
||||
}]
|
||||
}
|
@ -10,6 +10,8 @@
|
||||
"87 b8 1a 7f 49 80": "Peter Venkman",
|
||||
"0a 2e aa 5c 49 81": "Kai",
|
||||
"cc cb 22 55 42 80": "Scooby-Doo",
|
||||
"5f 33 9a 58 49 80": "Green Lantern",
|
||||
"28 9e 32 83 49 80": "Supergirl"
|
||||
"5f 33 9a 58 49 80": "Green Arrow",
|
||||
"28 9e 32 83 49 80": "Supergirl",
|
||||
"f5 c2 12 9e 4a 80": "Batgirl",
|
||||
"45 c2 c2 9d 4a 81": "Robin"
|
||||
}
|
41
examples/minifig.js
Normal file
41
examples/minifig.js
Normal file
@ -0,0 +1,41 @@
|
||||
const ToyPad = require("../main.js"),
|
||||
toyPad = new ToyPad();
|
||||
|
||||
|
||||
toyPad.on("connect", () => {
|
||||
console.log("ToyPad connected");
|
||||
});
|
||||
|
||||
|
||||
toyPad.on("error", () => {
|
||||
console.log("ToyPad connection error");
|
||||
});
|
||||
|
||||
|
||||
toyPad.on("add", (data) => {
|
||||
const name = ToyPad.minifigNameFromSignature(data.sig);
|
||||
if (name) {
|
||||
console.log(`Minifig added to panel ${data.panel} (${name})`);
|
||||
} else {
|
||||
console.log(`Minifig added to panel ${data.panel} (Unknown signature - ${data.sig})`);
|
||||
}
|
||||
if (data.panel == ToyPad.Panel.CENTER) {
|
||||
toyPad.setColor(data.panel, 0xffff, 0.5);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
toyPad.on("remove", (data) => {
|
||||
const name = ToyPad.minifigNameFromSignature(data.sig);
|
||||
if (name) {
|
||||
console.log(`Minifig removed from panel ${data.panel} (${name})`);
|
||||
} else {
|
||||
console.log(`Minifig removed from panel ${data.panel} (Unknown signature - ${data.sig})`);
|
||||
}
|
||||
if (data.panel == ToyPad.Panel.CENTER) {
|
||||
toyPad.setColor(data.panel, 0, 0.9);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
toyPad.connect();
|
76
examples/rgb.js
Normal file
76
examples/rgb.js
Normal file
@ -0,0 +1,76 @@
|
||||
const ToyPad = require("../main.js");
|
||||
toyPad = new ToyPad();
|
||||
|
||||
|
||||
let PanelStates = {};
|
||||
PanelStates[ToyPad.Panel.LEFT] = 0;
|
||||
PanelStates[ToyPad.Panel.RIGHT] = 0;
|
||||
PanelStates[ToyPad.Panel.CENTER] = 0;
|
||||
|
||||
|
||||
toyPad.on("connect", () => {
|
||||
console.log("ToyPad connected");
|
||||
});
|
||||
|
||||
|
||||
toyPad.on("error", () => {
|
||||
console.log("ToyPad connection error");
|
||||
});
|
||||
|
||||
|
||||
toyPad.on("add", (data) => {
|
||||
|
||||
const name = ToyPad.minifigNameFromSignature(data.sig);
|
||||
|
||||
if (name) {
|
||||
console.log(`Minifig added to panel ${data.panel} (${name})`);
|
||||
} else {
|
||||
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;
|
||||
}
|
||||
|
||||
//console.log(PanelStates[data.panel]);
|
||||
toyPad.setColor(data.panel, PanelStates[data.panel]);
|
||||
|
||||
});
|
||||
|
||||
|
||||
toyPad.on("remove", (data) => {
|
||||
|
||||
const name = ToyPad.minifigNameFromSignature(data.sig);
|
||||
if (name) {
|
||||
console.log(`Minifig removed from panel ${data.panel} (${name})`);
|
||||
} else {
|
||||
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;
|
||||
}
|
||||
|
||||
//console.log(PanelStates[data.panel]);
|
||||
toyPad.setColor(data.panel, PanelStates[data.panel]);
|
||||
|
||||
});
|
||||
|
||||
|
||||
toyPad.connect();
|
31
index.js
31
index.js
@ -1,31 +0,0 @@
|
||||
const EventEmitter = require("events").EventEmitter,
|
||||
debugLog = require("debug")("LegoDimensions"),
|
||||
fs = require("fs");
|
||||
|
||||
|
||||
const ToyPad = require("./src/toypad.js");
|
||||
|
||||
|
||||
class LegoDimensions extends EventEmitter {
|
||||
|
||||
|
||||
constructor (config) {
|
||||
super();
|
||||
}
|
||||
|
||||
|
||||
wirethingInit () {
|
||||
let toyPad = new ToyPad();
|
||||
this.emit("discover", toyPad);
|
||||
}
|
||||
|
||||
|
||||
static get wirething () {
|
||||
return JSON.parse(fs.readFileSync(`${__dirname}/Wirefile`));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
module.exports = LegoDimensions;
|
28
main.js
28
main.js
@ -1,28 +1,4 @@
|
||||
let ToyPad = require("./src/toypad.js"),
|
||||
toyPad = new ToyPad();
|
||||
const ToyPad = require("./src/toypad.js");
|
||||
|
||||
toyPad.on("connect", () => {
|
||||
console.log("Toy Pad connected");
|
||||
});
|
||||
|
||||
toyPad.on("error", () => {
|
||||
console.log("Toy Pad connection error");
|
||||
});
|
||||
|
||||
toyPad.on("add", (data) => {
|
||||
let name = ToyPad.minifigNameFromSignature(data.sig);
|
||||
console.log(`Minifig added to panel ${data.panel} (${name})`);
|
||||
if (data.panel == ToyPad.Panel.CENTER) {
|
||||
toyPad.setColor(data.panel, 0xffff44, 0.5);
|
||||
}
|
||||
});
|
||||
|
||||
toyPad.on("remove", (data) => {
|
||||
let name = ToyPad.minifigNameFromSignature(data.sig);
|
||||
console.log(`Minifig removed from panel ${data.panel} (${name})`);
|
||||
if (data.panel == ToyPad.Panel.CENTER) {
|
||||
toyPad.setColor(data.panel, 0, 0.9);
|
||||
}
|
||||
});
|
||||
|
||||
toyPad.connect();
|
||||
module.exports = ToyPad;
|
411
package-lock.json
generated
Normal file
411
package-lock.json
generated
Normal file
@ -0,0 +1,411 @@
|
||||
{
|
||||
"name": "node-legodimensions",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
||||
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
|
||||
},
|
||||
"aproba": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
|
||||
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
|
||||
},
|
||||
"are-we-there-yet": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
|
||||
"integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
|
||||
"requires": {
|
||||
"delegates": "1.0.0",
|
||||
"readable-stream": "2.3.3"
|
||||
}
|
||||
},
|
||||
"bindings": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
|
||||
"integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw=="
|
||||
},
|
||||
"bl": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
|
||||
"integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
|
||||
"requires": {
|
||||
"readable-stream": "2.3.3"
|
||||
}
|
||||
},
|
||||
"chownr": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
|
||||
"integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE="
|
||||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
|
||||
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"deep-extend": {
|
||||
"version": "0.4.2",
|
||||
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
|
||||
"integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8="
|
||||
},
|
||||
"delegates": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
||||
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
|
||||
},
|
||||
"detect-libc": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
|
||||
},
|
||||
"end-of-stream": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
|
||||
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
|
||||
"requires": {
|
||||
"once": "1.4.0"
|
||||
}
|
||||
},
|
||||
"expand-template": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz",
|
||||
"integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ=="
|
||||
},
|
||||
"gauge": {
|
||||
"version": "2.7.4",
|
||||
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
|
||||
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
|
||||
"requires": {
|
||||
"aproba": "1.2.0",
|
||||
"console-control-strings": "1.1.0",
|
||||
"has-unicode": "2.0.1",
|
||||
"object-assign": "4.1.1",
|
||||
"signal-exit": "3.0.2",
|
||||
"string-width": "1.0.2",
|
||||
"strip-ansi": "3.0.1",
|
||||
"wide-align": "1.1.2"
|
||||
}
|
||||
},
|
||||
"github-from-package": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
||||
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
|
||||
},
|
||||
"has-unicode": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
|
||||
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
|
||||
"requires": {
|
||||
"number-is-nan": "1.0.1"
|
||||
}
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||
},
|
||||
"mkdirp": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
},
|
||||
"dependencies": {
|
||||
"minimist": {
|
||||
"version": "0.0.8",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"nan": {
|
||||
"version": "2.8.0",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz",
|
||||
"integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo="
|
||||
},
|
||||
"node-abi": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.2.0.tgz",
|
||||
"integrity": "sha512-FqVC0WNNL8fQWQK3GYTESfwZXZKDbSIiEEIvufq7HV6Lj0IDDZRVa4CU/KTA0JVlqY9eTDSuPiC8FS9UfGVuzA==",
|
||||
"requires": {
|
||||
"semver": "5.5.0"
|
||||
}
|
||||
},
|
||||
"node-hid": {
|
||||
"version": "0.7.2",
|
||||
"resolved": "https://registry.npmjs.org/node-hid/-/node-hid-0.7.2.tgz",
|
||||
"integrity": "sha512-ZLbw4zH7ogLsHtaH1BFOXiG+iirs2GFEuattKABdql4qZ8PaBdJnXPMB0ul2uPXa7F6X+OXtIShEKA0Mywm9lQ==",
|
||||
"requires": {
|
||||
"bindings": "1.3.0",
|
||||
"nan": "2.8.0",
|
||||
"prebuild-install": "2.5.0"
|
||||
}
|
||||
},
|
||||
"noop-logger": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
|
||||
"integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI="
|
||||
},
|
||||
"npmlog": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
|
||||
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
|
||||
"requires": {
|
||||
"are-we-there-yet": "1.1.4",
|
||||
"console-control-strings": "1.1.0",
|
||||
"gauge": "2.7.4",
|
||||
"set-blocking": "2.0.0"
|
||||
}
|
||||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"requires": {
|
||||
"wrappy": "1.0.2"
|
||||
}
|
||||
},
|
||||
"os-homedir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
|
||||
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
|
||||
},
|
||||
"prebuild-install": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.0.tgz",
|
||||
"integrity": "sha512-3wlyZgmkeeyduOR8Ursu5gKr3yWAYObACa5aJOtt2farRRFV/+zXk/Y3wM6yQRMqmqHh+pHAwyKp5r82K699Rg==",
|
||||
"requires": {
|
||||
"detect-libc": "1.0.3",
|
||||
"expand-template": "1.1.0",
|
||||
"github-from-package": "0.0.0",
|
||||
"minimist": "1.2.0",
|
||||
"mkdirp": "0.5.1",
|
||||
"node-abi": "2.2.0",
|
||||
"noop-logger": "0.1.1",
|
||||
"npmlog": "4.1.2",
|
||||
"os-homedir": "1.0.2",
|
||||
"pump": "1.0.3",
|
||||
"rc": "1.2.5",
|
||||
"simple-get": "1.4.3",
|
||||
"tar-fs": "1.16.0",
|
||||
"tunnel-agent": "0.6.0",
|
||||
"xtend": "4.0.1"
|
||||
}
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
|
||||
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
|
||||
},
|
||||
"pump": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
|
||||
"integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
|
||||
"requires": {
|
||||
"end-of-stream": "1.4.1",
|
||||
"once": "1.4.0"
|
||||
}
|
||||
},
|
||||
"rc": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz",
|
||||
"integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=",
|
||||
"requires": {
|
||||
"deep-extend": "0.4.2",
|
||||
"ini": "1.3.5",
|
||||
"minimist": "1.2.0",
|
||||
"strip-json-comments": "2.0.1"
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
|
||||
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
|
||||
"requires": {
|
||||
"core-util-is": "1.0.2",
|
||||
"inherits": "2.0.3",
|
||||
"isarray": "1.0.0",
|
||||
"process-nextick-args": "1.0.7",
|
||||
"safe-buffer": "5.1.1",
|
||||
"string_decoder": "1.0.3",
|
||||
"util-deprecate": "1.0.2"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
||||
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
|
||||
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
|
||||
},
|
||||
"set-blocking": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
|
||||
},
|
||||
"signal-exit": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
|
||||
},
|
||||
"simple-get": {
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz",
|
||||
"integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=",
|
||||
"requires": {
|
||||
"once": "1.4.0",
|
||||
"unzip-response": "1.0.2",
|
||||
"xtend": "4.0.1"
|
||||
}
|
||||
},
|
||||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
|
||||
"requires": {
|
||||
"code-point-at": "1.1.0",
|
||||
"is-fullwidth-code-point": "1.0.0",
|
||||
"strip-ansi": "3.0.1"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
|
||||
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
|
||||
"requires": {
|
||||
"safe-buffer": "5.1.1"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
||||
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
|
||||
"requires": {
|
||||
"ansi-regex": "2.1.1"
|
||||
}
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
|
||||
},
|
||||
"tar-fs": {
|
||||
"version": "1.16.0",
|
||||
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz",
|
||||
"integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg==",
|
||||
"requires": {
|
||||
"chownr": "1.0.1",
|
||||
"mkdirp": "0.5.1",
|
||||
"pump": "1.0.3",
|
||||
"tar-stream": "1.5.5"
|
||||
}
|
||||
},
|
||||
"tar-stream": {
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz",
|
||||
"integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==",
|
||||
"requires": {
|
||||
"bl": "1.2.1",
|
||||
"end-of-stream": "1.4.1",
|
||||
"readable-stream": "2.3.3",
|
||||
"xtend": "4.0.1"
|
||||
}
|
||||
},
|
||||
"tunnel-agent": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
||||
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
|
||||
"requires": {
|
||||
"safe-buffer": "5.1.1"
|
||||
}
|
||||
},
|
||||
"unzip-response": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
|
||||
"integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4="
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"wide-align": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
|
||||
"integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
|
||||
"requires": {
|
||||
"string-width": "1.0.2"
|
||||
}
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"xtend": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
|
||||
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "node-legodimensions",
|
||||
"version": "1.0.0",
|
||||
"description": "Lego Dimensions",
|
||||
"version": "1.0.1",
|
||||
"description": "Lego Dimensions ToyPad library for Node.js",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
@ -9,7 +9,7 @@
|
||||
"author": "Nathan Kunicki <me@nathankunicki.com>",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"debug": "^2.6.0",
|
||||
"node-hid": "^0.5.2"
|
||||
"debug": "^3.1.0",
|
||||
"node-hid": "^0.7.2"
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
const EventEmitter = require("events").EventEmitter,
|
||||
HID = require("node-hid");
|
||||
HID = require("node-hid"),
|
||||
debug = require("debug")("LegoDimensions");
|
||||
|
||||
|
||||
const minifigData = require("../data/minifigs.json");
|
||||
@ -16,6 +17,12 @@ const Action = {
|
||||
};
|
||||
|
||||
|
||||
const Type = {
|
||||
RESPONSE: 0x55,
|
||||
EVENT: 0x56
|
||||
}
|
||||
|
||||
|
||||
const Command = {
|
||||
CONNECTED: 0x19,
|
||||
ACTION: 0x0b
|
||||
@ -30,15 +37,19 @@ const Panel = {
|
||||
};
|
||||
|
||||
|
||||
const Request = {
|
||||
COLOR: 0xc0
|
||||
}
|
||||
|
||||
|
||||
class ToyPad extends EventEmitter {
|
||||
|
||||
|
||||
constructor () {
|
||||
super();
|
||||
this.uuid = "1";
|
||||
this.deviceType = "toypad";
|
||||
this._device = null;
|
||||
this._requestId = 0;
|
||||
this._callbacks = {};
|
||||
}
|
||||
|
||||
|
||||
@ -56,7 +67,7 @@ class ToyPad extends EventEmitter {
|
||||
if (minifigData[sig]) {
|
||||
return minifigData[sig];
|
||||
} else {
|
||||
return "Unknown";
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -84,7 +95,7 @@ class ToyPad extends EventEmitter {
|
||||
|
||||
|
||||
static _pad (data) {
|
||||
while (data.length < 32) {
|
||||
while (data.length < 31) {
|
||||
data.push(0x00);
|
||||
}
|
||||
return data;
|
||||
@ -99,11 +110,12 @@ class ToyPad extends EventEmitter {
|
||||
|
||||
this._device.on("data", (data) => {
|
||||
|
||||
let cmd = data[1];
|
||||
let type = data[0],
|
||||
cmd = data[1];
|
||||
|
||||
if (cmd == Command.CONNECTED) {
|
||||
if (type === Type.RESPONSE && cmd == Command.CONNECTED) {
|
||||
this.emit("connect");
|
||||
} else if (cmd == Command.ACTION) {
|
||||
} else if (type === Type.EVENT && cmd == Command.ACTION) {
|
||||
|
||||
let action = data[5],
|
||||
sig = ToyPad._bufferToHexString(data.slice(7, 13));
|
||||
@ -120,6 +132,8 @@ class ToyPad extends EventEmitter {
|
||||
this.emit("remove", emitPayload);
|
||||
}
|
||||
|
||||
} else if (type === Type.RESPONSE) {
|
||||
//console.log(data);
|
||||
}
|
||||
|
||||
});
|
||||
@ -137,17 +151,16 @@ class ToyPad extends EventEmitter {
|
||||
}
|
||||
|
||||
|
||||
setColor (panel, color, speed = 1) {
|
||||
setColor (panel, color) {
|
||||
let data = [
|
||||
this._requestId & 0xff,
|
||||
panel,
|
||||
((1 - speed) * 0xff) & 0xff,
|
||||
0x01, (color >> 16) & 0xff,
|
||||
panel & 0xff,
|
||||
(color >> 16) & 0xff,
|
||||
(color >> 8) & 0xff,
|
||||
color & 0xff
|
||||
];
|
||||
this._requestId++;
|
||||
this._write([0x55, 0x08, 0xc2].concat(data));
|
||||
this._write([0x55, (data.length + 1) & 0xff, Request.COLOR].concat(data));
|
||||
};
|
||||
|
||||
|
||||
@ -165,7 +178,7 @@ class ToyPad extends EventEmitter {
|
||||
|
||||
|
||||
_write (data) {
|
||||
this._device.write([0x00].concat(ToyPad._pad(ToyPad._checksum(data))));
|
||||
this._device.write(ToyPad._pad(ToyPad._checksum(data)));
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user