monitor

Fork of mon by V09

Files at this revision

API Documentation at this revision

Comitter:
rs27
Date:
Sat Jan 03 15:24:48 2015 +0000
Commit message:
V09 Anzeige source code

Changed in this revision

mon.cpp Show annotated file Show diff for this revision Revisions of this file
mon.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 401f3ae5ab50 mon.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mon.cpp	Sat Jan 03 15:24:48 2015 +0000
@@ -0,0 +1,766 @@
+
+//---------------------------------------------------------------------------
+// Modul...: MON.CPP    
+// Chip....: KL25Z
+// 
+//---------------------------------------------------------------------------
+// Author..: Reinhold Schäfer
+// Date....: 2014.06.08
+// http....: //www.microsps.net
+//---------------------------------------------------------------------------
+#include <stdarg.h>
+#include <ctype.h>
+#include "mbed.h"
+#include "mon.h"
+#include "com.h"
+#include "menu.h"
+#include "MODSERIAL.h"
+#include "SDFileSystem.h"
+#include "FATDirHandle.h"
+#include "FATFileSystem.h"
+#include "myTextLCD.h"
+#include "timer0.h"
+
+extern MODSERIAL pc;                       // definiert in main
+extern SDFileSystem sd;
+extern PwmOut lcd_kontrast;             // definiert in main
+extern timer0 down_timer;               // Timer für Zeitsteuerung
+extern menu menu_var;
+extern TextLCD lcd;
+
+// Taster für die Eingabe
+extern DigitalIn S1;
+extern DigitalIn S2;
+extern DigitalIn S3;
+extern DigitalIn S4;
+extern DigitalIn S5;
+
+Timer t; 
+   
+#define COMMAND_MAX    12
+#define COMMAND_LEN    7
+
+const char command[COMMAND_MAX][COMMAND_LEN] = {"CLCD","DATE","DEL","DIR","DUMP","FILL","HELP","LIST","MENU","RN","SET","TIME"};
+
+//-----------------------------------------------------------------------------
+// constructor
+
+monitor::monitor(void)
+{
+    uint8_t i;
+    
+    for (i = 0; i < MON_LINE_LEN; mon_line[i++] = 0);
+    MonLinePtr = 0;
+    
+    tasten = 0; 
+    tasten_old = 0;
+}  
+
+//---------------------------------------------------------------------------
+//
+//   Function name :    PARSER
+//
+//   Returns :          none
+//
+//   Parameters :       none
+//
+//   Purpose :          wertet die Eingangszeile aus und verzweigt zum gewünschten 
+//                      Programm
+//
+//---------------------------------------------------------------------------
+void monitor::parser (void)
+{
+  uint8_t i, ch, tch, top, bottom, len;
+  int8_t res;
+
+  // Zuerst wird der erste Buchstabe aus dem Eingabestring mit den ersten 
+  // Buchstaben aus der Befehlstabelle verglichen                         
+
+  bottom = 0;                                        // untere Suchgrenze 
+  top = COMMAND_MAX;                                 // obere Suchgerenze 
+  ch = mon_line[0];                            // hole erstes Suchzeichen
+  
+  do 
+  {
+        i = (top + bottom) >> 1;    // suche in der Mitte des Feldes beginnen
+        tch = command [i][0];                     // Vergleichszeichen laden 
+        if (tch == ch) break;                             // Zeichen gefunden 
+        if (tch > ch) top = i;                           // nach unten suchen 
+        else bottom = i;                                  // nach oben suchen 
+        if (bottom != 0 && top == bottom + 1) break;   // kein Buchstabe gef.
+  
+  } while (i > 0 && i < COMMAND_MAX - 1);
+
+  if (tch != ch)
+  {
+        pc.printf("\nParser Kommando nicht gefunden\n");
+        return;                              // Kommando nicht gefunden wurde 
+  }
+  
+  // das erst Wort soll von den Übergabeparametern isoliert werden        
+  
+  for (i = 0; mon_line[i] != ' ' &&  mon_line[i] != 0; i++);
+  len = i;
+
+  
+  if (i == 0) return;
+
+  // die Übergabparameter ermitteln und in als Indexzeiger in            
+  // 'ComLinePtr' abspeichern                                            
+
+  for ( ; mon_line[i] == ' ' && mon_line[i] != 0; i++);
+  MonLinePtr = i;
+  
+  // die binäre Suche nach den restlichen Zeichen wird hier fortgesetzt 
+
+  do
+  {
+        i = (top + bottom) >> 1;                 // berechnen des Suchplatzes
+        //printf_P (PSTR("\n\rVergleich 1 com_line = [%s] und Länge = [%d]"),com_line,len);
+        //strcpy_P (temp, &command[i][0]);
+        //printf_P (PSTR("\n\rVergleich 2 command[i] = [%s] und Index = [%d]"),temp,i);
+        res = strncmp(mon_line, &command[i][0], len);
+        //printf_P (PSTR("\n\rVergleich 3 res = [%d]"),res);
+        if (res == 0) break;                       // Zeichen gefunden 
+        if (res > 0) 
+            bottom = i;                            // nach unten suchen
+        else 
+            top = i;                               // nach oben suchen
+        if (bottom != 0 && top == bottom + 1) break;
+  
+  } while (i > 0 && i < COMMAND_MAX - 1);
+
+  
+  if (res) 
+  {
+        pc.printf("\nParser Kommando nicht gefunden.\n");
+  }
+  else 
+  {
+        pc.printf("\nAufruf von Funktion %d",i);
+        
+        // "CLCD","DATE","DEL","DIR","DUMP","FILL","HELP","LIST","SET","TIME"};        
+        
+        switch(i)                       // Programmaufruf
+        {
+          case  0: clcd(); break;
+          case  1: date(); break;
+          case  2: del(); break;
+          case  3: dir(); break;
+          case  4: dump(); break;
+          case  5: fill(); break;
+          case  6: help(); break;
+          case  7: list(); break;
+          case  8: read_menu(); break;
+          case  9: rename(); break;
+          case 10: set(); break;
+          case 11: time(); break;
+        }                                   
+  }
+}
+
+//---------------------------------------------------------------------------
+//
+//  Function name : monitor
+//
+//  Returns :       none
+//
+//  Parameters :    none
+//
+//  Purpose :       Monitor für die Benutzereingabe
+//
+//---------------------------------------------------------------------------
+void monitor::monPC(void)
+{
+    uint8_t i;
+    char ch;
+
+    monLine();
+    if (cr_flag)                   // Neue Eingabezeile  
+    {
+        if (mon_line[0] != 0)
+        {
+            // Zeichenkette in Großbuchstaben umwandeln
+            for (i = 0; mon_line[i] != 0; i++)
+            {
+                ch = mon_line[i];
+                ch = toupper(ch);                          // Nur Großbuchstaben 
+                mon_line[i] = ch;
+                //pc.printf(("\n[%02x] %c"),ch,ch);                
+                if (ch == ' ') i = MON_LINE_LEN;
+            }
+            
+            // pc.printf("\n monitor %s", mon_line);        // zum Testen => später wird der parcer aufgerufen
+            parser();                                       // Parcer wird aufgerufen
+        }
+ 
+        for (i=0; i < MON_LINE_LEN; mon_line[i++] = 0);
+        MonLinePtr = 0;                         
+        cr_flag = 0;
+  }     
+}
+
+//---------------------------------------------------------------------------
+//
+//  Function name : mon_line
+//
+//  Returns :       none
+//
+//  Parameters :    none
+//
+//  Purpose :       
+//      Wird periodisch in unregelmäsigen Abständen aufgerufen und ermittelt,    
+//      ob weitere Zeichen von der Schnittstelle empfangen und die Eingabe      
+//      mit Carrige Return abgeschlossen wurde. Sollte dies der Fall sein,      
+//      wird das CR_FLAG gesetzt. Auch Editierfunktionen werden in diesem      
+//      Rahmen behandelt.                               
+//
+//---------------------------------------------------------------------------
+
+void monitor::monLine (void)
+{
+    int ch;
+  
+    if (pc.readable() == false) return;     // kein Zeichen vorhanden 
+    
+    if (MonLinePtr >= 40)                   // Zeilenüberlauf ?  
+    {
+        cr_flag = 1;
+        return;
+    }
+
+    ch = pc.getc();                             // Hole das Zeichen  
+    //pc.printf("\nmon_line: %c [%02x]",ch,ch);   // nur zum Test
+  
+    switch(ch) 
+    {
+        //case ESC: esc_flag = 1;           // Sonder Stringkommandos 
+        //  break;
+
+        case '\r':                          // CARRIAGE RETURN  
+            cr_flag = 1;
+            break;
+
+        case '\n':                          // LF empfangen
+            cr_flag = 1;
+            break;
+
+        default:                            // Normales Zeichen  
+            if (~iscntrl(ch)) 
+            {
+                mon_line[MonLinePtr] = ch;  // Zeichen einfuegen 
+                MonLinePtr++;
+                // pc.putc(ch);
+            }
+            break;
+
+    }   // Ende SWITCH 
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf damp
+
+void monitor::dump(void)
+{
+  pc.printf("\nin dump");
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf clcd  contrast lcd
+
+void monitor::clcd (void)
+{
+    int n, val;
+
+    n = sscanf(&mon_line[MonLinePtr],"%d",&val); 
+    
+    switch (n)
+    {
+      case -1:
+
+            pc.printf("\n bitte Wert angeben");
+            pc.printf("\n Wert >>  0 bis 100");
+            pc.printf("\n default Wert = 30");
+            break;
+                   
+      case 1: //status[pos] = val;
+            if (val < 0) val = 0;
+            if (val > 100) val = 100;
+            lcd_kontrast.pulsewidth_us(val);      // Kontrastwert setzen
+            pc.printf("\n LCD Kontrast = %d",val); 
+            break;
+     } // end switch
+  
+}
+//-----------------------------------------------------------------------------
+// monitor Aufruf help
+
+void monitor::help(void)
+{
+  pc.printf("\n -- help ------------------------");
+  pc.printf("\n clcd val >> lcd Kontrast");
+  pc.printf("\n set index [val] >> Sensor auswaehlen");
+  pc.printf("\n time [std min sek tag monat jahr]");   
+  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 rn name name >> eine Datei umbenennen");
+  pc.printf("\n menu testen der menu Funktion");
+  pc.printf("\n");
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf set
+
+void monitor::set(void)
+{
+    int n, pos, val;
+
+    n = sscanf(&mon_line[MonLinePtr],"%d %d",&pos,&val);
+    
+    switch (n)
+    {
+      case -1: pc.printf("\nbitte index [wert] angeben");
+              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] ",pos);
+              break;
+              
+      case 2: //status[pos] = val;
+              pc.printf("\nset status[%d] = %d",pos);
+              break;
+     } // end switch
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf date
+
+void monitor::date(void)
+{
+  pc.printf("\nin date");
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf time
+
+void monitor::time(void)
+{
+    int sek, min, std, day, month, year, n;    
+    
+    sek     = 0;   
+    min     = 0;    
+    std     = 0;
+    day     = 0;
+    month   = 0;
+    year    = 0; 
+    
+    n = sscanf(&mon_line[MonLinePtr],"%d %d %d %d %d %d",&std, &min, &sek, &day, &month, &year);
+
+    switch (n)
+    {
+        case -1 :  // keine Zeichenübergabe
+        case  0 :  // keine Zeichenübergabe
+     
+                strftime(buffer, 40, "%a, %d.%m.%Y %H:%M:%S", localtime(&down_timer.seconds));
+                pc.printf("\nTime = %s\n", buffer);
+                break;
+                
+        case 1 :   // std
+        case 2 :   // min
+        case 3 :   // sek
+        case 4 :   // tag
+        case 5 :   // mon
+        case 6 :   // jahr
+                            
+                if (sek > 59) sek = 59;
+                if (sek < 0)  sek = 0;
+                buffer[0] = (uint8_t)sek;;
+
+                if (min > 59) min = 59;
+                if (min < 0) min = 0;
+                buffer[1] = (uint8_t)min;
+                
+                if (std > 23) std = 23;
+                if (std < 0) std = 0;
+                buffer[2] = (uint8_t)std;
+
+                if (day > 31) day = 31;
+                if (day < 0)  day = 0;
+                buffer[3] = (uint8_t)day;;
+
+                if (month > 12) month = 12;
+                if (month < 0) month = 0;
+                buffer[4] = (uint8_t)month;
+                
+                if (year > 2100) year = 2100;
+                if (year < 2000) year = 2000;
+                buffer[5] = (uint8_t)(year - 1900);
+
+                down_timer.Set_t((uint8_t *)buffer);
+ 
+                strftime(buffer, 40, "%a, %d.%m.%Y %H:%M:%S", localtime(&down_timer.seconds));
+                pc.printf("\nnew Time = %s\n", buffer);    
+                break;
+    }
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf dir
+//
+// weiter Infos siehe auch
+// http://elm-chan.org/fsw/ff/00index_e.html
+//
+void monitor::dir(void)
+{
+
+    long size;
+    float f_size;
+    int i, len;  
+    
+    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
+            
+            len = strlen(p->d_name);
+            for (i = len; i < 16; i++) pc.printf("%c",' ');
+            
+            if (size < 1024)
+            {
+                sprintf(buffer,"    %ld bytes ",size);            
+            }
+            else
+            {
+                if (size > 1048576)
+                {
+                    f_size = size / 1048576.0;
+                    sprintf(buffer,"    %0.3f MB  ",f_size);                    
+
+                }
+                else
+                {
+                    f_size = size / 1024.0;
+                    sprintf(buffer,"    %0.3f kB  ",f_size);
+                }
+            }
+            
+            pc.printf("%s",buffer);
+            
+            len = strlen(buffer);
+            for (i = len; i < 16; i++) pc.printf("%c",' ');
+            
+            // fno.fdate = (WORD)(((year - 1980) * 512U) | month * 32U | mday);
+            // fno.ftime = (WORD)(hour * 2048U | min * 32U | sec / 2U);            
+            
+            unsigned long fdate = p->fdate;
+            unsigned long ftime = p->ftime; 
+            
+            pc.printf("%02d:",(ftime>>11));                    // Stunden           
+            pc.printf("%02d:",((ftime & 0x000007E0)>>5));      // Minuten
+            pc.printf("%02d  ",((ftime & 0x0000001F)*2));      // Sekunden
+            
+            pc.printf("%02d.",(fdate & 0x0000001F));           // Tag
+            pc.printf("%02d.",((fdate & 0x000001E0)>>5));      // Monat
+            pc.printf("%04d ",((fdate>>9)+1980));              // Monat
+            
+
+//          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 = %0.3f GB",frs/1073741824.0);
+    
+    pc.printf("\ndone\n");
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf list
+
+void monitor::list(void)
+{
+    char dname[25];
+      
+    sscanf(&mon_line[MonLinePtr],"%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 (fgets(buffer, 64, fp))
+    {
+        pc.printf("> %s", buffer);
+    }
+    
+    fclose(fp);        
+    pc.printf("\ndone\n");
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf del
+
+void monitor::del(void)
+{
+    char dname[25];
+    
+    sscanf(&mon_line[MonLinePtr],"%s",dname);
+    sprintf(buffer,"/sd/%s",dname);
+    pc.printf("\ndelete file %s",buffer);
+    remove(buffer);
+    //int res = sd.re_name("/sd/test1","/sd/test1.txt");
+    pc.printf("\ndone");
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf fill
+
+void monitor::fill(void)
+{
+    char dname[25];
+    int n = 20;
+    
+    sscanf(&mon_line[MonLinePtr],"%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");
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf rename
+
+void monitor::rename(void)
+{
+    // char str1[20];      // neuer Dateiname
+    // char str2[25];      // neuer Dateiname
+    // char str3[20];      // alter Dateiname
+    // char str4[25];      // alter Dateiname
+    int ch;
+    
+    pc.printf("\nrename ");
+    sscanf(&mon_line[MonLinePtr],"%s %s",str3,str1);
+    sprintf(str4,"/sd/%s",str3);
+    pc.printf("%s ",str4);
+    FILE *fpold = fopen(str4, "r");   // src file
+    sprintf(str2,"/sd/%s",str1);
+    pc.printf("%s \n",str2);
+    FILE *fpnew = fopen(str2, "w");   // dest file
+    
+    while (1)                       // Copy src to dest  
+    {
+        ch = fgetc(fpold);          // until src EOF read. 
+        if (ch == EOF) break;
+        fputc(ch, fpnew);  
+    }
+    
+    fclose(fpnew);
+    fclose(fpold);
+ 
+    fpnew = fopen(str2, "r");       // Reopen dest to insure
+    if(fpnew == NULL)               // that it was created.
+    {
+        pc.printf("\nerror\n");     // Return Error.
+    } 
+    else 
+    {
+        fclose(fpnew);  
+        remove(str4);               // Remove original file.
+        pc.printf("\ndone\n");      // Return Success.
+    }
+}
+
+//-----------------------------------------------------------------------------
+// wird für die Abfrage der Tasten verwendet
+
+uint8_t monitor::taste(void)
+{
+    tasten_old = tasten;
+    
+    while(1)
+    {
+        if (S1 == 0) tasten |= 0x01; else tasten &= ~0x01;
+        if (S2 == 0) tasten |= 0x02; else tasten &= ~0x02;
+        if (S3 == 0) tasten |= 0x04; else tasten &= ~0x04;
+        if (S4 == 0) tasten |= 0x08; else tasten &= ~0x08;
+        if (S5 == 0) tasten |= 0x10; else tasten &= ~0x10;
+        
+        if (tasten != tasten_old)
+        {
+          break;  
+        }
+        com_line(); // in dieser Schleife läuft der Buffer sonst über
+    }
+    return tasten;
+}
+
+//-----------------------------------------------------------------------------
+// monitor Aufruf menu
+
+void monitor::read_menu(void)
+{
+    uint8_t flag;
+    int anf, len, len_neu, end, index;
+    
+    char ch;
+    int n = 1, pos, a;
+    int wert;
+    
+    t.reset();
+    t.start();
+    
+    n = sscanf(&mon_line[MonLinePtr],"%s %s %s %s",str1,str2,str3,str4);
+    
+    if (n == 1)
+    {
+        pos = atoi(str1);
+        if (menu_var.getValue(pos,str2,str3,str4))
+        {
+          pc.printf("\nmenu: %d; %s; %s; %s",pos,str2,str3,str4);    
+        }
+    }
+    
+    t.stop();
+    
+    lcd.set_lcd_flag(false);
+    
+    lcd.cls();  // LCD löschen
+    
+    wert = 555;   
+    
+    //wert = atoi(str4);    
+    sprintf(str4," %d",wert);
+    
+    end = 8;       
+    len = strlen(str4);     // drei Zeichen                
+    anf = end - len;        // position des erstes Zeichens in der Anzeige
+    index = len;            // letzte Stelle im String    
+    index--;                // null zählt als das erste Zeichen
+
+    while(1)
+    {
+        // Wert auf der Anzeige ausgeben und ändern
+        
+        sprintf(str4," %d",wert);
+
+        len_neu = strlen(str4);     // drei Zeichen                        
+        anf = end - len_neu;        // Position bestimmen
+        index += (len_neu - len);
+        len = len_neu;
+        if (index < 0) index = 0;
+        lcd.print_LCD(str4,1,anf);          
+        
+        ch = str4[index];
+        
+        // Cursor setzen
+        a = lcd.address(anf + index,1);
+        lcd.writeCommand(a);
+        lcd.writeCommand(0x0F); // Curor einschalten
+        
+        pc.printf("\n[%s], anf %d, end %d, index %d",str4, anf, end, index); 
+        
+        flag = taste();
+        pc.printf("\ntaste %02x wert %d",flag,wert); 
+        
+        switch (flag)
+        {
+            case 0x01: // left
+                    if (index > 0)
+                    {
+                      index--;
+                    }
+                    break;
+                    
+            case 0x02: // down
+                    if( ch > '0') 
+                    {
+                        ch--;
+                        str4[index] = ch;
+                    }
+                    break;
+                    
+            case 0x04:  // up
+                    if ((ch >= '0') && (ch < '9')) 
+                    {
+                        ch++;
+                        str4[index] = ch;
+                    }
+                    
+                    if (ch == ' ')
+                    {
+                        ch = '1';
+                        str4[index] = ch;
+                    }
+                        
+                    break;
+                    
+            case 0x08:  // rigth
+                    if (index < len)
+                    {
+                       index++;
+                    }
+                    break;
+                    
+        } // end while
+       
+        wert = atoi(str4); 
+        if (flag == 0x10) break;
+    }
+    
+    // die alten Daten wieder anzeigen 
+    lcd.writeCommand(0x0C); // Cursor ausschalten
+    wait_us(40);
+    
+    lcd.writeALL();
+    lcd.set_lcd_flag(true);
+    
+    pc.printf("\ndone %f us\n",t.read());    // Return Success.
+    
+}
diff -r 000000000000 -r 401f3ae5ab50 mon.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mon.h	Sat Jan 03 15:24:48 2015 +0000
@@ -0,0 +1,54 @@
+
+//---------------------------------------------------------------------------
+// Modul...: MON.H    
+// Chip....: KL25Z
+// 
+//---------------------------------------------------------------------------
+// Author..: Reinhold Schäfer
+// Date....: 2014.06.08
+// http....: //www.microsps.net
+//---------------------------------------------------------------------------
+
+#include <string.h>
+#include "mbed.h"
+
+#define MON_LINE_LEN        40          // maximale Länge der Eingabezeile  
+
+class monitor
+{    
+  private:
+  
+  public:
+    
+    char mon_line[MON_LINE_LEN];            // Aktuelle Eingabezeile 
+    uint8_t MonLinePtr, cr_flag;           // Cursor Position und Endzeichen
+    uint8_t tasten, tasten_old;
+    
+    char buffer[100];  
+  
+    char str1[20];
+    char str2[20];
+    char str3[20];
+    char str4[20];  
+    
+    monitor(void);
+    
+    void parser (void);
+    void monPC(void);
+    void monLine(void);
+    void clcd (void);
+    void dump(void);
+    void help(void);
+    void set(void);
+    void date(void);
+    void fdisk(void);
+    void time(void);
+    void dir(void);
+    void list(void);    
+    void del(void);
+    void fill(void);
+    void rename(void);
+    uint8_t taste(void);
+    void read_menu(void);
+};        
+