Monitor für das Tasterprogramm

Dependents:   19_Taster_BSW_oo 19_Taster_a

Fork of monitor by Temp27

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?

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 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