Skip to content

Commit 25dfa55

Browse files
committed
Merge pull request firmata#126 from firmata/configurable_dev
merge rotary-encoder and fixes from dev into Configurable.
2 parents a23303f + 2764059 commit 25dfa55

File tree

24 files changed

+1933
-1666
lines changed

24 files changed

+1933
-1666
lines changed

Boards.h

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ Firmata protocol and the actual pin numbers used by the Arduino
7272
functions. Even though such mappings are often simple, pin
7373
numbers received by Firmata protocol should always be used as
7474
input to these macros, and the result of the macro should be
75-
used with with any Arduino function.
75+
used with any Arduino function.
7676
7777
When Firmata is extended to support a new pin mode or feature,
7878
a pair of macros should be added and used for all hardware
@@ -144,6 +144,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
144144
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) - 2 < MAX_SERVOS)
145145
#define IS_PIN_I2C(p) ((p) == 18 || (p) == 19)
146146
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
147+
#define IS_PIN_INTERRUPT(p) ((p)==2 || (p)==3)
147148
#define PIN_TO_DIGITAL(p) (p)
148149
#define PIN_TO_ANALOG(p) ((p) - 14)
149150
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -160,6 +161,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
160161
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
161162
#define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL)
162163
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
164+
#define IS_PIN_INTERRUPT(p) 0
163165
#define PIN_TO_DIGITAL(p) (p)
164166
#define PIN_TO_ANALOG(p) ((p) - FIRST_ANALOG_PIN)
165167
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -176,6 +178,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
176178
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
177179
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) - 2 < MAX_SERVOS)
178180
#define IS_PIN_I2C(p) ((p) == 18 || (p) == 19)
181+
#define IS_PIN_INTERRUPT(p) ((p)==2 || (p)==3)
179182
#define PIN_TO_DIGITAL(p) (p)
180183
#define PIN_TO_ANALOG(p) ((p) - 14)
181184
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -194,6 +197,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
194197
#define IS_PIN_SERVO(p) ((p) >= 2 && (p) - 2 < MAX_SERVOS)
195198
#define IS_PIN_I2C(p) ((p) == 20 || (p) == 21)
196199
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
200+
#define IS_PIN_INTERRUPT(p) ((p)==2 || (p)==3 || (p)==18 || (p)==19 || (p)==20 || (p)==21)
197201
#define PIN_TO_DIGITAL(p) (p)
198202
#define PIN_TO_ANALOG(p) ((p) - 54)
199203
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -210,6 +214,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
210214
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
211215
#define IS_PIN_SERVO(p) ((p) >= 2 && (p) - 2 < MAX_SERVOS)
212216
#define IS_PIN_I2C(p) ((p) == 20 || (p) == 21) // 70 71
217+
#define IS_PIN_INTERRUPT(p) IS_PIN_DIGITAL(p)
213218
#define PIN_TO_DIGITAL(p) (p)
214219
#define PIN_TO_ANALOG(p) ((p) - 54)
215220
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -227,6 +232,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
227232
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
228233
#define IS_PIN_I2C(p) (0)
229234
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
235+
#define IS_PIN_INTERRUPT(p) ((p) == 0 || (p) == 1 || (p) == 2 ||(p) == 3 || (p) == 4 || (p) == 6 ||(p) == 7 ||(p) == 16)
230236
#define PIN_TO_DIGITAL(p) (p)
231237
#define PIN_TO_ANALOG(p) (0)
232238
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -244,6 +250,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
244250
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
245251
#define IS_PIN_I2C(p) ((p) == 5 || (p) == 6)
246252
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
253+
#define IS_PIN_INTERRUPT(p) ((p) == 5 || (p) == 6 || (p) == 7 || (p) == 8)
247254
#define PIN_TO_DIGITAL(p) (p)
248255
#define PIN_TO_ANALOG(p) (((p)<22)?21-(p):11)
249256
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -260,6 +267,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
260267
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
261268
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
262269
#define IS_PIN_I2C(p) ((p) == 18 || (p) == 19)
270+
#define IS_PIN_INTERRUPT(p) IS_PIN_DIGITAL(p)
263271
#define PIN_TO_DIGITAL(p) (p)
264272
#define PIN_TO_ANALOG(p) (((p)<=23)?(p)-14:(p)-24)
265273
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -277,6 +285,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
277285
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
278286
#define IS_PIN_I2C(p) ((p) == 0 || (p) == 1)
279287
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
288+
#define IS_PIN_INTERRUPT(p) ((p) == 0 || (p) == 1 || (p) == 2 ||(p) == 3 ||(p) == 18 ||(p) == 19 ||(p) == 36 ||(p) == 37)
280289
#define PIN_TO_DIGITAL(p) (p)
281290
#define PIN_TO_ANALOG(p) ((p) - 38)
282291
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -294,12 +303,30 @@ writePort(port, value, bitmask): Write an 8 bit port.
294303
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
295304
#define IS_PIN_I2C(p) ((p) == 2 || (p) == 3)
296305
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
306+
#define IS_PIN_INTERRUPT(p) ((p)==0 || (p)==1 || (p)==2 || (p)==3 || (p)==7)
297307
#define PIN_TO_DIGITAL(p) (p)
298308
#define PIN_TO_ANALOG(p) (p) - 18
299309
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
300310
#define PIN_TO_SERVO(p) (p)
301311

302312

313+
// Intel Galileo Board
314+
#elif defined(ARDUINO_LINUX)
315+
#define TOTAL_ANALOG_PINS 6
316+
#define TOTAL_PINS 20 // 14 digital + 6 analog
317+
#define VERSION_BLINK_PIN 13
318+
#define IS_PIN_DIGITAL(p) ((p) >= 2 && (p) <= 19)
319+
#define IS_PIN_ANALOG(p) ((p) >= 14 && (p) <= 19)
320+
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
321+
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) - 2 < MAX_SERVOS)
322+
#define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL)
323+
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
324+
#define PIN_TO_DIGITAL(p) (p)
325+
#define PIN_TO_ANALOG(p) ((p) - 14)
326+
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
327+
#define PIN_TO_SERVO(p) ((p) - 2)
328+
329+
303330
// Sanguino
304331
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
305332
#define TOTAL_ANALOG_PINS 8
@@ -310,6 +337,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
310337
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
311338
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
312339
#define IS_PIN_I2C(p) ((p) == 16 || (p) == 17)
340+
#define IS_PIN_INTERRUPT(p) ((p)==2 || (p)==10 || (p)==11)
313341
#define PIN_TO_DIGITAL(p) (p)
314342
#define PIN_TO_ANALOG(p) ((p) - 24)
315343
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -326,6 +354,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
326354
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
327355
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
328356
#define IS_PIN_I2C(p) ((p) == 4 || (p) == 5)
357+
#define IS_PIN_INTERRUPT(p) (0)
329358
#define PIN_TO_DIGITAL(p) (p)
330359
#define PIN_TO_ANALOG(p) ((p) - 36)
331360
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -339,7 +368,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
339368

340369
// as long this is not defined for all boards:
341370
#ifndef IS_PIN_SPI
342-
#define IS_PIN_SPI(p) 0
371+
#define IS_PIN_SPI(p) (0)
343372
#endif
344373

345374
/*==============================================================================

Firmata.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Firmata.cpp - Firmata library v2.4.0 - 2013-08-09
2+
Firmata.cpp - Firmata library v2.6.0 - 2014-03-08
33
Copyright (C) 2006-2008 Hans-Christoph Steiner. All rights reserved.
44
55
This library is free software; you can redistribute it and/or

Firmata.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Firmata.h - Firmata library v2.4.0 - 2013-08-09
2+
Firmata.h - Firmata library v2.6.0 - 2014-03-08
33
Copyright (C) 2006-2008 Hans-Christoph Steiner. All rights reserved.
44
55
This library is free software; you can redistribute it and/or
@@ -20,10 +20,10 @@
2020
* software can test whether it will be compatible with the currently
2121
* installed firmware. */
2222
#define FIRMATA_MAJOR_VERSION 2 // for non-compatible changes
23-
#define FIRMATA_MINOR_VERSION 5 // for backwards compatible changes
23+
#define FIRMATA_MINOR_VERSION 6 // for backwards compatible changes
2424
#define FIRMATA_BUGFIX_VERSION 0 // for bugfix releases
2525

26-
#define MAX_DATA_BYTES 64 // max number of data bytes in incoming messages
26+
#define MAX_DATA_BYTES 64 // max number of data bytes in incoming messages
2727

2828
// message command bytes (128-255/0x80-0xFF)
2929
#define DIGITAL_MESSAGE 0x90 // send data for a digital pin
@@ -41,6 +41,7 @@
4141

4242
// extended command set using sysex (0-127/0x00-0x7F)
4343
/* 0x00-0x0F reserved for user-defined commands */
44+
#define ENCODER_DATA 0x61 // reply with encoders current positions
4445
#define SERVO_CONFIG 0x70 // set max angle, minPulse, maxPulse, freq
4546
#define STRING_DATA 0x71 // a string message with 14-bits per char
4647
#define STEPPER_DATA 0x72 // control a stepper motor
@@ -61,6 +62,7 @@
6162
#define SCHEDULER_DATA 0x7B // send a createtask/deletetask/addtotask/schedule/querytasks/querytask request to the scheduler
6263
#define SYSEX_NON_REALTIME 0x7E // MIDI Reserved for non-realtime messages
6364
#define SYSEX_REALTIME 0x7F // MIDI Reserved for realtime messages
65+
6466
// these are DEPRECATED to make the naming more consistent
6567
#define FIRMATA_STRING 0x71 // same as STRING_DATA
6668
#define SYSEX_I2C_REQUEST 0x76 // same as I2C_REQUEST
@@ -77,8 +79,9 @@
7779
#define I2C 0x06 // pin included in I2C setup
7880
#define ONEWIRE 0x07 // pin configured for 1-wire
7981
#define STEPPER 0x08 // pin configured for stepper motor
82+
#define ENCODER 0x09 // pin configured for encoders
8083
#define IGNORE 0x7F // pin configured to be ignored by digitalWrite and capabilityResponse
81-
#define TOTAL_PIN_MODES 10
84+
#define TOTAL_PIN_MODES 11
8285

8386
extern "C" {
8487
// callback function types

0 commit comments

Comments
 (0)