-
Notifications
You must be signed in to change notification settings - Fork 0
/
CommandTerminal.cpp
124 lines (104 loc) · 3.04 KB
/
CommandTerminal.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// CommandCommandTerminal.cpp
// StepperMotorSpeed
//
// Created by Zakk Hoyt on 2/4/16.
// Copyright © 2016 Zakk Hoyt. All rights reserved.
//
#include "CommandTerminal.h"
CommandTerminal::CommandTerminal()
: g_serialString(""),
paramDelim('|'),
setDelim(':') {
}
CommandTerminal::CommandTerminal(char paramDelim, char setDelim)
: g_serialString("") {
this->paramDelim = paramDelim;
this->setDelim = setDelim;
}
CommandTerminal::~CommandTerminal() {
}
void CommandTerminal::start(long baud) {
Serial.begin(baud);
Serial.flush();
}
uint16_t CommandTerminal::readSerial() {
while (Serial.available()) {
delay(1);
char c = Serial.read();
if (c == '\n') {
parseParams();
return numParams;
}
g_serialString += c;
return 0;
}
}
int CommandTerminal::valueForArg(String arg) {
for(int i = 0; i < 16; i++) {
CommandTerminalParam param = params[i];
if(param.arg.equals(arg)) {
return param.value;
}
}
return -1;
}
void CommandTerminal::appendParam(String cmdSet, int index) {
int colonIndex = cmdSet.indexOf(setDelim);
String arg = cmdSet.substring(0, colonIndex);
String valueString = cmdSet.substring(colonIndex+1, cmdSet.length());
int value = valueString.toInt();
CommandTerminalParam param = CommandTerminalParam();
param.arg = arg;
param.value = value;
params[index] = param;
numParams = index+1;
}
void CommandTerminal::printParams() {
Serial.println("************** command list ************");
for(int i = 0; i < numParams; i++) {
CommandTerminalParam param = params[i];
Serial.print("i: "); Serial.println(i);
Serial.print("param.arg: "); Serial.println(param.arg);
Serial.print("param.value: "); Serial.println(param.value);
}
}
void CommandTerminal::clearParams() {
for(int i = 0; i < 16; i++) {
CommandTerminalParam param = CommandTerminalParam();
param.arg = "";
param.value = -1;
params[i] = param;
}
numParams = 0;
}
void CommandTerminal::parseParams() {
if(g_serialString.length() > 0) {
clearParams();
// Command strings will look like:
// x:3|y:0|r:255|g:255|b:128
// x:4|y:0|r:255|g:128|b:128
// x:5|y:0|r:234|g:188|b:164
// x:6|y:0|r:234|g:188|b:164
// First split by paramDelim
const int kMaxCommands = 16;
int pipeIndexex[kMaxCommands] = {};
int pipeIndex = -1;
for(int x = 0; x < 16; x++) {
pipeIndex = g_serialString.indexOf(paramDelim);
if (pipeIndex > -1) {
// get text left of index
String cmdSet = g_serialString.substring(0, pipeIndex);
appendParam(cmdSet, x);
// Remove cmdSet from g_serialString
String n = g_serialString.substring(pipeIndex+1);
g_serialString = n;
} else {
// Last command
appendParam(g_serialString, x);
g_serialString = "";
break;
}
}
}
}