Monitor für das Tasterprogramm
Dependents: 19_Taster_BSW_oo 19_Taster_a
Fork of monitor by
monitor.cpp@2:e330478fb0b6, 2014-08-03 (annotated)
- Committer:
- rs27
- Date:
- Sun Aug 03 08:11:49 2014 +0000
- Revision:
- 2:e330478fb0b6
- Parent:
- 1:19313470f629
- Child:
- 3:254f7ffb9b32
neue monitor Befehle
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rs27 | 0:f0fbbfdca478 | 1 | |
rs27 | 0:f0fbbfdca478 | 2 | #include <stdarg.h> |
rs27 | 0:f0fbbfdca478 | 3 | #include <ctype.h> |
rs27 | 0:f0fbbfdca478 | 4 | #include "monitor.h" |
rs27 | 1:19313470f629 | 5 | #include "ConfigFile.h" |
rs27 | 1:19313470f629 | 6 | #include "SDFileSystem.h" |
rs27 | 1:19313470f629 | 7 | #include "FATDirHandle.h" |
rs27 | 0:f0fbbfdca478 | 8 | |
rs27 | 1:19313470f629 | 9 | extern SDFileSystem sd; // definiert in main |
rs27 | 1:19313470f629 | 10 | extern Serial pc; // definiert in main |
rs27 | 2:e330478fb0b6 | 11 | extern Serial com; // definiert in main |
rs27 | 1:19313470f629 | 12 | extern Buffer <char> buf; // definiert in main |
rs27 | 1:19313470f629 | 13 | extern ConfigFile cfg; // definiert in main |
rs27 | 1:19313470f629 | 14 | extern char value[BUFSIZ]; // definiert in main |
rs27 | 2:e330478fb0b6 | 15 | extern float soll_wert; // definiert in main |
rs27 | 2:e330478fb0b6 | 16 | extern bool t_flag; // definiert in main |
rs27 | 2:e330478fb0b6 | 17 | extern bool f_flag; // definiert in main |
rs27 | 2:e330478fb0b6 | 18 | extern int drops; // definiert in main |
rs27 | 1:19313470f629 | 19 | |
rs27 | 2:e330478fb0b6 | 20 | #define COMMAND_MAX 13 |
rs27 | 1:19313470f629 | 21 | #define COMMAND_LEN 7 |
rs27 | 0:f0fbbfdca478 | 22 | |
rs27 | 2:e330478fb0b6 | 23 | const char command[COMMAND_MAX][COMMAND_LEN] = {"DATE","DEL","DIR","DROPS","DUMP","FILL","GO","HELP","LIST","SET","SOLL","STOP","TIME"}; |
rs27 | 1:19313470f629 | 24 | |
rs27 | 1:19313470f629 | 25 | char buffer[100]; |
rs27 | 1:19313470f629 | 26 | |
rs27 | 1:19313470f629 | 27 | // globale Variablen |
rs27 | 1:19313470f629 | 28 | |
rs27 | 1:19313470f629 | 29 | char com_line[COM_LINE_LEN]; // Aktuelle Eingabezeile |
rs27 | 1:19313470f629 | 30 | uint8_t ComLinePtr, ComLineTop; // Cursor Position und Zeilenlänge |
rs27 | 1:19313470f629 | 31 | |
rs27 | 1:19313470f629 | 32 | uint8_t cr_flag; |
rs27 | 1:19313470f629 | 33 | |
rs27 | 1:19313470f629 | 34 | // uint16_t status[8]; |
rs27 | 0:f0fbbfdca478 | 35 | |
rs27 | 0:f0fbbfdca478 | 36 | //----------------------------------------------------------------------------- |
rs27 | 1:19313470f629 | 37 | // initialisierung |
rs27 | 0:f0fbbfdca478 | 38 | |
rs27 | 1:19313470f629 | 39 | void mon_init(void) |
rs27 | 0:f0fbbfdca478 | 40 | { |
rs27 | 1:19313470f629 | 41 | |
rs27 | 0:f0fbbfdca478 | 42 | uint8_t i; |
rs27 | 0:f0fbbfdca478 | 43 | |
rs27 | 0:f0fbbfdca478 | 44 | for (i = 0; i < COM_LINE_LEN; com_line[i++] = 0); |
rs27 | 0:f0fbbfdca478 | 45 | ComLinePtr = ComLineTop = 0; |
rs27 | 0:f0fbbfdca478 | 46 | cr_flag = false; |
rs27 | 0:f0fbbfdca478 | 47 | |
rs27 | 0:f0fbbfdca478 | 48 | // 0 Kanal ist daktiv |
rs27 | 0:f0fbbfdca478 | 49 | // 1 Rohdaten ausgeben |
rs27 | 0:f0fbbfdca478 | 50 | // 2 Temperaturwert in Float Darstellung |
rs27 | 0:f0fbbfdca478 | 51 | |
rs27 | 1:19313470f629 | 52 | /* |
rs27 | 0:f0fbbfdca478 | 53 | status[0] = 2; // Temperaturwerte ausgeben |
rs27 | 0:f0fbbfdca478 | 54 | status[1] = 0; |
rs27 | 0:f0fbbfdca478 | 55 | status[2] = 0; |
rs27 | 0:f0fbbfdca478 | 56 | status[3] = 0; |
rs27 | 0:f0fbbfdca478 | 57 | status[4] = 0; |
rs27 | 0:f0fbbfdca478 | 58 | status[5] = 0; |
rs27 | 0:f0fbbfdca478 | 59 | status[6] = 0; |
rs27 | 0:f0fbbfdca478 | 60 | status[7] = 0; |
rs27 | 1:19313470f629 | 61 | */ |
rs27 | 0:f0fbbfdca478 | 62 | } |
rs27 | 0:f0fbbfdca478 | 63 | |
rs27 | 0:f0fbbfdca478 | 64 | //----------------------------------------------------------------------------- |
rs27 | 0:f0fbbfdca478 | 65 | // destructor |
rs27 | 0:f0fbbfdca478 | 66 | |
rs27 | 1:19313470f629 | 67 | void parser (void) |
rs27 | 0:f0fbbfdca478 | 68 | { |
rs27 | 0:f0fbbfdca478 | 69 | uint8_t i, ch, tch, top, bottom, len; |
rs27 | 0:f0fbbfdca478 | 70 | int8_t res; |
rs27 | 0:f0fbbfdca478 | 71 | |
rs27 | 0:f0fbbfdca478 | 72 | // Zuerst wird der erste Buchstabe aus dem Eingabestring mit den ersten |
rs27 | 0:f0fbbfdca478 | 73 | // Buchstaben aus der Befehlstabelle verglichen |
rs27 | 0:f0fbbfdca478 | 74 | |
rs27 | 0:f0fbbfdca478 | 75 | bottom = 0; // untere Suchgrenze |
rs27 | 0:f0fbbfdca478 | 76 | top = COMMAND_MAX; // obere Suchgerenze |
rs27 | 0:f0fbbfdca478 | 77 | ch = com_line[0]; // hole erstes Suchzeichen |
rs27 | 0:f0fbbfdca478 | 78 | |
rs27 | 0:f0fbbfdca478 | 79 | do |
rs27 | 0:f0fbbfdca478 | 80 | { |
rs27 | 0:f0fbbfdca478 | 81 | i = (top + bottom) >> 1; // suche in der Mitte des Feldes beginnen |
rs27 | 0:f0fbbfdca478 | 82 | tch = command [i][0]; // Vergleichszeichen laden |
rs27 | 0:f0fbbfdca478 | 83 | if (tch == ch) break; // Zeichen gefunden |
rs27 | 0:f0fbbfdca478 | 84 | if (tch > ch) top = i; // nach unten suchen |
rs27 | 0:f0fbbfdca478 | 85 | else bottom = i; // nach oben suchen |
rs27 | 0:f0fbbfdca478 | 86 | if (bottom != 0 && top == bottom + 1) break; // kein Buchstabe gef. |
rs27 | 0:f0fbbfdca478 | 87 | |
rs27 | 0:f0fbbfdca478 | 88 | } while (i > 0 && i < COMMAND_MAX - 1); |
rs27 | 0:f0fbbfdca478 | 89 | |
rs27 | 0:f0fbbfdca478 | 90 | if (tch != ch) |
rs27 | 0:f0fbbfdca478 | 91 | { |
rs27 | 0:f0fbbfdca478 | 92 | pc.printf("\nParser Kommando nicht gefunden\n"); |
rs27 | 0:f0fbbfdca478 | 93 | return; // Kommando nicht gefunden wurde |
rs27 | 0:f0fbbfdca478 | 94 | } |
rs27 | 0:f0fbbfdca478 | 95 | |
rs27 | 0:f0fbbfdca478 | 96 | // das erst Wort soll von den Übergabeparametern isoliert werden |
rs27 | 0:f0fbbfdca478 | 97 | |
rs27 | 0:f0fbbfdca478 | 98 | for (i = 0; com_line[i] != ' ' && com_line[i] != 0; i++); |
rs27 | 0:f0fbbfdca478 | 99 | len = i; |
rs27 | 0:f0fbbfdca478 | 100 | |
rs27 | 0:f0fbbfdca478 | 101 | |
rs27 | 0:f0fbbfdca478 | 102 | if (i == 0) return; |
rs27 | 0:f0fbbfdca478 | 103 | |
rs27 | 0:f0fbbfdca478 | 104 | // die Übergabparameter ermitteln und in als Indexzeiger in |
rs27 | 0:f0fbbfdca478 | 105 | // 'ComLinePtr' abspeichern |
rs27 | 0:f0fbbfdca478 | 106 | |
rs27 | 0:f0fbbfdca478 | 107 | for ( ; com_line[i] == ' ' && com_line[i] != 0; i++); |
rs27 | 0:f0fbbfdca478 | 108 | ComLinePtr = i; |
rs27 | 0:f0fbbfdca478 | 109 | |
rs27 | 0:f0fbbfdca478 | 110 | // die binäre Suche nach den restlichen Zeichen wird hier fortgesetzt |
rs27 | 0:f0fbbfdca478 | 111 | |
rs27 | 0:f0fbbfdca478 | 112 | do |
rs27 | 0:f0fbbfdca478 | 113 | { |
rs27 | 0:f0fbbfdca478 | 114 | i = (top + bottom) >> 1; // berechnen des Suchplatzes |
rs27 | 0:f0fbbfdca478 | 115 | //printf_P (PSTR("\n\rVergleich 1 com_line = [%s] und Länge = [%d]"),com_line,len); |
rs27 | 0:f0fbbfdca478 | 116 | //strcpy_P (temp, &command[i][0]); |
rs27 | 0:f0fbbfdca478 | 117 | //printf_P (PSTR("\n\rVergleich 2 command[i] = [%s] und Index = [%d]"),temp,i); |
rs27 | 0:f0fbbfdca478 | 118 | res = strncmp(com_line, &command[i][0], len); |
rs27 | 0:f0fbbfdca478 | 119 | //printf_P (PSTR("\n\rVergleich 3 res = [%d]"),res); |
rs27 | 0:f0fbbfdca478 | 120 | if (res == 0) break; // Zeichen gefunden |
rs27 | 0:f0fbbfdca478 | 121 | if (res > 0) |
rs27 | 0:f0fbbfdca478 | 122 | bottom = i; // nach unten suchen |
rs27 | 0:f0fbbfdca478 | 123 | else |
rs27 | 0:f0fbbfdca478 | 124 | top = i; // nach oben suchen |
rs27 | 0:f0fbbfdca478 | 125 | if (bottom != 0 && top == bottom + 1) break; |
rs27 | 0:f0fbbfdca478 | 126 | |
rs27 | 0:f0fbbfdca478 | 127 | } while (i > 0 && i < COMMAND_MAX - 1); |
rs27 | 0:f0fbbfdca478 | 128 | |
rs27 | 0:f0fbbfdca478 | 129 | |
rs27 | 0:f0fbbfdca478 | 130 | if (res) |
rs27 | 0:f0fbbfdca478 | 131 | { |
rs27 | 0:f0fbbfdca478 | 132 | pc.printf("\nParser Kommando nicht gefunden.\n"); |
rs27 | 0:f0fbbfdca478 | 133 | } |
rs27 | 0:f0fbbfdca478 | 134 | else |
rs27 | 0:f0fbbfdca478 | 135 | { |
rs27 | 0:f0fbbfdca478 | 136 | pc.printf("\nAufruf von Funktion %d",i); |
rs27 | 0:f0fbbfdca478 | 137 | |
rs27 | 0:f0fbbfdca478 | 138 | switch(i) // Programmaufruf |
rs27 | 0:f0fbbfdca478 | 139 | { |
rs27 | 2:e330478fb0b6 | 140 | case 0: date(); break; |
rs27 | 2:e330478fb0b6 | 141 | case 1: del(); break; |
rs27 | 2:e330478fb0b6 | 142 | case 2: dir(); break; |
rs27 | 2:e330478fb0b6 | 143 | case 3: func_drops(); break; |
rs27 | 2:e330478fb0b6 | 144 | case 4: dump(); break; |
rs27 | 2:e330478fb0b6 | 145 | case 5: fill(); break; |
rs27 | 2:e330478fb0b6 | 146 | case 6: go(); break; |
rs27 | 2:e330478fb0b6 | 147 | case 7: help(); break; |
rs27 | 2:e330478fb0b6 | 148 | case 8: list(); break; |
rs27 | 2:e330478fb0b6 | 149 | case 9: set(); break; |
rs27 | 2:e330478fb0b6 | 150 | case 10: soll(); break; |
rs27 | 2:e330478fb0b6 | 151 | case 11: stop(); break; |
rs27 | 2:e330478fb0b6 | 152 | case 12: time(); break; |
rs27 | 0:f0fbbfdca478 | 153 | } |
rs27 | 0:f0fbbfdca478 | 154 | } |
rs27 | 0:f0fbbfdca478 | 155 | } |
rs27 | 0:f0fbbfdca478 | 156 | |
rs27 | 0:f0fbbfdca478 | 157 | |
rs27 | 0:f0fbbfdca478 | 158 | |
rs27 | 0:f0fbbfdca478 | 159 | //----------------------------------------------------------------------------- |
rs27 | 0:f0fbbfdca478 | 160 | // eine Zeile aus dem Eingangsbuffer lesen |
rs27 | 0:f0fbbfdca478 | 161 | |
rs27 | 1:19313470f629 | 162 | void get_line(void) |
rs27 | 0:f0fbbfdca478 | 163 | { |
rs27 | 0:f0fbbfdca478 | 164 | char ch; |
rs27 | 0:f0fbbfdca478 | 165 | uint8_t i; |
rs27 | 0:f0fbbfdca478 | 166 | |
rs27 | 0:f0fbbfdca478 | 167 | get_ch(); |
rs27 | 0:f0fbbfdca478 | 168 | if (cr_flag) // Neue Eingabezeile |
rs27 | 0:f0fbbfdca478 | 169 | { |
rs27 | 0:f0fbbfdca478 | 170 | if (com_line[0] != 0) |
rs27 | 0:f0fbbfdca478 | 171 | { |
rs27 | 0:f0fbbfdca478 | 172 | // uart_puts(com_line); // zum Testen => später wird der parcer aufgerufen |
rs27 | 0:f0fbbfdca478 | 173 | // Zeichenkette in Großbuchstaben umwandeln |
rs27 | 0:f0fbbfdca478 | 174 | |
rs27 | 0:f0fbbfdca478 | 175 | // printf_P (PSTR("\n monitor ")); |
rs27 | 0:f0fbbfdca478 | 176 | for (i = 0; com_line[i] != 0; i++) |
rs27 | 0:f0fbbfdca478 | 177 | { |
rs27 | 0:f0fbbfdca478 | 178 | ch = com_line[i]; |
rs27 | 0:f0fbbfdca478 | 179 | ch = toupper(ch); // Nur Großbuchstaben |
rs27 | 0:f0fbbfdca478 | 180 | com_line[i] = ch; |
rs27 | 0:f0fbbfdca478 | 181 | // pc.printf(("\n[%02x] %c"),ch,ch); |
rs27 | 0:f0fbbfdca478 | 182 | if (ch == ' ') i = COM_LINE_LEN; |
rs27 | 0:f0fbbfdca478 | 183 | } |
rs27 | 0:f0fbbfdca478 | 184 | // pc.printf(("\n")); |
rs27 | 0:f0fbbfdca478 | 185 | parser(); // Parcer wird aufgerufen |
rs27 | 0:f0fbbfdca478 | 186 | } |
rs27 | 0:f0fbbfdca478 | 187 | |
rs27 | 0:f0fbbfdca478 | 188 | for (i=0; i < COM_LINE_LEN; com_line[i++] = 0); |
rs27 | 0:f0fbbfdca478 | 189 | ComLinePtr = ComLineTop = 0; |
rs27 | 0:f0fbbfdca478 | 190 | cr_flag = 0; |
rs27 | 0:f0fbbfdca478 | 191 | } |
rs27 | 0:f0fbbfdca478 | 192 | } |
rs27 | 0:f0fbbfdca478 | 193 | |
rs27 | 0:f0fbbfdca478 | 194 | //----------------------------------------------------------------------------- |
rs27 | 0:f0fbbfdca478 | 195 | // eine Zeichen aus dem Eingangsbuffer lesen |
rs27 | 0:f0fbbfdca478 | 196 | |
rs27 | 1:19313470f629 | 197 | void get_ch (void) |
rs27 | 0:f0fbbfdca478 | 198 | { |
rs27 | 0:f0fbbfdca478 | 199 | char ch; |
rs27 | 0:f0fbbfdca478 | 200 | |
rs27 | 0:f0fbbfdca478 | 201 | if (!buf.available()) return; // kein Zeichen vorhanden |
rs27 | 0:f0fbbfdca478 | 202 | |
rs27 | 0:f0fbbfdca478 | 203 | ch = buf.get(); // hole das Zeichen |
rs27 | 0:f0fbbfdca478 | 204 | // printf("mon_line: %c %02x\n",ch,ch); // nur zum Test |
rs27 | 0:f0fbbfdca478 | 205 | |
rs27 | 0:f0fbbfdca478 | 206 | switch(ch) |
rs27 | 0:f0fbbfdca478 | 207 | { |
rs27 | 0:f0fbbfdca478 | 208 | case '\r': // CARRIAGE RETURN |
rs27 | 0:f0fbbfdca478 | 209 | cr_flag = true; |
rs27 | 0:f0fbbfdca478 | 210 | break; |
rs27 | 0:f0fbbfdca478 | 211 | |
rs27 | 0:f0fbbfdca478 | 212 | case '\n': // LF empfangen |
rs27 | 0:f0fbbfdca478 | 213 | cr_flag = true; |
rs27 | 0:f0fbbfdca478 | 214 | break; |
rs27 | 0:f0fbbfdca478 | 215 | |
rs27 | 0:f0fbbfdca478 | 216 | default: // Normales Zeichen |
rs27 | 0:f0fbbfdca478 | 217 | if (~iscntrl(ch)) |
rs27 | 0:f0fbbfdca478 | 218 | { |
rs27 | 0:f0fbbfdca478 | 219 | com_line[ComLinePtr] = ch; // Zeichen einfuegen |
rs27 | 0:f0fbbfdca478 | 220 | ComLinePtr++; |
rs27 | 0:f0fbbfdca478 | 221 | } |
rs27 | 0:f0fbbfdca478 | 222 | break; |
rs27 | 0:f0fbbfdca478 | 223 | |
rs27 | 0:f0fbbfdca478 | 224 | } // Ende SWITCH |
rs27 | 0:f0fbbfdca478 | 225 | |
rs27 | 0:f0fbbfdca478 | 226 | if (ComLinePtr >= 80) cr_flag = 1; // Zeilenüberlauf ? |
rs27 | 0:f0fbbfdca478 | 227 | |
rs27 | 0:f0fbbfdca478 | 228 | } |
rs27 | 0:f0fbbfdca478 | 229 | |
rs27 | 0:f0fbbfdca478 | 230 | //----------------------------------------------------------------------------- |
rs27 | 0:f0fbbfdca478 | 231 | // monitor Aufruf |
rs27 | 0:f0fbbfdca478 | 232 | |
rs27 | 1:19313470f629 | 233 | void date(void) |
rs27 | 0:f0fbbfdca478 | 234 | { |
rs27 | 0:f0fbbfdca478 | 235 | pc.printf("\nin date"); |
rs27 | 0:f0fbbfdca478 | 236 | } |
rs27 | 0:f0fbbfdca478 | 237 | |
rs27 | 0:f0fbbfdca478 | 238 | //----------------------------------------------------------------------------- |
rs27 | 0:f0fbbfdca478 | 239 | // monitor Aufruf |
rs27 | 0:f0fbbfdca478 | 240 | |
rs27 | 1:19313470f629 | 241 | void dump(void) |
rs27 | 0:f0fbbfdca478 | 242 | { |
rs27 | 0:f0fbbfdca478 | 243 | pc.printf("\nin dump"); |
rs27 | 0:f0fbbfdca478 | 244 | } |
rs27 | 0:f0fbbfdca478 | 245 | |
rs27 | 0:f0fbbfdca478 | 246 | //----------------------------------------------------------------------------- |
rs27 | 0:f0fbbfdca478 | 247 | // monitor Aufruf |
rs27 | 0:f0fbbfdca478 | 248 | |
rs27 | 1:19313470f629 | 249 | void help(void) |
rs27 | 0:f0fbbfdca478 | 250 | { |
rs27 | 0:f0fbbfdca478 | 251 | pc.printf("\n -- help ------------------------"); |
rs27 | 2:e330478fb0b6 | 252 | pc.printf("\n go [?,f,F,t,Tl] aktivieren der Heizung oder der Tropfen"); |
rs27 | 2:e330478fb0b6 | 253 | pc.printf("\n stop [?,f,F,t,Tl] deaktivieren der Heizung oder der Tropfen"); |
rs27 | 0:f0fbbfdca478 | 254 | pc.printf("\n set index [val] Sensor auswaehlen"); |
rs27 | 2:e330478fb0b6 | 255 | pc.printf("\n soll[val] Sollwertvorgabe fuer den Temperaturfuehler"); |
rs27 | 2:e330478fb0b6 | 256 | pc.printf("\n drops [val] Anzahl der Tropfen pro Zeiteinheit"); |
rs27 | 0:f0fbbfdca478 | 257 | pc.printf("\n"); |
rs27 | 1:19313470f629 | 258 | pc.printf("\n -- files ------------------------"); |
rs27 | 1:19313470f629 | 259 | pc.printf("\n dir >> Dateien anzeigen"); |
rs27 | 1:19313470f629 | 260 | pc.printf("\n list name >> den Inhalte einer Datei anzeigen"); |
rs27 | 1:19313470f629 | 261 | pc.printf("\n del name >> eine Datei loeschen"); |
rs27 | 1:19313470f629 | 262 | pc.printf("\n fill name [zeilen] >> eine Datei anlegen und fuellen"); |
rs27 | 1:19313470f629 | 263 | pc.printf("\n"); |
rs27 | 0:f0fbbfdca478 | 264 | } |
rs27 | 0:f0fbbfdca478 | 265 | |
rs27 | 0:f0fbbfdca478 | 266 | //----------------------------------------------------------------------------- |
rs27 | 0:f0fbbfdca478 | 267 | // monitor Aufruf |
rs27 | 0:f0fbbfdca478 | 268 | |
rs27 | 1:19313470f629 | 269 | void set(void) |
rs27 | 0:f0fbbfdca478 | 270 | { |
rs27 | 1:19313470f629 | 271 | |
rs27 | 1:19313470f629 | 272 | int n; |
rs27 | 1:19313470f629 | 273 | char name[20], wert[20]; |
rs27 | 0:f0fbbfdca478 | 274 | |
rs27 | 1:19313470f629 | 275 | n = sscanf(&com_line[ComLinePtr],"%s %s",name,wert); |
rs27 | 0:f0fbbfdca478 | 276 | |
rs27 | 0:f0fbbfdca478 | 277 | switch (n) |
rs27 | 0:f0fbbfdca478 | 278 | { |
rs27 | 1:19313470f629 | 279 | case -1: pc.printf("\n list config file"); |
rs27 | 1:19313470f629 | 280 | |
rs27 | 1:19313470f629 | 281 | cfg.read("/sd/input.cfg"); |
rs27 | 1:19313470f629 | 282 | |
rs27 | 0:f0fbbfdca478 | 283 | pc.printf("\n Index >> Sonsor 0 bis 7"); |
rs27 | 0:f0fbbfdca478 | 284 | pc.printf("\n wert >> 0 = inaktiv, 1 = Rohwerte, 2 = errechneter Wert"); |
rs27 | 0:f0fbbfdca478 | 285 | break; |
rs27 | 0:f0fbbfdca478 | 286 | |
rs27 | 1:19313470f629 | 287 | case 1: pc.printf("\n list config value"); |
rs27 | 1:19313470f629 | 288 | |
rs27 | 1:19313470f629 | 289 | cfg.read("/sd/input.cfg"); |
rs27 | 1:19313470f629 | 290 | |
rs27 | 1:19313470f629 | 291 | if (cfg.getValue(name, &value[0], sizeof(value))) |
rs27 | 1:19313470f629 | 292 | { |
rs27 | 1:19313470f629 | 293 | pc.printf("\n'%s'='%s'", name, value); |
rs27 | 1:19313470f629 | 294 | } |
rs27 | 0:f0fbbfdca478 | 295 | break; |
rs27 | 0:f0fbbfdca478 | 296 | |
rs27 | 1:19313470f629 | 297 | case 2: pc.printf("\n'%s' = '%s'",name,wert); |
rs27 | 1:19313470f629 | 298 | |
rs27 | 1:19313470f629 | 299 | cfg.setValue(name, wert); |
rs27 | 1:19313470f629 | 300 | cfg.write("/sd/input.cfg"); |
rs27 | 1:19313470f629 | 301 | |
rs27 | 0:f0fbbfdca478 | 302 | break; |
rs27 | 0:f0fbbfdca478 | 303 | } // end switch |
rs27 | 1:19313470f629 | 304 | |
rs27 | 0:f0fbbfdca478 | 305 | } |
rs27 | 0:f0fbbfdca478 | 306 | |
rs27 | 0:f0fbbfdca478 | 307 | //----------------------------------------------------------------------------- |
rs27 | 2:e330478fb0b6 | 308 | // monitor Aufruf soll |
rs27 | 2:e330478fb0b6 | 309 | // mit diesem Befehl wird der Sollwert für den Temperaturfühler vorgegeben |
rs27 | 2:e330478fb0b6 | 310 | |
rs27 | 2:e330478fb0b6 | 311 | void soll(void) |
rs27 | 2:e330478fb0b6 | 312 | { |
rs27 | 2:e330478fb0b6 | 313 | |
rs27 | 2:e330478fb0b6 | 314 | int n; |
rs27 | 2:e330478fb0b6 | 315 | char wert[20]; |
rs27 | 2:e330478fb0b6 | 316 | |
rs27 | 2:e330478fb0b6 | 317 | n = sscanf(&com_line[ComLinePtr],"%s",wert); |
rs27 | 2:e330478fb0b6 | 318 | |
rs27 | 2:e330478fb0b6 | 319 | switch (n) |
rs27 | 2:e330478fb0b6 | 320 | { |
rs27 | 2:e330478fb0b6 | 321 | case -1: pc.printf("\nSollwert = %f",soll_wert); |
rs27 | 2:e330478fb0b6 | 322 | break; |
rs27 | 2:e330478fb0b6 | 323 | |
rs27 | 2:e330478fb0b6 | 324 | case 1: |
rs27 | 2:e330478fb0b6 | 325 | |
rs27 | 2:e330478fb0b6 | 326 | cfg.setValue("soll", wert); |
rs27 | 2:e330478fb0b6 | 327 | cfg.write("/sd/input.cfg"); |
rs27 | 2:e330478fb0b6 | 328 | |
rs27 | 2:e330478fb0b6 | 329 | soll_wert = atof(wert); |
rs27 | 2:e330478fb0b6 | 330 | |
rs27 | 2:e330478fb0b6 | 331 | pc.printf("\nneuer Sollwert = %f",soll_wert); |
rs27 | 2:e330478fb0b6 | 332 | |
rs27 | 2:e330478fb0b6 | 333 | break; |
rs27 | 2:e330478fb0b6 | 334 | |
rs27 | 2:e330478fb0b6 | 335 | } // end switch |
rs27 | 2:e330478fb0b6 | 336 | |
rs27 | 2:e330478fb0b6 | 337 | } |
rs27 | 2:e330478fb0b6 | 338 | |
rs27 | 2:e330478fb0b6 | 339 | |
rs27 | 2:e330478fb0b6 | 340 | //----------------------------------------------------------------------------- |
rs27 | 2:e330478fb0b6 | 341 | // monitor Aufruf drops |
rs27 | 2:e330478fb0b6 | 342 | // mit diesem Befehl wird die Anzahl der Tropfen pro Zeiteinheit vorgegeben |
rs27 | 2:e330478fb0b6 | 343 | |
rs27 | 2:e330478fb0b6 | 344 | void func_drops(void) |
rs27 | 2:e330478fb0b6 | 345 | { |
rs27 | 2:e330478fb0b6 | 346 | |
rs27 | 2:e330478fb0b6 | 347 | int n; |
rs27 | 2:e330478fb0b6 | 348 | char wert[20]; |
rs27 | 2:e330478fb0b6 | 349 | |
rs27 | 2:e330478fb0b6 | 350 | n = sscanf(&com_line[ComLinePtr],"%s",wert); |
rs27 | 2:e330478fb0b6 | 351 | |
rs27 | 2:e330478fb0b6 | 352 | switch (n) |
rs27 | 2:e330478fb0b6 | 353 | { |
rs27 | 2:e330478fb0b6 | 354 | case -1: pc.printf("\nAnzahl Tropfen = %d",drops); |
rs27 | 2:e330478fb0b6 | 355 | break; |
rs27 | 2:e330478fb0b6 | 356 | |
rs27 | 2:e330478fb0b6 | 357 | case 1: |
rs27 | 2:e330478fb0b6 | 358 | |
rs27 | 2:e330478fb0b6 | 359 | cfg.setValue("drops", wert); |
rs27 | 2:e330478fb0b6 | 360 | cfg.write("/sd/input.cfg"); |
rs27 | 2:e330478fb0b6 | 361 | |
rs27 | 2:e330478fb0b6 | 362 | drops = atoi(wert); |
rs27 | 2:e330478fb0b6 | 363 | |
rs27 | 2:e330478fb0b6 | 364 | pc.printf("\nneue Anzahl der Tropfen = %d",drops); |
rs27 | 2:e330478fb0b6 | 365 | |
rs27 | 2:e330478fb0b6 | 366 | break; |
rs27 | 2:e330478fb0b6 | 367 | |
rs27 | 2:e330478fb0b6 | 368 | } // end switch |
rs27 | 2:e330478fb0b6 | 369 | |
rs27 | 2:e330478fb0b6 | 370 | } |
rs27 | 2:e330478fb0b6 | 371 | //----------------------------------------------------------------------------- |
rs27 | 2:e330478fb0b6 | 372 | // monitor Aufruf go |
rs27 | 2:e330478fb0b6 | 373 | // Wird die Heizung oder der Tropfenspender eingeschaltet. |
rs27 | 2:e330478fb0b6 | 374 | |
rs27 | 2:e330478fb0b6 | 375 | void go(void) |
rs27 | 2:e330478fb0b6 | 376 | { |
rs27 | 2:e330478fb0b6 | 377 | |
rs27 | 2:e330478fb0b6 | 378 | int n; |
rs27 | 2:e330478fb0b6 | 379 | char ch; |
rs27 | 2:e330478fb0b6 | 380 | |
rs27 | 2:e330478fb0b6 | 381 | n = sscanf(&com_line[ComLinePtr],"%c",&ch); |
rs27 | 2:e330478fb0b6 | 382 | |
rs27 | 2:e330478fb0b6 | 383 | switch (n) |
rs27 | 2:e330478fb0b6 | 384 | { |
rs27 | 2:e330478fb0b6 | 385 | |
rs27 | 2:e330478fb0b6 | 386 | case '?': |
rs27 | 2:e330478fb0b6 | 387 | if (t_flag) pc.printf("Temperatur aktiv"); |
rs27 | 2:e330478fb0b6 | 388 | else pc.printf("Temperatur inaktiv"); |
rs27 | 2:e330478fb0b6 | 389 | |
rs27 | 2:e330478fb0b6 | 390 | if (f_flag) pc.printf("Tropfen freigeschaltet"); |
rs27 | 2:e330478fb0b6 | 391 | else pc.printf("Tropfen gesperrt"); |
rs27 | 2:e330478fb0b6 | 392 | |
rs27 | 2:e330478fb0b6 | 393 | break; |
rs27 | 2:e330478fb0b6 | 394 | case 't': |
rs27 | 2:e330478fb0b6 | 395 | case 'T': |
rs27 | 2:e330478fb0b6 | 396 | cfg.setValue("t_flag", "1"); |
rs27 | 2:e330478fb0b6 | 397 | cfg.write("/sd/input.cfg"); |
rs27 | 2:e330478fb0b6 | 398 | |
rs27 | 2:e330478fb0b6 | 399 | t_flag = true; |
rs27 | 2:e330478fb0b6 | 400 | pc.printf("\nTemperatursteuerung ist aktiv"); |
rs27 | 2:e330478fb0b6 | 401 | |
rs27 | 2:e330478fb0b6 | 402 | break; |
rs27 | 2:e330478fb0b6 | 403 | |
rs27 | 2:e330478fb0b6 | 404 | case 'f': |
rs27 | 2:e330478fb0b6 | 405 | case 'F': |
rs27 | 2:e330478fb0b6 | 406 | cfg.setValue("f_flag", "1"); |
rs27 | 2:e330478fb0b6 | 407 | cfg.write("/sd/input.cfg"); |
rs27 | 2:e330478fb0b6 | 408 | |
rs27 | 2:e330478fb0b6 | 409 | f_flag = true; |
rs27 | 2:e330478fb0b6 | 410 | com.putc('1'); |
rs27 | 2:e330478fb0b6 | 411 | pc.printf("\nTropfen freigeben"); |
rs27 | 2:e330478fb0b6 | 412 | |
rs27 | 2:e330478fb0b6 | 413 | break; |
rs27 | 2:e330478fb0b6 | 414 | |
rs27 | 2:e330478fb0b6 | 415 | default: pc.printf("\nBefehl go kennt nur die Zeichen ?,t,T,f,F"); |
rs27 | 2:e330478fb0b6 | 416 | break; |
rs27 | 2:e330478fb0b6 | 417 | |
rs27 | 2:e330478fb0b6 | 418 | } // end switch |
rs27 | 2:e330478fb0b6 | 419 | |
rs27 | 2:e330478fb0b6 | 420 | } |
rs27 | 2:e330478fb0b6 | 421 | |
rs27 | 2:e330478fb0b6 | 422 | |
rs27 | 2:e330478fb0b6 | 423 | //----------------------------------------------------------------------------- |
rs27 | 2:e330478fb0b6 | 424 | // monitor Aufruf stop |
rs27 | 2:e330478fb0b6 | 425 | // Wird die Heizung oder der Tropfenspender ausgeschaltet. |
rs27 | 2:e330478fb0b6 | 426 | |
rs27 | 2:e330478fb0b6 | 427 | void stop(void) |
rs27 | 2:e330478fb0b6 | 428 | { |
rs27 | 2:e330478fb0b6 | 429 | |
rs27 | 2:e330478fb0b6 | 430 | int n; |
rs27 | 2:e330478fb0b6 | 431 | char ch; |
rs27 | 2:e330478fb0b6 | 432 | |
rs27 | 2:e330478fb0b6 | 433 | n = sscanf(&com_line[ComLinePtr],"%c",&ch); |
rs27 | 2:e330478fb0b6 | 434 | |
rs27 | 2:e330478fb0b6 | 435 | switch (n) |
rs27 | 2:e330478fb0b6 | 436 | { |
rs27 | 2:e330478fb0b6 | 437 | |
rs27 | 2:e330478fb0b6 | 438 | case '?': |
rs27 | 2:e330478fb0b6 | 439 | if (t_flag) pc.printf("Temperatur aktiviert"); |
rs27 | 2:e330478fb0b6 | 440 | else pc.printf("Temperatur deaktiviert"); |
rs27 | 2:e330478fb0b6 | 441 | |
rs27 | 2:e330478fb0b6 | 442 | if (f_flag) pc.printf("Tropfen freigeschaltet"); |
rs27 | 2:e330478fb0b6 | 443 | else pc.printf("Tropfen gesperrt"); |
rs27 | 2:e330478fb0b6 | 444 | |
rs27 | 2:e330478fb0b6 | 445 | break; |
rs27 | 2:e330478fb0b6 | 446 | case 't': |
rs27 | 2:e330478fb0b6 | 447 | case 'T': |
rs27 | 2:e330478fb0b6 | 448 | cfg.setValue("t_flag", "0"); |
rs27 | 2:e330478fb0b6 | 449 | cfg.write("/sd/input.cfg"); |
rs27 | 2:e330478fb0b6 | 450 | |
rs27 | 2:e330478fb0b6 | 451 | t_flag = true; |
rs27 | 2:e330478fb0b6 | 452 | pc.printf("\nTemperatursteuerung ist deaktiviert"); |
rs27 | 2:e330478fb0b6 | 453 | |
rs27 | 2:e330478fb0b6 | 454 | break; |
rs27 | 2:e330478fb0b6 | 455 | |
rs27 | 2:e330478fb0b6 | 456 | case 'f': |
rs27 | 2:e330478fb0b6 | 457 | case 'F': |
rs27 | 2:e330478fb0b6 | 458 | cfg.setValue("f_flag", "0"); |
rs27 | 2:e330478fb0b6 | 459 | cfg.write("/sd/input.cfg"); |
rs27 | 2:e330478fb0b6 | 460 | |
rs27 | 2:e330478fb0b6 | 461 | f_flag = true; |
rs27 | 2:e330478fb0b6 | 462 | com.putc('9'); |
rs27 | 2:e330478fb0b6 | 463 | pc.printf("\nTropfen gesperrt"); |
rs27 | 2:e330478fb0b6 | 464 | |
rs27 | 2:e330478fb0b6 | 465 | break; |
rs27 | 2:e330478fb0b6 | 466 | |
rs27 | 2:e330478fb0b6 | 467 | default: pc.printf("\nBefehl stop kennt nur die Zeichen ?,t,T,f,F"); |
rs27 | 2:e330478fb0b6 | 468 | break; |
rs27 | 2:e330478fb0b6 | 469 | |
rs27 | 2:e330478fb0b6 | 470 | } // end switch |
rs27 | 2:e330478fb0b6 | 471 | |
rs27 | 2:e330478fb0b6 | 472 | } |
rs27 | 2:e330478fb0b6 | 473 | //----------------------------------------------------------------------------- |
rs27 | 0:f0fbbfdca478 | 474 | // monitor Aufruf |
rs27 | 0:f0fbbfdca478 | 475 | |
rs27 | 1:19313470f629 | 476 | void time(void) |
rs27 | 0:f0fbbfdca478 | 477 | { |
rs27 | 0:f0fbbfdca478 | 478 | pc.printf("\nin timer"); |
rs27 | 0:f0fbbfdca478 | 479 | } |
rs27 | 0:f0fbbfdca478 | 480 | |
rs27 | 1:19313470f629 | 481 | //----------------------------------------------------------------------------- |
rs27 | 1:19313470f629 | 482 | // monitor Aufruf dir |
rs27 | 1:19313470f629 | 483 | // |
rs27 | 1:19313470f629 | 484 | // weiter Infos siehe auch |
rs27 | 1:19313470f629 | 485 | // http://elm-chan.org/fsw/ff/00index_e.html |
rs27 | 1:19313470f629 | 486 | // |
rs27 | 1:19313470f629 | 487 | void dir(void) |
rs27 | 1:19313470f629 | 488 | { |
rs27 | 1:19313470f629 | 489 | long size; |
rs27 | 1:19313470f629 | 490 | |
rs27 | 1:19313470f629 | 491 | DIR *d; |
rs27 | 1:19313470f629 | 492 | struct dirent *p; |
rs27 | 1:19313470f629 | 493 | |
rs27 | 1:19313470f629 | 494 | d = opendir("/sd"); |
rs27 | 1:19313470f629 | 495 | if (d != NULL) |
rs27 | 1:19313470f629 | 496 | { |
rs27 | 1:19313470f629 | 497 | while ((p = readdir(d)) != NULL) |
rs27 | 1:19313470f629 | 498 | { |
rs27 | 1:19313470f629 | 499 | sprintf(buffer,"/sd/%s",p->d_name); |
rs27 | 1:19313470f629 | 500 | pc.printf("\n %s", p->d_name); |
rs27 | 1:19313470f629 | 501 | FILE * f = fopen(buffer, "r"); |
rs27 | 1:19313470f629 | 502 | fseek(f, 0, SEEK_END); // seek to end of file |
rs27 | 1:19313470f629 | 503 | size = ftell(f); // get current file pointer |
rs27 | 1:19313470f629 | 504 | pc.printf(" %ld bytes ",size); |
rs27 | 1:19313470f629 | 505 | |
rs27 | 1:19313470f629 | 506 | time_t fattime = get_fattime(); |
rs27 | 1:19313470f629 | 507 | strftime(buffer, 40, "%a,%d %m %Y.%H:%M:%S", localtime(&fattime)); |
rs27 | 1:19313470f629 | 508 | pc.printf(" %s ", buffer); |
rs27 | 1:19313470f629 | 509 | |
rs27 | 1:19313470f629 | 510 | fclose(f); |
rs27 | 1:19313470f629 | 511 | } |
rs27 | 1:19313470f629 | 512 | |
rs27 | 1:19313470f629 | 513 | } |
rs27 | 1:19313470f629 | 514 | else |
rs27 | 1:19313470f629 | 515 | { |
rs27 | 1:19313470f629 | 516 | pc.printf("\nCould not open directory!\n"); |
rs27 | 1:19313470f629 | 517 | } |
rs27 | 1:19313470f629 | 518 | closedir(d); |
rs27 | 1:19313470f629 | 519 | |
rs27 | 1:19313470f629 | 520 | |
rs27 | 1:19313470f629 | 521 | FATFS* fs; |
rs27 | 1:19313470f629 | 522 | DWORD fre_clust; |
rs27 | 1:19313470f629 | 523 | f_getfree("0:",&fre_clust,&fs); |
rs27 | 1:19313470f629 | 524 | const float frs = float(fs->csize)*float(fs->free_clust) |
rs27 | 1:19313470f629 | 525 | #if _MAX_SS != 512 |
rs27 | 1:19313470f629 | 526 | *(fs->ssize); |
rs27 | 1:19313470f629 | 527 | #else |
rs27 | 1:19313470f629 | 528 | *512; |
rs27 | 1:19313470f629 | 529 | #endif |
rs27 | 1:19313470f629 | 530 | pc.printf("\n\nfree space = %f GB",frs/1073741824.0); |
rs27 | 1:19313470f629 | 531 | |
rs27 | 1:19313470f629 | 532 | pc.printf("\ndone\n"); |
rs27 | 1:19313470f629 | 533 | } |
rs27 | 1:19313470f629 | 534 | |
rs27 | 1:19313470f629 | 535 | //----------------------------------------------------------------------------- |
rs27 | 1:19313470f629 | 536 | // monitor Aufruf list |
rs27 | 1:19313470f629 | 537 | |
rs27 | 1:19313470f629 | 538 | void list(void) |
rs27 | 1:19313470f629 | 539 | { |
rs27 | 1:19313470f629 | 540 | char dname[25]; |
rs27 | 1:19313470f629 | 541 | int ch; |
rs27 | 1:19313470f629 | 542 | |
rs27 | 1:19313470f629 | 543 | sscanf(&com_line[ComLinePtr],"%s",dname); |
rs27 | 1:19313470f629 | 544 | sprintf(buffer,"/sd/%s",dname); |
rs27 | 1:19313470f629 | 545 | pc.printf("\nlist, file %s \n",buffer); |
rs27 | 1:19313470f629 | 546 | FILE * fp = fopen(buffer, "r"); |
rs27 | 1:19313470f629 | 547 | if(fp == NULL) |
rs27 | 1:19313470f629 | 548 | { |
rs27 | 1:19313470f629 | 549 | pc.printf("\nCould not open file for read\n\r"); |
rs27 | 1:19313470f629 | 550 | return; |
rs27 | 1:19313470f629 | 551 | } |
rs27 | 1:19313470f629 | 552 | |
rs27 | 1:19313470f629 | 553 | // mit fgets werden die Zeile einzeln gelesen, wenn die Länge < 64 Zeichen ist |
rs27 | 1:19313470f629 | 554 | |
rs27 | 1:19313470f629 | 555 | while (1) // list src to pc |
rs27 | 1:19313470f629 | 556 | { |
rs27 | 1:19313470f629 | 557 | ch = fgetc(fp); // until src EOF read. |
rs27 | 1:19313470f629 | 558 | if (ch == EOF) break; |
rs27 | 1:19313470f629 | 559 | pc.putc(ch); |
rs27 | 1:19313470f629 | 560 | } |
rs27 | 1:19313470f629 | 561 | |
rs27 | 1:19313470f629 | 562 | fclose(fp); |
rs27 | 1:19313470f629 | 563 | |
rs27 | 1:19313470f629 | 564 | pc.printf("\ndone\n"); |
rs27 | 1:19313470f629 | 565 | } |
rs27 | 1:19313470f629 | 566 | |
rs27 | 1:19313470f629 | 567 | //----------------------------------------------------------------------------- |
rs27 | 1:19313470f629 | 568 | // monitor Aufruf del |
rs27 | 1:19313470f629 | 569 | |
rs27 | 1:19313470f629 | 570 | void del(void) |
rs27 | 1:19313470f629 | 571 | { |
rs27 | 1:19313470f629 | 572 | char dname[25]; |
rs27 | 1:19313470f629 | 573 | char buffer[40]; |
rs27 | 1:19313470f629 | 574 | |
rs27 | 1:19313470f629 | 575 | sscanf(&com_line[ComLinePtr],"%s",dname); |
rs27 | 1:19313470f629 | 576 | sprintf(buffer,"/sd/%s",dname); |
rs27 | 1:19313470f629 | 577 | pc.printf("\ndelete file %s",buffer); |
rs27 | 1:19313470f629 | 578 | remove(buffer); |
rs27 | 1:19313470f629 | 579 | pc.printf("\ndone"); |
rs27 | 1:19313470f629 | 580 | } |
rs27 | 1:19313470f629 | 581 | |
rs27 | 1:19313470f629 | 582 | //----------------------------------------------------------------------------- |
rs27 | 1:19313470f629 | 583 | // monitor Aufruf fill |
rs27 | 1:19313470f629 | 584 | |
rs27 | 1:19313470f629 | 585 | void fill(void) |
rs27 | 1:19313470f629 | 586 | { |
rs27 | 1:19313470f629 | 587 | char dname[25]; |
rs27 | 1:19313470f629 | 588 | char buffer[40]; |
rs27 | 1:19313470f629 | 589 | int n = 20; |
rs27 | 1:19313470f629 | 590 | |
rs27 | 1:19313470f629 | 591 | sscanf(&com_line[ComLinePtr],"%s %d",dname,&n); |
rs27 | 1:19313470f629 | 592 | sprintf(buffer,"/sd/%s",dname); |
rs27 | 1:19313470f629 | 593 | pc.printf("\nfill file %s \n",buffer); |
rs27 | 1:19313470f629 | 594 | FILE *fp = fopen(buffer, "w"); |
rs27 | 1:19313470f629 | 595 | if(fp == NULL) |
rs27 | 1:19313470f629 | 596 | { |
rs27 | 1:19313470f629 | 597 | pc.printf("Could not open file for write\n"); |
rs27 | 1:19313470f629 | 598 | } |
rs27 | 1:19313470f629 | 599 | for (int i = 0; i<n; i++) |
rs27 | 1:19313470f629 | 600 | { |
rs27 | 1:19313470f629 | 601 | fprintf(fp, "\nschreibe eine Zeile %d ",i); |
rs27 | 1:19313470f629 | 602 | } |
rs27 | 1:19313470f629 | 603 | fclose(fp); |
rs27 | 1:19313470f629 | 604 | pc.printf("\ndone\n"); |
rs27 | 1:19313470f629 | 605 | } |
rs27 | 1:19313470f629 | 606 | |
rs27 | 1:19313470f629 | 607 |