-
Notifications
You must be signed in to change notification settings - Fork 0
/
Serial.ino
133 lines (119 loc) · 4.62 KB
/
Serial.ino
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
125
126
127
128
129
130
131
132
133
/*
#### WaterBunny ####
Module: Serial
Description: Functions to communicate to Bunny
Copyright (C) 2013 WaterBunny
Torsten Amshove <torsten@amshove.net>, Stefan Moestel <stefan@moestel.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
///////////////////////
//// Init-Funktion ////
///////////////////////
void serial_init(){
Serial.begin(SERIAL_BAUD);
serialInputString.reserve(10); // Max. Size in byte of serial command
}
//////////////////////
//// Serial Event ////
//////////////////////
// This function is called when data is available on serial
// http://arduino.cc/en/Reference/SerialEvent
void serialEvent(){
while (Serial.available()){
char inChar = (char)Serial.read();
if((inChar >= 32 && inChar < 127) || inChar == 13 || inChar == 10){ // Ignore non-printable characters (beside CR/LF (ENTER) and Space)
serialInputString += inChar;
Serial.print(inChar); // Show command in Terminal
if (inChar == '\n'){
serialInputString.trim(); // Remove line break
serial_process_cmd(); // Interpret given command
serialInputString = ""; // Reset command-variable
Serial.print(F("> ")); // Show prompt
}
}
}
}
///////////////////////////
//// Show Command Help ////
///////////////////////////
void serial_show_help(){
Serial.println(F("### Welcome to WaterBunny CLI ###"));
Serial.println(F("Try one of these to talk to the Bunny"));
Serial.println(F(" help - Show this help and the available commands"));
Serial.println(F(" start - Start recording of data"));
Serial.println(F(" stop - Stop recording of data"));
Serial.println(F(" watermark - Write watermark to logfile"));
Serial.println(F(" read - Gives you the output of the logfile"));
Serial.println(F(" clear - Clears the logfile"));
Serial.println(F(" time - Displays the Date and Time"));
Serial.println(F(" settime - Configures the Date and Time"));
Serial.println(F(" Use: settime HH:MM:SS DD-MM-YYYY"));
Serial.println(F(" health - Show some health of Bunny"));
}
//////////////////////////////////////
//// Process given serial command ////
//////////////////////////////////////
void serial_process_cmd(){
if(serialInputString == "help" || serialInputString == ""){
// Show help
serial_show_help();
}else if(serialInputString == "start"){
// Start recording of data
startRecording = true;
}else if(serialInputString == "stop"){
// Start recording of data
startRecording = false;
}else if(serialInputString == "watermark"){
// Write watermark to logfile
recordWatermark = true;
}else if(serialInputString == "read"){
// Print content of Logfile
Serial.println(F("---- START LOG DUMP ----"));
Serial.println(F(STORAGE_HEADER));
storage_read();
Serial.println(F("---- END LOG DUMP ----"));
}else if(serialInputString == "clear"){
// Clear the logfile
storage_clear();
Serial.println(F("LogFile cleared"));
}else if(serialInputString == "time"){
// Displays the Date and Time
Serial.println(rtc_get_timestamp());
}else if(serialInputString.substring(0,7) == "settime"){
// Configures the Date and Time
rtc_set_time(serialInputString.substring(8));
}else if(serialInputString == "health"){
// Show some Health-Status
Serial.println(F("---- START HEALTH ----"));
// General
Serial.print(F("RAM FREE: "));
Serial.println(free_ram());
// RTC
rtc_health();
// Storage
storage_health();
Serial.println(F("---- END HEALTH ----"));
}else{
// Command not found
Serial.println(F("Command not found"));
}
}
///////////////////////////////////////////////////////////
//// get free RAM ////
//// http://playground.arduino.cc/Code/AvailableMemory ////
///////////////////////////////////////////////////////////
int free_ram(){
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}