Monitor für das Tasterprogramm

Dependents:   19_Taster_BSW_oo 19_Taster_a

Fork of monitor by Temp27

Committer:
rs27
Date:
Mon Aug 18 13:44:18 2014 +0000
Revision:
6:e5f5e56ffc50
Parent:
5:9c7606a0be99
Child:
7:f5bfddb84d63
180814

Who changed what in which revision?

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