arduino_ci 0.1.21 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +49 -20
- data/REFERENCE.md +625 -0
- data/cpp/arduino/Arduino.h +1 -1
- data/cpp/arduino/AvrMath.h +117 -17
- data/cpp/arduino/Client.h +27 -0
- data/cpp/arduino/EEPROM.h +64 -0
- data/cpp/arduino/Godmode.cpp +38 -19
- data/cpp/arduino/Godmode.h +88 -22
- data/cpp/arduino/HardwareSerial.h +9 -28
- data/cpp/arduino/IPAddress.h +59 -0
- data/cpp/arduino/MockEventQueue.h +86 -0
- data/cpp/arduino/PinHistory.h +64 -24
- data/cpp/arduino/Print.h +9 -12
- data/cpp/arduino/Printable.h +8 -0
- data/cpp/arduino/SPI.h +11 -3
- data/cpp/arduino/Server.h +5 -0
- data/cpp/arduino/Udp.h +27 -0
- data/cpp/arduino/Wire.h +234 -0
- data/cpp/arduino/avr/io.h +10 -1
- data/cpp/arduino/avr/pgmspace.h +76 -46
- data/cpp/arduino/ci/StreamTape.h +36 -0
- data/cpp/unittest/OstreamHelpers.h +4 -0
- data/exe/arduino_ci.rb +400 -0
- data/exe/arduino_ci_remote.rb +2 -385
- data/exe/arduino_library_location.rb +2 -2
- data/lib/arduino_ci.rb +1 -0
- data/lib/arduino_ci/arduino_backend.rb +218 -0
- data/lib/arduino_ci/arduino_downloader.rb +42 -72
- data/lib/arduino_ci/arduino_downloader_linux.rb +17 -55
- data/lib/arduino_ci/arduino_downloader_osx.rb +21 -33
- data/lib/arduino_ci/arduino_downloader_windows.rb +11 -53
- data/lib/arduino_ci/arduino_installation.rb +18 -80
- data/lib/arduino_ci/ci_config.rb +12 -7
- data/lib/arduino_ci/cpp_library.rb +262 -48
- data/lib/arduino_ci/host.rb +59 -4
- data/lib/arduino_ci/library_properties.rb +96 -0
- data/lib/arduino_ci/version.rb +1 -1
- data/misc/default.yml +55 -4
- metadata +18 -83
- data/cpp/arduino/Arduino.h.orig +0 -143
- data/cpp/arduino/ci/Queue.h +0 -73
- data/exe/libasan.rb +0 -29
- data/lib/arduino_ci/arduino_cmd.rb +0 -328
- data/lib/arduino_ci/arduino_cmd_linux.rb +0 -17
- data/lib/arduino_ci/arduino_cmd_linux_builder.rb +0 -19
- data/lib/arduino_ci/arduino_cmd_osx.rb +0 -17
- data/lib/arduino_ci/arduino_cmd_windows.rb +0 -17
data/cpp/arduino/Arduino.h
CHANGED
@@ -9,12 +9,12 @@ Where possible, variable names from the Arduino library are used to avoid confli
|
|
9
9
|
|
10
10
|
#include "ArduinoDefines.h"
|
11
11
|
|
12
|
+
#include "IPAddress.h"
|
12
13
|
#include "WCharacter.h"
|
13
14
|
#include "WString.h"
|
14
15
|
#include "Print.h"
|
15
16
|
#include "Stream.h"
|
16
17
|
#include "HardwareSerial.h"
|
17
|
-
#include "SPI.h"
|
18
18
|
|
19
19
|
typedef bool boolean;
|
20
20
|
typedef uint8_t byte;
|
data/cpp/arduino/AvrMath.h
CHANGED
@@ -1,26 +1,126 @@
|
|
1
1
|
#pragma once
|
2
|
+
#include "ArduinoDefines.h"
|
2
3
|
#include <math.h>
|
3
4
|
|
4
|
-
#
|
5
|
-
#define map(x,inMin,inMax,outMin,outMax) (((x)-(inMin))*((outMax)-(outMin))/((inMax)-(inMin))+outMin)
|
5
|
+
#ifdef __cplusplus
|
6
6
|
|
7
|
-
|
7
|
+
template <class Amt, class Low, class High>
|
8
|
+
auto constrain(const Amt &amt, const Low &low, const High &high)
|
9
|
+
-> decltype(amt < low ? low : (amt > high ? high : amt)) {
|
10
|
+
return (amt < low ? low : (amt > high ? high : amt));
|
11
|
+
}
|
8
12
|
|
9
|
-
|
10
|
-
|
13
|
+
template <class X, class InMin, class InMax, class OutMin, class OutMax>
|
14
|
+
auto map(const X &x, const InMin &inMin, const InMax &inMax,
|
15
|
+
const OutMin &outMin, const OutMax &outMax)
|
16
|
+
-> decltype((x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin) {
|
17
|
+
return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
|
18
|
+
}
|
11
19
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
#define abs(x) ((x)>0?(x):-(x))
|
20
|
+
template <class T> auto radians(const T °) -> decltype(deg * DEG_TO_RAD) {
|
21
|
+
return deg * DEG_TO_RAD;
|
22
|
+
}
|
16
23
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
#define max(a,b) ((a)>(b)?(a):(b))
|
24
|
+
template <class T> auto degrees(const T &rad) -> decltype(rad * RAD_TO_DEG) {
|
25
|
+
return rad * RAD_TO_DEG;
|
26
|
+
}
|
21
27
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
28
|
+
template <class T> auto sq(const T &x) -> decltype(x * x) { return x * x; }
|
29
|
+
|
30
|
+
template <class T> auto abs(const T &x) -> decltype(x > 0 ? x : -x) {
|
31
|
+
return x > 0 ? x : -x;
|
32
|
+
}
|
33
|
+
|
34
|
+
template <class T, class L>
|
35
|
+
auto min(const T &a, const L &b) -> decltype((b < a) ? b : a) {
|
36
|
+
return (b < a) ? b : a;
|
37
|
+
}
|
38
|
+
|
39
|
+
template <class T, class L>
|
40
|
+
auto max(const T &a, const L &b) -> decltype((b < a) ? b : a) {
|
41
|
+
return (a < b) ? b : a;
|
42
|
+
}
|
43
|
+
|
44
|
+
#else // __cplusplus
|
45
|
+
|
46
|
+
#ifdef constrain
|
47
|
+
#undef constrain
|
48
|
+
#endif
|
49
|
+
#define constrain(amt, low, high) \
|
50
|
+
({ \
|
51
|
+
__typeof__(amt) _amt = (amt); \
|
52
|
+
__typeof__(low) _low = (low); \
|
53
|
+
__typeof__(high) _high = (high); \
|
54
|
+
(amt < low ? low : (amt > high ? high : amt)); \
|
55
|
+
})
|
26
56
|
|
57
|
+
#ifdef map
|
58
|
+
#undef map
|
59
|
+
#endif
|
60
|
+
#define map(x, inMin, inMax, outMin, outMax) \
|
61
|
+
({ \
|
62
|
+
__typeof__(x) _x = (x); \
|
63
|
+
__typeof__(inMin) _inMin = (inMin); \
|
64
|
+
__typeof__(inMax) _inMax = (inMax); \
|
65
|
+
__typeof__(outMin) _outMin = (outMin); \
|
66
|
+
__typeof__(outMax) _outMax = (outMax); \
|
67
|
+
(_x - _inMin) * (_outMax - _outMin) / (_inMax - _inMin) + _outMin; \
|
68
|
+
})
|
69
|
+
|
70
|
+
#ifdef radians
|
71
|
+
#undef radians
|
72
|
+
#endif
|
73
|
+
#define radians(deg) \
|
74
|
+
({ \
|
75
|
+
__typeof__(deg) _deg = (deg); \
|
76
|
+
_deg *DEG_TO_RAD; \
|
77
|
+
})
|
78
|
+
|
79
|
+
#ifdef degrees
|
80
|
+
#undef degrees
|
81
|
+
#endif
|
82
|
+
#define degrees(rad) \
|
83
|
+
({ \
|
84
|
+
__typeof__(rad) _rad = (rad); \
|
85
|
+
_rad *RAD_TO_DEG; \
|
86
|
+
})
|
87
|
+
|
88
|
+
#ifdef sq
|
89
|
+
#undef sq
|
90
|
+
#endif
|
91
|
+
#define sq(x) \
|
92
|
+
({ \
|
93
|
+
__typeof__(x) _x = (x); \
|
94
|
+
_x *_x; \
|
95
|
+
})
|
96
|
+
|
97
|
+
#ifdef abs
|
98
|
+
#undef abs
|
99
|
+
#endif
|
100
|
+
#define abs(x) \
|
101
|
+
({ \
|
102
|
+
__typeof__(x) _x = (x); \
|
103
|
+
_x > 0 ? _x : -_x; \
|
104
|
+
})
|
105
|
+
|
106
|
+
#ifdef min
|
107
|
+
#undef min
|
108
|
+
#endif
|
109
|
+
#define min(a, b) \
|
110
|
+
({ \
|
111
|
+
__typeof__(a) _a = (a); \
|
112
|
+
__typeof__(b) _b = (b); \
|
113
|
+
_a < _b ? _a : _b; \
|
114
|
+
})
|
115
|
+
|
116
|
+
#ifdef max
|
117
|
+
#undef max
|
118
|
+
#endif
|
119
|
+
#define max(a, b) \
|
120
|
+
({ \
|
121
|
+
__typeof__(a) _a = (a); \
|
122
|
+
__typeof__(b) _b = (b); \
|
123
|
+
_a > _b ? _a : _b; \
|
124
|
+
})
|
125
|
+
|
126
|
+
#endif
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <Stream.h>
|
4
|
+
#include <IPAddress.h>
|
5
|
+
|
6
|
+
class Client : public Stream {
|
7
|
+
public:
|
8
|
+
Client() {
|
9
|
+
// The Stream mock defines a String buffer but never puts anyting in it!
|
10
|
+
if (!mGodmodeDataIn) {
|
11
|
+
mGodmodeDataIn = new String;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
~Client() {
|
15
|
+
if (mGodmodeDataIn) {
|
16
|
+
delete mGodmodeDataIn;
|
17
|
+
mGodmodeDataIn = nullptr;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
virtual size_t write(uint8_t value) {
|
21
|
+
mGodmodeDataIn->concat(value);
|
22
|
+
return 1;
|
23
|
+
}
|
24
|
+
|
25
|
+
protected:
|
26
|
+
uint8_t *rawIPAddress(IPAddress &addr) { return addr.raw_address(); }
|
27
|
+
};
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <cassert>
|
4
|
+
#include <inttypes.h>
|
5
|
+
#include <Godmode.h>
|
6
|
+
|
7
|
+
// Does the current board have EEPROM?
|
8
|
+
#ifndef EEPROM_SIZE
|
9
|
+
// In lieu of an "EEPROM.h not found" error for unsupported boards
|
10
|
+
#error "EEPROM library not available for your board"
|
11
|
+
#endif
|
12
|
+
|
13
|
+
class EEPROMClass {
|
14
|
+
private:
|
15
|
+
GodmodeState* state;
|
16
|
+
public:
|
17
|
+
// constructor
|
18
|
+
EEPROMClass() {
|
19
|
+
state = GODMODE();
|
20
|
+
}
|
21
|
+
// array subscript operator
|
22
|
+
uint8_t &operator[](const int index) {
|
23
|
+
assert(index < EEPROM_SIZE);
|
24
|
+
return state->eeprom[index];
|
25
|
+
}
|
26
|
+
|
27
|
+
uint8_t read(const int index) {
|
28
|
+
assert(index < EEPROM_SIZE);
|
29
|
+
return state->eeprom[index];
|
30
|
+
}
|
31
|
+
|
32
|
+
void write(const int index, const uint8_t value) {
|
33
|
+
assert(index < EEPROM_SIZE);
|
34
|
+
state->eeprom[index] = value;
|
35
|
+
}
|
36
|
+
|
37
|
+
void update(const int index, const uint8_t value) {
|
38
|
+
assert(index < EEPROM_SIZE);
|
39
|
+
state->eeprom[index] = value;
|
40
|
+
}
|
41
|
+
|
42
|
+
uint16_t length() { return EEPROM_SIZE; }
|
43
|
+
|
44
|
+
// read any object
|
45
|
+
template <typename T> T &get(const int index, T &object) {
|
46
|
+
uint8_t *ptr = (uint8_t *)&object;
|
47
|
+
for (int i = 0; i < sizeof(T); ++i) {
|
48
|
+
*ptr++ = read(index + i);
|
49
|
+
}
|
50
|
+
return object;
|
51
|
+
}
|
52
|
+
|
53
|
+
// write any object
|
54
|
+
template <typename T> const T &put(const int index, T &object) {
|
55
|
+
const uint8_t *ptr = (const uint8_t *)&object;
|
56
|
+
for (int i = 0; i < sizeof(T); ++i) {
|
57
|
+
write(index + i, *ptr++);
|
58
|
+
}
|
59
|
+
return object;
|
60
|
+
}
|
61
|
+
};
|
62
|
+
|
63
|
+
// global available in Godmode.cpp
|
64
|
+
extern EEPROMClass EEPROM;
|
data/cpp/arduino/Godmode.cpp
CHANGED
@@ -1,38 +1,47 @@
|
|
1
1
|
#include "Godmode.h"
|
2
2
|
#include "HardwareSerial.h"
|
3
3
|
#include "SPI.h"
|
4
|
-
|
5
|
-
GodmodeState godmode = GodmodeState();
|
4
|
+
#include "Wire.h"
|
6
5
|
|
7
6
|
GodmodeState* GODMODE() {
|
8
|
-
return
|
7
|
+
return GodmodeState::getInstance();
|
8
|
+
}
|
9
|
+
|
10
|
+
GodmodeState* GodmodeState::instance = nullptr;
|
11
|
+
|
12
|
+
GodmodeState* GodmodeState::getInstance()
|
13
|
+
{
|
14
|
+
if (instance == nullptr)
|
15
|
+
{
|
16
|
+
instance = new GodmodeState();
|
17
|
+
for (int i = 0; i < MOCK_PINS_COUNT; ++i) {
|
18
|
+
instance->digitalPin[i].setMicrosRetriever(&GodmodeState::getMicros);
|
19
|
+
instance->analogPin[i].setMicrosRetriever(&GodmodeState::getMicros);
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
return instance;
|
9
24
|
}
|
10
25
|
|
11
26
|
unsigned long millis() {
|
12
|
-
|
13
|
-
return godmode->micros / 1000;
|
27
|
+
return GODMODE()->micros / 1000;
|
14
28
|
}
|
15
29
|
|
16
30
|
unsigned long micros() {
|
17
|
-
|
18
|
-
return godmode->micros;
|
31
|
+
return GODMODE()->micros;
|
19
32
|
}
|
20
33
|
|
21
34
|
void delay(unsigned long millis) {
|
22
|
-
|
23
|
-
godmode->micros += millis * 1000;
|
35
|
+
GODMODE()->micros += millis * 1000;
|
24
36
|
}
|
25
37
|
|
26
38
|
void delayMicroseconds(unsigned long micros) {
|
27
|
-
|
28
|
-
godmode->micros += micros;
|
39
|
+
GODMODE()->micros += micros;
|
29
40
|
}
|
30
41
|
|
31
|
-
|
32
42
|
void randomSeed(unsigned long seed)
|
33
43
|
{
|
34
|
-
|
35
|
-
godmode->seed = seed;
|
44
|
+
GODMODE()->seed = seed;
|
36
45
|
}
|
37
46
|
|
38
47
|
long random(long vmax)
|
@@ -81,16 +90,16 @@ void detachInterrupt(uint8_t interrupt) {
|
|
81
90
|
|
82
91
|
// Serial ports
|
83
92
|
#if defined(HAVE_HWSERIAL0)
|
84
|
-
HardwareSerial Serial(&
|
93
|
+
HardwareSerial Serial(&GODMODE()->serialPort[0].dataIn, &GODMODE()->serialPort[0].dataOut, &GODMODE()->serialPort[0].readDelayMicros);
|
85
94
|
#endif
|
86
95
|
#if defined(HAVE_HWSERIAL1)
|
87
|
-
HardwareSerial Serial1(&
|
96
|
+
HardwareSerial Serial1(&GODMODE()->serialPort[1].dataIn, &GODMODE()->serialPort[1].dataOut, &GODMODE()->serialPort[1].readDelayMicros);
|
88
97
|
#endif
|
89
98
|
#if defined(HAVE_HWSERIAL2)
|
90
|
-
HardwareSerial Serial2(&
|
99
|
+
HardwareSerial Serial2(&GODMODE()->serialPort[2].dataIn, &GODMODE()->serialPort[2].dataOut, &GODMODE()->serialPort[2].readDelayMicros);
|
91
100
|
#endif
|
92
101
|
#if defined(HAVE_HWSERIAL3)
|
93
|
-
HardwareSerial Serial3(&
|
102
|
+
HardwareSerial Serial3(&GODMODE()->serialPort[3].dataIn, &GODMODE()->serialPort[3].dataOut, &GODMODE()->serialPort[3].readDelayMicros);
|
94
103
|
#endif
|
95
104
|
|
96
105
|
template <typename T>
|
@@ -100,4 +109,14 @@ inline std::ostream& operator << ( std::ostream& out, const PinHistory<T>& ph )
|
|
100
109
|
}
|
101
110
|
|
102
111
|
// defined in SPI.h
|
103
|
-
SPIClass SPI = SPIClass(&
|
112
|
+
SPIClass SPI = SPIClass(&GODMODE()->spi.dataIn, &GODMODE()->spi.dataOut);
|
113
|
+
|
114
|
+
// defined in Wire.h
|
115
|
+
TwoWire Wire = TwoWire();
|
116
|
+
|
117
|
+
#if defined(EEPROM_SIZE)
|
118
|
+
#include <EEPROM.h>
|
119
|
+
EEPROMClass EEPROM;
|
120
|
+
#endif
|
121
|
+
|
122
|
+
volatile uint8_t __ARDUINO_CI_SFR_MOCK[1024];
|
data/cpp/arduino/Godmode.h
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
#pragma once
|
2
2
|
#include "ArduinoDefines.h"
|
3
|
+
#if defined(__AVR__)
|
3
4
|
#include <avr/io.h>
|
5
|
+
#endif
|
4
6
|
#include "WString.h"
|
5
7
|
#include "PinHistory.h"
|
6
8
|
|
@@ -16,32 +18,49 @@ void delayMicroseconds(unsigned long micros);
|
|
16
18
|
unsigned long millis();
|
17
19
|
unsigned long micros();
|
18
20
|
|
19
|
-
|
20
21
|
#define MOCK_PINS_COUNT 256
|
21
22
|
|
22
|
-
#if defined
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
23
|
+
#if (!defined NUM_SERIAL_PORTS)
|
24
|
+
#if defined(UBRR3H)
|
25
|
+
#define NUM_SERIAL_PORTS 4
|
26
|
+
#elif defined(UBRR2H)
|
27
|
+
#define NUM_SERIAL_PORTS 3
|
28
|
+
#elif defined(UBRR1H)
|
29
|
+
#define NUM_SERIAL_PORTS 2
|
30
|
+
#elif defined(UBRRH) || defined(UBRR0H)
|
31
|
+
#define NUM_SERIAL_PORTS 1
|
32
|
+
#else
|
33
|
+
#define NUM_SERIAL_PORTS 0
|
34
|
+
#endif
|
35
|
+
#endif
|
36
|
+
|
37
|
+
// different EEPROM implementations have different macros that leak out
|
38
|
+
#if !defined(EEPROM_SIZE) && defined(E2END) && (E2END)
|
39
|
+
// public value indicates that feature is available
|
40
|
+
#define EEPROM_SIZE (E2END + 1)
|
41
|
+
// local array size
|
42
|
+
#define _EEPROM_SIZE EEPROM_SIZE
|
30
43
|
#else
|
31
|
-
|
44
|
+
// feature is not available but we want to have the array so other code compiles
|
45
|
+
#define _EEPROM_SIZE (0)
|
32
46
|
#endif
|
33
47
|
|
34
48
|
class GodmodeState {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
49
|
+
private:
|
50
|
+
struct PortDef {
|
51
|
+
String dataIn;
|
52
|
+
String dataOut;
|
53
|
+
unsigned long readDelayMicros;
|
54
|
+
};
|
40
55
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
56
|
+
struct InterruptDef {
|
57
|
+
bool attached;
|
58
|
+
uint8_t mode;
|
59
|
+
};
|
60
|
+
|
61
|
+
uint8_t mmapPorts[MOCK_PINS_COUNT];
|
62
|
+
|
63
|
+
static GodmodeState* instance;
|
45
64
|
|
46
65
|
public:
|
47
66
|
unsigned long micros;
|
@@ -52,6 +71,7 @@ class GodmodeState {
|
|
52
71
|
struct PortDef serialPort[NUM_SERIAL_PORTS];
|
53
72
|
struct InterruptDef interrupt[MOCK_PINS_COUNT]; // not sure how to get actual number
|
54
73
|
struct PortDef spi;
|
74
|
+
uint8_t eeprom[_EEPROM_SIZE];
|
55
75
|
|
56
76
|
void resetPins() {
|
57
77
|
for (int i = 0; i < MOCK_PINS_COUNT; ++i) {
|
@@ -85,12 +105,28 @@ class GodmodeState {
|
|
85
105
|
spi.readDelayMicros = 0;
|
86
106
|
}
|
87
107
|
|
108
|
+
void resetMmapPorts() {
|
109
|
+
for (int i = 0; i < MOCK_PINS_COUNT; ++i) {
|
110
|
+
mmapPorts[i] = 1;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
void resetEEPROM() {
|
115
|
+
#if defined(EEPROM_SIZE)
|
116
|
+
for(int i = 0; i < EEPROM_SIZE; ++i) {
|
117
|
+
eeprom[i] = 255;
|
118
|
+
}
|
119
|
+
#endif
|
120
|
+
}
|
121
|
+
|
88
122
|
void reset() {
|
89
123
|
resetClock();
|
90
124
|
resetPins();
|
91
125
|
resetInterrupts();
|
92
126
|
resetPorts();
|
93
127
|
resetSPI();
|
128
|
+
resetMmapPorts();
|
129
|
+
resetEEPROM();
|
94
130
|
seed = 1;
|
95
131
|
}
|
96
132
|
|
@@ -98,8 +134,27 @@ class GodmodeState {
|
|
98
134
|
return NUM_SERIAL_PORTS;
|
99
135
|
}
|
100
136
|
|
101
|
-
|
102
|
-
|
137
|
+
// Using this for anything other than unit testing arduino_ci itself
|
138
|
+
// is unsupported at the moment
|
139
|
+
void overrideClockTruth(unsigned long (*getMicros)(void)) {
|
140
|
+
}
|
141
|
+
|
142
|
+
// singleton pattern
|
143
|
+
static GodmodeState* getInstance();
|
144
|
+
|
145
|
+
static unsigned long getMicros() {
|
146
|
+
return instance->micros;
|
147
|
+
}
|
148
|
+
|
149
|
+
uint8_t* pMmapPort(uint8_t port) { return &mmapPorts[port]; }
|
150
|
+
uint8_t mmapPortValue(uint8_t port) { return mmapPorts[port]; }
|
151
|
+
|
152
|
+
// C++ 11, declare as public for better compiler error messages
|
153
|
+
GodmodeState(GodmodeState const&) = delete;
|
154
|
+
void operator=(GodmodeState const&) = delete;
|
155
|
+
|
156
|
+
private:
|
157
|
+
GodmodeState() {
|
103
158
|
reset();
|
104
159
|
}
|
105
160
|
};
|
@@ -121,6 +176,17 @@ void detachInterrupt(uint8_t interrupt);
|
|
121
176
|
inline void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0) {}
|
122
177
|
inline void noTone(uint8_t _pin) {}
|
123
178
|
|
179
|
+
// These definitions allow the following to compile (see issue #193):
|
180
|
+
// https://github.com/arduino-libraries/Ethernet/blob/master/src/utility/w5100.h:341
|
181
|
+
// we allow one byte per port which "wastes" 224 bytes, but makes the code easier
|
182
|
+
#if defined(__AVR__)
|
183
|
+
#define digitalPinToBitMask(pin) (1)
|
184
|
+
#define digitalPinToPort(pin) (pin)
|
185
|
+
#define portInputRegister(port) (GODMODE()->pMmapPort(port))
|
186
|
+
#define portOutputRegister(port) (GODMODE()->pMmapPort(port))
|
187
|
+
#else
|
188
|
+
// we don't (yet) support other boards
|
189
|
+
#endif
|
190
|
+
|
124
191
|
|
125
192
|
GodmodeState* GODMODE();
|
126
|
-
|