Skip to content

Commit 8a803dc

Browse files
author
nicolaspanel
committed
improve testing and documentation
1 parent 5361118 commit 8a803dc

File tree

3 files changed

+109
-86
lines changed

3 files changed

+109
-86
lines changed

test/encoder_test/encoder_test.ino

Lines changed: 96 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -22,137 +22,168 @@ void setup()
2222
}
2323

2424
test(attachEncoder)
25-
{
26-
int initial_memory = freeMemory();
27-
28-
EncoderFirmata *encoder = new EncoderFirmata();
25+
{
26+
EncoderFirmata encoder;
2927
byte encoderNum = 0, pin1 = 2, pin2 = 3;
3028

31-
assertFalse(encoder->isEncoderAttached(encoderNum));
29+
assertFalse(encoder.isEncoderAttached(encoderNum));
3230

33-
encoder->attachEncoder(encoderNum, pin1, pin2);
31+
encoder.attachEncoder(encoderNum, pin1, pin2);
32+
33+
assertTrue(encoder.isEncoderAttached(encoderNum));
34+
}
3435

35-
assertTrue(encoder->isEncoderAttached(encoderNum));
36+
test(handleAttachEncoderMessage)
37+
{
38+
assertTestPass(attachEncoder);
39+
EncoderFirmata encoder;
40+
byte encoderNum = 0, pin1 = 2, pin2 = 3;
3641

37-
delete encoder;
38-
assertEqual(0, initialMemory - freeMemory()); // no memory leak
42+
assertFalse(encoder.isEncoderAttached(encoderNum));
43+
byte message[]={ENCODER_ATTACH, encoderNum, pin1, pin2};
44+
encoder.handleSysex(ENCODER_DATA, 4, message);
45+
46+
assertTrue(encoder.isEncoderAttached(encoderNum));
3947
}
4048

4149
test(detachEncoder)
4250
{
43-
assertTestPass(attachEncoder);
44-
int initial_memory = freeMemory();
45-
46-
EncoderFirmata *encoder = new EncoderFirmata();
51+
EncoderFirmata encoder;
4752
byte encoderNum = 0, pin1 = 2, pin2 = 3;
48-
encoder->attachEncoder(encoderNum, pin1, pin2);
53+
encoder.attachEncoder(encoderNum, pin1, pin2);
54+
55+
encoder.detachEncoder(encoderNum);
56+
assertFalse(encoder.isEncoderAttached(encoderNum));
57+
}
4958

50-
encoder->detachEncoder(encoderNum);
51-
assertFalse(encoder->isEncoderAttached(encoderNum));
59+
test(handeDetachEncoderMessage)
60+
{
5261

53-
delete encoder;
54-
assertEqual(0, initialMemory - freeMemory()); // no memory leak
62+
EncoderFirmata encoder;
63+
byte encoderNum = 0, pin1 = 2, pin2 = 3;
64+
encoder.attachEncoder(encoderNum, pin1, pin2);
65+
66+
byte message[]={ENCODER_DETACH, encoderNum};
67+
encoder.handleSysex(ENCODER_DATA, 2, message);
68+
assertFalse(encoder.isEncoderAttached(encoderNum));
5569
}
5670

71+
5772
test(handlePinModes)
5873
{
59-
int initial_memory = freeMemory();
60-
61-
EncoderFirmata *encoder = new EncoderFirmata();
74+
EncoderFirmata encoder;
6275

63-
assertTrue(encoder->handlePinMode(2, INPUT)); // 2 is interrupt
64-
assertFalse(encoder->handlePinMode(1, INPUT)); // 1 is NOT interrupt
65-
66-
delete encoder;
67-
assertEqual(0, initialMemory - freeMemory()); // no memory leak
76+
assertTrue(encoder.handlePinMode(2, INPUT)); // 2 is interrupt
77+
assertFalse(encoder.handlePinMode(1, INPUT)); // 1 is NOT interrupt
6878
}
6979

7080
test(reportEncoderPosition)
7181
{
7282
assertTestPass(attachEncoder);
73-
int initial_memory = freeMemory();
7483

75-
EncoderFirmata *encoder = new EncoderFirmata();
84+
EncoderFirmata encoder;
7685
byte encoderNum = 0, pin1 = 2, pin2 = 3;
77-
encoder->attachEncoder(encoderNum, pin1, pin2);
86+
encoder.attachEncoder(encoderNum, pin1, pin2);
7887

7988
stream.flush();
80-
encoder->reportPosition(encoderNum);
89+
encoder.reportPosition(encoderNum);
8190
assertEqual(stream.bytesWritten().length(), 6);
91+
}
92+
93+
test(handeReportEncoderPositionMessage)
94+
{
95+
EncoderFirmata encoder;
96+
byte encoderNum = 0, pin1 = 2, pin2 = 3;
97+
encoder.attachEncoder(encoderNum, pin1, pin2);
8298

83-
delete encoder;
84-
assertEqual(0, initialMemory - freeMemory()); // no memory leak
99+
stream.flush();
100+
byte message[]={ENCODER_REPORT_POSITION, encoderNum};
101+
encoder.handleSysex(ENCODER_DATA, 2, message);
102+
assertEqual(stream.bytesWritten().length(), 6);
85103
}
86104

87105
test(reportEncodersPositions)
88106
{
89107
assertTestPass(attachEncoder);
90-
int initial_memory = freeMemory();
91108

92-
EncoderFirmata *encoder = new EncoderFirmata();
109+
EncoderFirmata encoder;
93110
byte encoderNum = 0, pin1 = 2, pin2 = 3;
94-
encoder->attachEncoder(encoderNum, pin1, pin2);
111+
encoder.attachEncoder(encoderNum, pin1, pin2);
95112

96113
stream.flush();
97-
encoder->reportPositions();
114+
encoder.reportPositions();
98115
assertEqual(stream.bytesWritten().length(), 9);
99-
100-
delete encoder;
101-
assertEqual(0, initialMemory - freeMemory()); // no memory leak
102116
}
103117

104-
test(enableAutomaticReports)
118+
test(handleReportEncodersPositionsMessage)
105119
{
106-
int initial_memory = freeMemory();
107120

108-
EncoderFirmata *encoder = new EncoderFirmata();
109-
assertFalse(encoder->isReportingEnabled());
110-
encoder->toggleAutoReport(true);
111-
assertTrue(encoder->isReportingEnabled());
112-
encoder->toggleAutoReport(false);
113-
assertFalse(encoder->isReportingEnabled());
121+
EncoderFirmata encoder;
122+
byte encoderNum = 0, pin1 = 2, pin2 = 3;
123+
encoder.attachEncoder(encoderNum, pin1, pin2);
114124

115-
delete encoder;
116-
assertEqual(0, initialMemory - freeMemory()); // no memory leak
125+
stream.flush();
126+
byte message[]={ENCODER_REPORT_POSITIONS};
127+
encoder.handleSysex(ENCODER_DATA, 1, message);
128+
assertEqual(stream.bytesWritten().length(), 9);
129+
}
130+
131+
test(enableAutomaticReports)
132+
{
133+
EncoderFirmata encoder;
134+
assertFalse(encoder.isReportingEnabled());
135+
encoder.toggleAutoReport(true);
136+
assertTrue(encoder.isReportingEnabled());
137+
encoder.toggleAutoReport(false);
138+
assertFalse(encoder.isReportingEnabled());
139+
}
140+
141+
test(handleEnableAutomaticReportsMessage)
142+
{
143+
EncoderFirmata encoder;
144+
assertFalse(encoder.isReportingEnabled());
145+
146+
byte enableMessage[]={ENCODER_REPORT_AUTO, 0x01};
147+
encoder.handleSysex(ENCODER_DATA, 2, enableMessage);
148+
149+
assertTrue(encoder.isReportingEnabled());
150+
151+
byte disableMessage[]={ENCODER_REPORT_AUTO, 0x00};
152+
encoder.handleSysex(ENCODER_DATA, 2, disableMessage);
153+
154+
assertFalse(encoder.isReportingEnabled());
117155
}
118156

119157
test(fullReport)
120158
{
121159
assertTestPass(enableAutomaticReports);
122-
int initial_memory = freeMemory();
123160

124-
EncoderFirmata *encoder = new EncoderFirmata();
161+
EncoderFirmata encoder;
125162

126163
stream.flush();
127-
encoder->report();
164+
encoder.report();
128165
assertEqual(stream.bytesWritten().length(), 0); // reports disable
129166

130-
encoder->toggleAutoReport(true);
167+
encoder.toggleAutoReport(true);
131168

132169
stream.flush();
133-
encoder->report();
170+
encoder.report();
134171
assertEqual(stream.bytesWritten().length(), 3); // reports enable
135-
136-
delete encoder;
137-
assertEqual(0, initialMemory - freeMemory()); // no memory leak
138172
}
139173

140174
test(resetEncoder)
141175
{
142176
assertTestPass(attachEncoder);
143-
int initial_memory = freeMemory();
144177

145-
EncoderFirmata *encoder = new EncoderFirmata();
178+
EncoderFirmata encoder;
146179
byte encoderNum = 0, pin1 = 2, pin2 = 3;
147-
encoder->attachEncoder(encoderNum, pin1, pin2);
180+
encoder.attachEncoder(encoderNum, pin1, pin2);
148181

149-
encoder->reset();
150-
assertFalse(encoder->isEncoderAttached(encoderNum));
151-
152-
delete encoder;
153-
assertEqual(0, initialMemory - freeMemory()); // no memory leak
182+
encoder.reset();
183+
assertFalse(encoder.isEncoderAttached(encoderNum));
154184
}
155185

186+
156187
void loop()
157188
{
158189
Test::run();

utility/EncoderFirmata.cpp

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,18 @@ EncoderFirmata::EncoderFirmata()
3232
}
3333
autoReport = false;
3434
}
35-
EncoderFirmata::~EncoderFirmata()
36-
{
37-
byte encoder;
38-
for(encoder=0; encoder<MAX_ENCODERS; encoder++)
39-
{
40-
detachEncoder(encoder);
41-
}
42-
delete[] encoders;
43-
}
4435

4536
void EncoderFirmata::attachEncoder(byte encoderNum, byte pinANum, byte pinBNum)
4637
{
4738
if (isEncoderAttached(encoderNum))
4839
{
49-
Firmata.sendString(F("Encoder Warning: encoder is already attached. Operation cancelled."));
40+
Firmata.sendString("Encoder Warning: encoder is already attached. Operation cancelled.");
5041
return;
5142
}
5243

5344
if (!IS_PIN_INTERRUPT(pinANum) || !IS_PIN_INTERRUPT(pinBNum))
5445
{
55-
Firmata.sendString(F("Encoder Warning: For better performences, you should only use Interrput pins."));
46+
Firmata.sendString("Encoder Warning: For better performences, you should only use Interrput pins.");
5647
}
5748
encoders[encoderNum] = new Encoder(pinANum, pinBNum);
5849
}
@@ -113,14 +104,14 @@ boolean EncoderFirmata::handleSysex(byte command, byte argc, byte *argv)
113104

114105
if (encoderCommand == ENCODER_REPORT_POSITIONS)
115106
{
116-
reportEncodersPositions();
107+
reportPositions();
117108
return true;
118109
}
119110

120111
if (encoderCommand == ENCODER_RESET_POSITION)
121112
{
122113
encoderNum = argv[1];
123-
resetEncoderPosition(encoderNum);
114+
resetPosition(encoderNum);
124115
return true;
125116
}
126117
if (encoderCommand == ENCODER_REPORT_AUTO)
@@ -137,7 +128,7 @@ boolean EncoderFirmata::handleSysex(byte command, byte argc, byte *argv)
137128
return true;
138129
}
139130

140-
Firmata.sendString(F("Encoder Error: Invalid command"));
131+
Firmata.sendString("Encoder Error: Invalid command");
141132
}
142133
return false;
143134
}
@@ -156,15 +147,15 @@ void EncoderFirmata::report()
156147
{
157148
if (autoReport)
158149
{
159-
reportEncodersPositions();
150+
reportPositions();
160151
}
161152
}
162153

163154
boolean EncoderFirmata::isEncoderAttached(byte encoderNum)
164155
{
165156
if (encoderNum>=MAX_ENCODERS)
166157
{
167-
Firmata.sendString(F("Encoder Error: encoder number should be less than 5. Operation cancelled."));
158+
Firmata.sendString("Encoder Error: encoder number should be less than 5. Operation cancelled.");
168159
return false;
169160
}
170161
if (encoders[encoderNum])
@@ -177,7 +168,7 @@ boolean EncoderFirmata::isEncoderAttached(byte encoderNum)
177168
}
178169
}
179170

180-
void EncoderFirmata::resetEncoderPosition(byte encoderNum)
171+
void EncoderFirmata::resetPosition(byte encoderNum)
181172
{
182173
if (isEncoderAttached(encoderNum))
183174
{
@@ -201,7 +192,7 @@ void EncoderFirmata::reportPosition(byte encoderNum)
201192
}
202193
}
203194
// Report all attached encoders positions (one message for all encoders)
204-
void EncoderFirmata::reportEncodersPositions()
195+
void EncoderFirmata::reportPositions()
205196
{
206197
Firmata.write(START_SYSEX);
207198
Firmata.write(ENCODER_DATA);

utility/EncoderFirmata.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ class EncoderFirmata:public FirmataFeature
4747
{
4848
public:
4949
EncoderFirmata();
50-
~EncoderFirmata();
50+
//~EncoderFirmata(); => never destroy in practice
51+
5152
// FirmataFeature implementation
5253
boolean handlePinMode(byte pin, int mode);
5354
void handleCapability(byte pin);
@@ -60,8 +61,8 @@ class EncoderFirmata:public FirmataFeature
6061
void attachEncoder(byte encoderNum, byte pinANum, byte pinBNum);
6162
void detachEncoder(byte encoderNum);
6263
void reportPosition(byte encoderNum);
63-
void reportEncodersPositions();
64-
void resetEncoderPosition(byte encoderNum);
64+
void reportPositions();
65+
void resetPosition(byte encoderNum);
6566
void toggleAutoReport(bool report);
6667
bool isReportingEnabled();
6768

0 commit comments

Comments
 (0)