-
Notifications
You must be signed in to change notification settings - Fork 0
/
Commander.cpp
53 lines (49 loc) · 1.55 KB
/
Commander.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
50
51
52
53
#include "Commander.h"
Command Commander::receive(char const ch) {
CommandType type = COMMAND_NOT_FOUND;
CommandPayload payload = { false };
if (ch == CHAR_CYCLE_WATER_ON) {
type = COMMAND_CYCLE_WATER;
payload.is = true;
} else if (ch == CHAR_CYCLE_WATER_OFF) {
type = COMMAND_CYCLE_WATER;
} else if (ch == CHAR_INPUT_WATER_ON) {
type = COMMAND_INPUT_WATER;
payload.is = true;
} else if (ch == CHAR_INPUT_WATER_OFF) {
type = COMMAND_INPUT_WATER;
} else if (ch == CHAR_AIR_PUMP_ON) {
type = COMMAND_AIR_PUMP;
payload.is = true;
} else if (ch == CHAR_AIR_PUMP_OFF) {
type = COMMAND_AIR_PUMP;
} else if (ch == CHAR_MEASURE_EC) {
type = COMMAND_MEASURE_EC;
} else if (ch == CHAR_OBSERVE_MODE_OFF) {
type = COMMAND_OBSERVE_MODE_OFF;
} else if (ch == CHAR_OBSERVE_MODE_ABOVE) {
type = COMMAND_BUFFER;
this->bufferType = COMMAND_OBSERVE_MODE_ABOVE;
} else if (ch == CHAR_OBSERVE_MODE_BELOW) {
type = COMMAND_BUFFER;
this->bufferType = COMMAND_OBSERVE_MODE_BELOW;
} else if (this->bufferType != COMMAND_NOT_FOUND && isDigit(ch) || ch == '.') {
type = COMMAND_BUFFER;
this->bufferPayload += ch;
if (this->bufferPayload.length() >= 4) {
payload.ec = this->bufferPayload.toFloat();
if (payload.ec != 0)
type = this->bufferType;
else
type = COMMAND_NOT_FOUND;
}
}
if (type != COMMAND_BUFFER) {
this->clearBuffer();
}
return { type, payload };
}
void Commander::clearBuffer() {
this->bufferType = COMMAND_NOT_FOUND;
this->bufferPayload = "";
}