Skip to content

Commit 0b256d1

Browse files
authored
Merge pull request #28 from ifreecarve/2018-03-27_compilation
Fix OSX compilation and other C++-related issues, supersede #24
2 parents ea1ab74 + fd3da09 commit 0b256d1

File tree

20 files changed

+167
-82
lines changed

20 files changed

+167
-82
lines changed

.github/issue_template.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
- `ruby -v`:
55
- `bundle -v`:
66
- `bundle info arduino_ci`:
7-
- `gcc -v`:
7+
- `g++ -v`:
88
- Arduino IDE version:
99
- URL of failing Travis CI job:
1010
- URL of your Arduino project:

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
66

77
## [Unreleased]
88
### Added
9+
- Definition of `LED_BUILTIN`, first reported by `dfrencham` on GitHub
10+
- Stubs for `tone` and `noTone`, first suggested by `dfrencham` on GitHub
11+
- Ability to specify multiple compilers for unit testing
912

1013
### Changed
1114

@@ -14,6 +17,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1417
### Removed
1518

1619
### Fixed
20+
- Compile errors / portability issues in `WString.h` and `Print.h`, first reported by `dfrencham` on GitHub
21+
- Compile errors / inheritance issues in `Print.h` and `Stream.h`, first reported by `dfrencham` on GitHub
22+
- Print functions for int, double, long, etc
1723

1824
### Security
1925

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,10 @@ For your unit tests, in addition to setting specific libraries and platforms, yo
349349
350350
```yaml
351351
unittest:
352+
compilers:
353+
- g++ # default
354+
- g++-4.9
355+
- g++-7
352356
testfiles:
353357
select:
354358
- "*-*.*"

SampleProjects/DoSomething/Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: /Users/ikatz/Development/non-wayfair/arduino_ci
33
specs:
4-
arduino_ci (0.0.1)
4+
arduino_ci (0.1.7)
55
os (~> 1.0)
66

77
GEM

SampleProjects/TestSomething/.arduino-ci.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@ unittest:
22
platforms:
33
- uno
44
- due
5+
6+
unittest:
7+
compilers:
8+
- g++

SampleProjects/TestSomething/test/serial.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,22 @@ unittest(serial_ports)
4343
assertEqual("bcdefg", state->serialPort[0].dataOut);
4444
}
4545

46+
unittest(all_serial_writes)
47+
{
48+
GodmodeState* state = GODMODE();
49+
state->serialPort[0].dataIn = "";
50+
state->serialPort[0].dataOut = "";
51+
52+
char str[4] = "xyz";
53+
Serial.write(reinterpret_cast<const uint8_t *>(str ), 3);
54+
Serial.print((int)1);
55+
Serial.print((long)2);
56+
Serial.print((double)3.4);
57+
Serial.print((char)'a');
58+
Serial.print("b");
59+
assertEqual("xyz123.4000000000ab", state->serialPort[0].dataOut);
60+
}
61+
4662
#endif
4763

4864
unittest_main()

cpp/arduino/ArduinoDefines.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,6 @@
8989
#define TIMER5B 17
9090
#define TIMER5C 18
9191

92+
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
93+
#define LED_BUILTIN 13
94+
#endif

cpp/arduino/Godmode.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,11 @@ void analogWrite(uint8_t, int);
9191
#define analogReadResolution(...) _NOP()
9292
#define analogWriteResolution(...) _NOP()
9393

94+
// TODO: issue #26 to track the commanded state here
95+
inline void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0) {}
96+
inline void tone(uint8_t _pin, unsigned int frequency) {}
97+
inline void noTone(uint8_t _pin) {}
98+
9499

95100
GodmodeState* GODMODE();
96101

cpp/arduino/HardwareSerial.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,8 @@ class HardwareSerial : public Stream, public ObservableDataStream
5757
return 1;
5858
}
5959

60-
inline size_t write(unsigned long n) { return write((uint8_t)n); }
61-
inline size_t write(long n) { return write((uint8_t)n); }
62-
inline size_t write(unsigned int n) { return write((uint8_t)n); }
63-
inline size_t write(int n) { return write((uint8_t)n); }
64-
// using Print::write; // pull in write(str) and write(buf, size) from Print
60+
// https://stackoverflow.com/a/4271276
61+
using Print::write; // pull in write(str) and write(buf, size) from Print
6562
operator bool() { return true; }
6663

6764
};

cpp/arduino/Print.h

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <stdio.h>
4+
#include <avr/pgmspace.h>
45
#include "WString.h"
56

67
#define DEC 10
@@ -32,38 +33,38 @@ class Print
3233
virtual size_t write(uint8_t) = 0;
3334
size_t write(const char *str) { return str == NULL ? 0 : write((const uint8_t *)str, String(str).length()); }
3435

35-
3636
virtual size_t write(const uint8_t *buffer, size_t size) {
3737
size_t n;
3838
for (n = 0; size && write(*buffer++) && ++n; --size);
3939
return n;
4040
}
41+
4142
size_t write(const char *buffer, size_t size) { return write((const uint8_t *)buffer, size); }
4243

43-
size_t print(const String &s) { return write(s.c_str(), s.length()); }
44-
size_t print(const __FlashStringHelper *str) { return print(reinterpret_cast<PGM_P>(str)); }
45-
size_t print(const char* str) { return print(String(str)); }
46-
size_t print(char c) { return print(String(c)); }
47-
size_t print(unsigned char b, int base) { return print(String(b, base)); }
48-
size_t print(int n, int base) { return print(String(n, base)); }
49-
size_t print(unsigned int n, int base) { return print(String(n, base)); }
50-
size_t print(long n, int base) { return print(String(n, base)); }
51-
size_t print(unsigned long n, int base) { return print(String(n, base)); }
52-
size_t print(double n, int digits) { return print(String(n, digits)); }
53-
size_t print(const Printable& x) { return x.printTo(*this); }
44+
size_t print(const String &s) { return write(s.c_str(), s.length()); }
45+
size_t print(const __FlashStringHelper *str) { return print(reinterpret_cast<PGM_P>(str)); }
46+
size_t print(const char* str) { return print(String(str)); }
47+
size_t print(char c) { return print(String(c)); }
48+
size_t print(unsigned char b, int base = DEC) { return print(String(b, base)); }
49+
size_t print(int n, int base = DEC) { return print(String(n, base)); }
50+
size_t print(unsigned int n, int base = DEC) { return print(String(n, base)); }
51+
size_t print(long n, int base = DEC) { return print(String(n, base)); }
52+
size_t print(unsigned long n, int base = DEC) { return print(String(n, base)); }
53+
size_t print(double n, int base = DEC) { return print(String(n, base)); }
54+
size_t print(const Printable& x) { return x.printTo(*this); }
5455

55-
size_t println(void) { return print("\r\n"); }
56-
size_t println(const String &s) { return print(s) + println(); }
57-
size_t println(const __FlashStringHelper *str) { return println(reinterpret_cast<PGM_P>(str)); }
58-
size_t println(const char* c) { return println(String(c)); }
59-
size_t println(char c) { return println(String(c)); }
60-
size_t println(unsigned char b, int base) { return println(String(b, base)); }
61-
size_t println(int num, int base) { return println(String(num, base)); }
62-
size_t println(unsigned int num, int base) { return println(String(num, base)); }
63-
size_t println(long num, int base) { return println(String(num, base)); }
64-
size_t println(unsigned long num, int base) { return println(String(num, base)); }
65-
size_t println(double num, int digits) { return println(String(num, digits)); }
66-
size_t println(const Printable& x) { return print(x) + println(); }
56+
size_t println(void) { return print("\r\n"); }
57+
size_t println(const String &s) { return print(s) + println(); }
58+
size_t println(const __FlashStringHelper *str) { return println(reinterpret_cast<PGM_P>(str)); }
59+
size_t println(const char* c) { return println(String(c)); }
60+
size_t println(char c) { return println(String(c)); }
61+
size_t println(unsigned char b, int base = DEC) { return println(String(b, base)); }
62+
size_t println(int num, int base = DEC) { return println(String(num, base)); }
63+
size_t println(unsigned int num, int base = DEC) { return println(String(num, base)); }
64+
size_t println(long num, int base = DEC) { return println(String(num, base)); }
65+
size_t println(unsigned long num, int base = DEC) { return println(String(num, base)); }
66+
size_t println(double num, int base = DEC) { return println(String(num, base)); }
67+
size_t println(const Printable& x) { return print(x) + println(); }
6768

6869
virtual void flush() { }
6970

0 commit comments

Comments
 (0)