forked from autowp/arduino-canhacker
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCanHackerLineReader.cpp
49 lines (42 loc) · 1.26 KB
/
CanHackerLineReader.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "CanHackerLineReader.h"
CanHackerLineReader::CanHackerLineReader(CanHacker *vCanHacker) {
_canHacker = vCanHacker;
index = 0;
memset(buffer, 0, sizeof(buffer));
}
CanHacker::ERROR CanHackerLineReader::processChar(char rxChar) {
switch (rxChar) {
case '\r':
case '\n':
if (index > 0) {
buffer[index] = '\0';
CanHacker::ERROR error = _canHacker->receiveCommand(buffer, index);
index = 0;
if (error != CanHacker::ERROR_OK) {
return error;
}
}
break;
case '\0':
break;
default:
if (index < COMMAND_MAX_LENGTH) {
buffer[index++] = rxChar;
} else {
index = 0;
return CanHacker::ERROR_INVALID_COMMAND;
}
break;
}
return CanHacker::ERROR_OK;
}
CanHacker::ERROR CanHackerLineReader::process() {
Stream *stream = _canHacker->getInterfaceStream();
while (stream->available()) {
CanHacker::ERROR error = processChar(stream->read());
if (error != CanHacker::ERROR_OK) {
return error;
}
}
return CanHacker::ERROR_OK;
}