Skip to content

Commit 42aaa39

Browse files
committed
Wire implementation converted from map to deque, courtesy of James Foster
1 parent 226bc18 commit 42aaa39

File tree

2 files changed

+222
-175
lines changed

2 files changed

+222
-175
lines changed
Lines changed: 44 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,68 @@
11
#include <ArduinoUnitTests.h>
22
#include <Arduino.h>
3-
#include <vector>
4-
#include <map>
5-
63
#include <Wire.h>
74
using namespace std;
85

9-
unittest(beginAsMaster) {
10-
Wire.begin();
11-
assertTrue(Wire.getIsMaster());
12-
}
13-
14-
unittest(beginAsSlave) {
15-
Wire.begin(13);
16-
assertFalse(Wire.getIsMaster());
17-
}
18-
19-
unittest(getMasterAddress) {
20-
Wire.begin();
21-
assertEqual(0, Wire.getAddress());
22-
}
23-
24-
unittest(getSlaveAddress) {
25-
Wire.begin(13);
26-
assertEqual(13, Wire.getAddress());
27-
}
28-
296
unittest(begin_write_end) {
7+
deque<uint8_t>* mosi = Wire.getMosi(14);
8+
assertEqual(0, mosi->size());
309
Wire.begin();
3110
Wire.beginTransmission(14);
32-
assertEqual(14, Wire.getAddress());
33-
34-
assertTrue(Wire.isTxBufferEmpty());
35-
3611
Wire.write(0x07);
3712
Wire.write(0x0E);
38-
assertEqual(0x07, Wire.getTxBufferElement(0));
39-
assertEqual(0x0E, Wire.getTxBufferElement(1));
40-
4113
Wire.endTransmission();
42-
assertTrue(Wire.isTxBufferEmpty());
43-
44-
vector<int> finalData = {0x07, 0x0E};
45-
assert(finalData == Wire.getDataWritten(14));
14+
assertEqual(2, mosi->size());
15+
assertEqual(0x07, mosi->front());
16+
mosi->pop_front();
17+
assertEqual(0x0E, mosi->front());
18+
mosi->pop_front();
19+
assertEqual(0, mosi->size());
4620
}
4721

4822
unittest(readTwo_writeOne) {
4923
Wire.begin();
50-
51-
vector<int> data1 = {0x07, 0x0E}, data2 = {1, 4, 7};
52-
Wire.setDataToRead(19, data1);
53-
Wire.setDataToRead(34, data2);
24+
deque<uint8_t>* miso;
25+
miso = Wire.getMiso(19);
26+
miso->push_back(0x07);
27+
miso->push_back(0x0E);
28+
miso = Wire.getMiso(34);
29+
miso->push_back(1);
30+
miso->push_back(4);
31+
miso->push_back(7);
5432

55-
assertEqual(2, Wire.requestFrom(19, 1));
56-
assertEqual(3, Wire.requestFrom(34, 1));
57-
assertEqual(data1.size() + data2.size(), Wire.getRxBufferSize());
33+
assertEqual(0, Wire.requestFrom(19, 3));
34+
assertEqual(2, Wire.requestFrom(19, 2));
35+
assertEqual(2, Wire.available());
36+
assertEqual(0x07, Wire.read());
37+
assertEqual(1, Wire.available());
38+
assertEqual(0x0E, Wire.read());
39+
assertEqual(0, Wire.available());
40+
assertEqual(3, Wire.requestFrom(34, 3));
41+
assertEqual(3, Wire.available());
42+
assertEqual(1, Wire.read());
43+
assertEqual(2, Wire.available());
44+
assertEqual(4, Wire.read());
45+
assertEqual(1, Wire.available());
46+
assertEqual(7, Wire.read());
47+
assertEqual(0, Wire.available());
5848

5949
Wire.beginTransmission(47);
60-
assertEqual(47, Wire.getAddress());
61-
assertTrue(Wire.isTxBufferEmpty());
62-
for (int i = 0; i < 5; i++) {
63-
Wire.write(Wire.read());
50+
for (int i = 1; i < 4; i++) {
51+
Wire.write(i * 2);
6452
}
65-
assertEqual(0x07, Wire.getTxBufferElement(0));
66-
assertEqual(0x0E, Wire.getTxBufferElement(1));
67-
assertEqual(1, Wire.getTxBufferElement(2));
68-
assertEqual(4, Wire.getTxBufferElement(3));
69-
assertEqual(7, Wire.getTxBufferElement(4));
70-
7153
Wire.endTransmission();
72-
assertTrue(Wire.isTxBufferEmpty());
54+
deque<uint8_t>* mosi = Wire.getMosi(47);
7355

74-
vector<int> finalData = {0x07, 0x0E, 1, 4, 7};
75-
assert(finalData == Wire.getDataWritten(47));
56+
assertEqual(3, mosi->size());
57+
assertEqual(2, mosi->front());
58+
mosi->pop_front();
59+
assertEqual(2, mosi->size());
60+
assertEqual(4, mosi->front());
61+
mosi->pop_front();
62+
assertEqual(1, mosi->size());
63+
assertEqual(6, mosi->front());
64+
mosi->pop_front();
65+
assertEqual(0, mosi->size());
7666
}
7767

7868
unittest_main()

0 commit comments

Comments
 (0)