Skip to content

Commit

Permalink
Board: SYSEX_RESPONSE[CAPABILITY_RESPONSE] refactor for simplification
Browse files Browse the repository at this point in the history
  • Loading branch information
rwaldron committed Mar 12, 2016
1 parent ba2af45 commit b17f9d1
Showing 1 changed file with 18 additions and 11 deletions.
29 changes: 18 additions & 11 deletions lib/firmata.js
Expand Up @@ -196,32 +196,37 @@ SYSEX_RESPONSE[QUERY_FIRMWARE] = function(board) {
*/

SYSEX_RESPONSE[CAPABILITY_RESPONSE] = function(board) {
var supportedModes = 0;
var modes = Object.keys(board.MODES).map(function(key) {
return board.MODES[key];
});
var unknown = board.MODES.UNKNOWN;
var capability = 0;

function pushModes(modesArray, mode) {
if (supportedModes & (1 << board.MODES[mode])) {
modesArray.push(board.MODES[mode]);
}
function supportedModes(capability) {
return modes.reduce(function(accum, mode, index) {
if (capability & (1 << mode)) {
accum.push(mode);
}
return accum;
}, []);
}

// Only create pins if none have been previously created on the instance.
if (!board.pins.length) {
for (var i = 2, n = 0; i < board.currentBuffer.length - 1; i++) {
if (board.currentBuffer[i] === 127) {
var modesArray = [];
Object.keys(board.MODES).forEach(pushModes.bind(null, modesArray));
board.pins.push({
supportedModes: modesArray,
mode: board.MODES.UNKNOWN,
supportedModes: supportedModes(capability),
mode: unknown,
value: 0,
report: 1
});
supportedModes = 0;
capability = 0;
n = 0;
continue;
}
if (n === 0) {
supportedModes |= (1 << board.currentBuffer[i]);
capability |= (1 << board.currentBuffer[i]);
}
n ^= 1;
}
Expand Down Expand Up @@ -522,6 +527,8 @@ var Board = function(port, options, callback) {
}.bind(this));

this.transport.on("open", function() {
this.emit("open");
// Legacy
this.emit("connect");
}.bind(this));

Expand Down

0 comments on commit b17f9d1

Please sign in to comment.