Monitor für das Tasterprogramm
Dependents: 19_Taster_BSW_oo 19_Taster_a
Fork of monitor by
Diff: monitor.cpp
- Revision:
- 1:19313470f629
- Parent:
- 0:f0fbbfdca478
- Child:
- 2:e330478fb0b6
--- a/monitor.cpp Sat Jul 26 07:27:20 2014 +0000 +++ b/monitor.cpp Mon Jul 28 14:36:32 2014 +0000 @@ -2,19 +2,38 @@ #include <stdarg.h> #include <ctype.h> #include "monitor.h" +#include "ConfigFile.h" +#include "SDFileSystem.h" +#include "FATDirHandle.h" -extern Serial pc; -extern Buffer <char> buf; +extern SDFileSystem sd; // definiert in main +extern Serial pc; // definiert in main +extern Buffer <char> buf; // definiert in main +extern ConfigFile cfg; // definiert in main +extern char value[BUFSIZ]; // definiert in main + +#define COMMAND_MAX 9 +#define COMMAND_LEN 7 -#define COMMAND_MAX 5 -#define COMMAND_LEN 7 -const char command[COMMAND_MAX][COMMAND_LEN] = {"DATE","DUMP","HELP","SET","TIME"}; +const char command[COMMAND_MAX][COMMAND_LEN] = {"DATE","DEL","DIR","DUMP","FILL","HELP","LIST","SET","TIME"}; + +char buffer[100]; + +// globale Variablen + +char com_line[COM_LINE_LEN]; // Aktuelle Eingabezeile +uint8_t ComLinePtr, ComLineTop; // Cursor Position und Zeilenlänge + +uint8_t cr_flag; + +// uint16_t status[8]; //----------------------------------------------------------------------------- -// destructor +// initialisierung -monitor::monitor(void) +void mon_init(void) { + uint8_t i; for (i = 0; i < COM_LINE_LEN; com_line[i++] = 0); @@ -25,6 +44,7 @@ // 1 Rohdaten ausgeben // 2 Temperaturwert in Float Darstellung + /* status[0] = 2; // Temperaturwerte ausgeben status[1] = 0; status[2] = 0; @@ -33,13 +53,13 @@ status[5] = 0; status[6] = 0; status[7] = 0; - + */ } //----------------------------------------------------------------------------- // destructor -void monitor::parser (void) +void parser (void) { uint8_t i, ch, tch, top, bottom, len; int8_t res; @@ -112,11 +132,16 @@ switch(i) // Programmaufruf { - case 0: date(); break; - case 1: dump(); break; - case 2: help(); break; - case 3: set(); break; - case 4: time(); break; + case 0: date(); break; + case 1: del(); break; + case 2: dir(); break; + case 3: dump(); break; + case 4: fill(); break; + case 5: help(); break; + case 6: list(); break; + case 7: set(); break; + case 8: time(); break; + } } } @@ -126,7 +151,7 @@ //----------------------------------------------------------------------------- // eine Zeile aus dem Eingangsbuffer lesen -void monitor::get_line(void) +void get_line(void) { char ch; uint8_t i; @@ -161,7 +186,7 @@ //----------------------------------------------------------------------------- // eine Zeichen aus dem Eingangsbuffer lesen -void monitor::get_ch (void) +void get_ch (void) { char ch; @@ -197,7 +222,7 @@ //----------------------------------------------------------------------------- // monitor Aufruf -void monitor::date(void) +void date(void) { pc.printf("\nin date"); } @@ -205,7 +230,7 @@ //----------------------------------------------------------------------------- // monitor Aufruf -void monitor::dump(void) +void dump(void) { pc.printf("\nin dump"); } @@ -213,43 +238,192 @@ //----------------------------------------------------------------------------- // monitor Aufruf -void monitor::help(void) +void help(void) { pc.printf("\n -- help ------------------------"); pc.printf("\n set index [val] Sensor auswaehlen"); pc.printf("\n"); + pc.printf("\n -- files ------------------------"); + pc.printf("\n dir >> Dateien anzeigen"); + pc.printf("\n list name >> den Inhalte einer Datei anzeigen"); + pc.printf("\n del name >> eine Datei loeschen"); + pc.printf("\n fill name [zeilen] >> eine Datei anlegen und fuellen"); + pc.printf("\n"); } //----------------------------------------------------------------------------- // monitor Aufruf -void monitor::set(void) +void set(void) { - int n, pos, val; + + int n; + char name[20], wert[20]; - n = sscanf(&com_line[ComLinePtr],"%d %d",&pos,&val); + n = sscanf(&com_line[ComLinePtr],"%s %s",name,wert); switch (n) { - case -1: pc.printf("\nbitte index [wert] angeben"); + case -1: pc.printf("\n list config file"); + + cfg.read("/sd/input.cfg"); + pc.printf("\n Index >> Sonsor 0 bis 7"); pc.printf("\n wert >> 0 = inaktiv, 1 = Rohwerte, 2 = errechneter Wert"); break; - case 1: pc.printf("\nread status[%d] = %d",pos,status[pos]); + case 1: pc.printf("\n list config value"); + + cfg.read("/sd/input.cfg"); + + if (cfg.getValue(name, &value[0], sizeof(value))) + { + pc.printf("\n'%s'='%s'", name, value); + } break; - case 2: status[pos] = val; - pc.printf("\nset status[%d] = %d",pos,status[pos]); + case 2: pc.printf("\n'%s' = '%s'",name,wert); + + cfg.setValue(name, wert); + cfg.write("/sd/input.cfg"); + break; } // end switch + } //----------------------------------------------------------------------------- // monitor Aufruf -void monitor::time(void) +void time(void) { pc.printf("\nin timer"); } +//----------------------------------------------------------------------------- +// monitor Aufruf dir +// +// weiter Infos siehe auch +// http://elm-chan.org/fsw/ff/00index_e.html +// +void dir(void) +{ + long size; + + DIR *d; + struct dirent *p; + + d = opendir("/sd"); + if (d != NULL) + { + while ((p = readdir(d)) != NULL) + { + sprintf(buffer,"/sd/%s",p->d_name); + pc.printf("\n %s", p->d_name); + FILE * f = fopen(buffer, "r"); + fseek(f, 0, SEEK_END); // seek to end of file + size = ftell(f); // get current file pointer + pc.printf(" %ld bytes ",size); + + time_t fattime = get_fattime(); + strftime(buffer, 40, "%a,%d %m %Y.%H:%M:%S", localtime(&fattime)); + pc.printf(" %s ", buffer); + + fclose(f); + } + + } + else + { + pc.printf("\nCould not open directory!\n"); + } + closedir(d); + + + FATFS* fs; + DWORD fre_clust; + f_getfree("0:",&fre_clust,&fs); + const float frs = float(fs->csize)*float(fs->free_clust) + #if _MAX_SS != 512 + *(fs->ssize); + #else + *512; + #endif + pc.printf("\n\nfree space = %f GB",frs/1073741824.0); + + pc.printf("\ndone\n"); +} + +//----------------------------------------------------------------------------- +// monitor Aufruf list + +void list(void) +{ + char dname[25]; + int ch; + + sscanf(&com_line[ComLinePtr],"%s",dname); + sprintf(buffer,"/sd/%s",dname); + pc.printf("\nlist, file %s \n",buffer); + FILE * fp = fopen(buffer, "r"); + if(fp == NULL) + { + pc.printf("\nCould not open file for read\n\r"); + return; + } + + // mit fgets werden die Zeile einzeln gelesen, wenn die Länge < 64 Zeichen ist + + while (1) // list src to pc + { + ch = fgetc(fp); // until src EOF read. + if (ch == EOF) break; + pc.putc(ch); + } + + fclose(fp); + + pc.printf("\ndone\n"); +} + +//----------------------------------------------------------------------------- +// monitor Aufruf del + +void del(void) +{ + char dname[25]; + char buffer[40]; + + sscanf(&com_line[ComLinePtr],"%s",dname); + sprintf(buffer,"/sd/%s",dname); + pc.printf("\ndelete file %s",buffer); + remove(buffer); + pc.printf("\ndone"); +} + +//----------------------------------------------------------------------------- +// monitor Aufruf fill + +void fill(void) +{ + char dname[25]; + char buffer[40]; + int n = 20; + + sscanf(&com_line[ComLinePtr],"%s %d",dname,&n); + sprintf(buffer,"/sd/%s",dname); + pc.printf("\nfill file %s \n",buffer); + FILE *fp = fopen(buffer, "w"); + if(fp == NULL) + { + pc.printf("Could not open file for write\n"); + } + for (int i = 0; i<n; i++) + { + fprintf(fp, "\nschreibe eine Zeile %d ",i); + } + fclose(fp); + pc.printf("\ndone\n"); +} + +