Skip to content

Commit bb46a89

Browse files
committed
Expose bit resolution of ADC, PWM (and others as available)
Signed-off-by: Rick Waldron <[email protected]>
1 parent 5710163 commit bb46a89

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

lib/firmata.js

+25-1
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ SYSEX_RESPONSE[QUERY_FIRMWARE] = function(board) {
193193
*/
194194

195195
SYSEX_RESPONSE[CAPABILITY_RESPONSE] = function(board) {
196+
var mode, resolution;
196197
var modes = Object.keys(board.MODES).map(function(key) {
197198
return board.MODES[key];
198199
});
@@ -222,7 +223,24 @@ SYSEX_RESPONSE[CAPABILITY_RESPONSE] = function(board) {
222223
continue;
223224
}
224225
if (n === 0) {
225-
capability |= (1 << board.currentBuffer[i]);
226+
mode = board.currentBuffer[i];
227+
resolution = (1 << board.currentBuffer[i + 1]) - 1;
228+
capability |= (1 << mode);
229+
230+
// ADC Resolution of Analog Inputs
231+
if (mode === board.MODES.ANALOG && board.RESOLUTION.ADC === null) {
232+
board.RESOLUTION.ADC = resolution;
233+
}
234+
235+
// PWM Resolution of PWM Outputs
236+
if (mode === board.MODES.PWM && board.RESOLUTION.PWM === null) {
237+
board.RESOLUTION.PWM = resolution;
238+
}
239+
240+
// DAC Resolution of DAC Outputs
241+
// if (mode === board.MODES.DAC && board.RESOLUTION.DAC === null) {
242+
// board.RESOLUTION.DAC = resolution;
243+
// }
226244
}
227245
n ^= 1;
228246
}
@@ -505,6 +523,12 @@ function Board(port, options, callback) {
505523
RES_TX3: 0x07,
506524
};
507525

526+
this.RESOLUTION = {
527+
ADC: null,
528+
DAC: null,
529+
PWM: null,
530+
};
531+
508532
this.HIGH = 1;
509533
this.LOW = 0;
510534
this.pins = [];

test/unit/firmata.test.js

+6
Original file line numberDiff line numberDiff line change
@@ -1026,6 +1026,12 @@ describe("Board: lifecycle", function() {
10261026
transport.emit("data", [END_SYSEX]);
10271027
});
10281028

1029+
it("board.RESOLUTION.* properties have values via CAPABILITY_RESPONSE", function(done) {
1030+
assert.equal(board.RESOLUTION.ADC, 1023);
1031+
assert.equal(board.RESOLUTION.PWM, 255);
1032+
done();
1033+
});
1034+
10291035

10301036
it("querys analog mappings after capabilities", function(done) {
10311037
//[START_SYSEX, ANALOG_MAPPING_QUERY, END_SYSEX]

0 commit comments

Comments
 (0)