diff options
Diffstat (limited to 'cores/arduino')
| -rwxr-xr-x | cores/arduino/Print.cpp | 3 | ||||
| -rwxr-xr-x | cores/arduino/Print.h | 5 | ||||
| -rw-r--r-- | cores/arduino/USBAPI.h | 1 | ||||
| -rw-r--r-- | cores/arduino/WInterrupts.c | 36 | ||||
| -rwxr-xr-x | cores/arduino/wiring_private.h | 2 | 
5 files changed, 40 insertions, 7 deletions
| diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp index e541a6c..711251c 100755 --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -226,6 +226,9 @@ size_t Print::printFloat(double number, uint8_t digits)  {     size_t n = 0; +  if (isnan(number)) return print("nan"); +  if (isinf(number)) return print("inf"); +      // Handle negative numbers    if (number < 0.0)    { diff --git a/cores/arduino/Print.h b/cores/arduino/Print.h index 1af6b72..dc76150 100755 --- a/cores/arduino/Print.h +++ b/cores/arduino/Print.h @@ -46,7 +46,10 @@ class Print      void clearWriteError() { setWriteError(0); }      virtual size_t write(uint8_t) = 0; -    size_t write(const char *str) { return write((const uint8_t *)str, strlen(str)); } +    size_t write(const char *str) { +      if (str == NULL) return 0; +      return write((const uint8_t *)str, strlen(str)); +    }      virtual size_t write(const uint8_t *buffer, size_t size);      size_t print(const __FlashStringHelper *); diff --git a/cores/arduino/USBAPI.h b/cores/arduino/USBAPI.h index d5abdb6..eb2e593 100644 --- a/cores/arduino/USBAPI.h +++ b/cores/arduino/USBAPI.h @@ -39,6 +39,7 @@ public:  	virtual int read(void);  	virtual void flush(void);  	virtual size_t write(uint8_t); +	using Print::write; // pull in write(str) and write(buf, size) from Print  	operator bool();  };  extern Serial_ Serial; diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index 8f3ec84..62efc9c 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -59,6 +59,14 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {  		EICRA = (EICRA & ~((1<<ISC10) | (1<<ISC11))) | (mode << ISC10);  		EIMSK |= (1<<INT1);  		break;	 +    case 2: +        EICRA = (EICRA & ~((1<<ISC20) | (1<<ISC21))) | (mode << ISC20); +        EIMSK |= (1<<INT2); +        break; +    case 3: +        EICRA = (EICRA & ~((1<<ISC30) | (1<<ISC31))) | (mode << ISC30); +        EIMSK |= (1<<INT3); +        break;  #elif defined(EICRA) && defined(EICRB) && defined(EIMSK)      case 2:        EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00); @@ -147,12 +155,18 @@ void detachInterrupt(uint8_t interruptNum) {      // ATmega8.  There, INT0 is 6 and INT1 is 7.)      switch (interruptNum) {  #if defined(__AVR_ATmega32U4__) -	case 0: -		EIMSK &= ~(1<<INT0); -		break; -	case 1: -		EIMSK &= ~(1<<INT1); -		break;		 +    case 0: +        EIMSK &= ~(1<<INT0); +        break; +    case 1: +        EIMSK &= ~(1<<INT1); +        break; +    case 2: +        EIMSK &= ~(1<<INT2); +        break; +    case 3: +        EIMSK &= ~(1<<INT3); +        break;		  #elif defined(EICRA) && defined(EICRB) && defined(EIMSK)      case 2:        EIMSK &= ~(1 << INT0); @@ -226,6 +240,16 @@ SIGNAL(INT1_vect) {  		intFunc[EXTERNAL_INT_1]();  } +SIGNAL(INT2_vect) { +    if(intFunc[EXTERNAL_INT_2]) +		intFunc[EXTERNAL_INT_2](); +} + +SIGNAL(INT3_vect) { +    if(intFunc[EXTERNAL_INT_3]) +		intFunc[EXTERNAL_INT_3](); +} +  #elif defined(EICRA) && defined(EICRB)  SIGNAL(INT0_vect) { diff --git a/cores/arduino/wiring_private.h b/cores/arduino/wiring_private.h index f0ceb0c..026ce1a 100755 --- a/cores/arduino/wiring_private.h +++ b/cores/arduino/wiring_private.h @@ -56,6 +56,8 @@ extern "C"{  #define EXTERNAL_NUM_INTERRUPTS 8  #elif defined(__AVR_ATmega1284P__)   #define EXTERNAL_NUM_INTERRUPTS 3 +#elif defined(__AVR_ATmega32U4__) +#define EXTERNAL_NUM_INTERRUPTS 4  #else  #define EXTERNAL_NUM_INTERRUPTS 2  #endif | 
