monitor

Dependents:   mini_02

Fork of mon by V09

Files at this revision

API Documentation at this revision

Comitter:
rs27
Date:
Fri Feb 05 14:40:00 2016 +0000
Parent:
0:401f3ae5ab50
Child:
2:512482b7f8c6
Commit message:
monitor

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
--- a/mon.cpp	Sat Jan 03 15:24:48 2015 +0000
+++ b/mon.cpp	Fri Feb 05 14:40:00 2016 +0000
@@ -1,46 +1,29 @@
 
 //---------------------------------------------------------------------------
 // Modul...: MON.CPP    
-// Chip....: KL25Z
+// Chip....: iox.mini
 // 
 //---------------------------------------------------------------------------
 // Author..: Reinhold Schäfer
-// Date....: 2014.06.08
+// Date....: 2016.01.23
 // 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"
+#include "rs_485.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; 
+extern timer0 down_timer;                  // Timer für Zeitsteuerung, definiert in main
+extern rs_485 RS485_BUS;                   // RS385 Schnittstelle für den H-Bus, definiert in main
    
-#define COMMAND_MAX    12
+#define COMMAND_MAX    5
 #define COMMAND_LEN    7
-
-const char command[COMMAND_MAX][COMMAND_LEN] = {"CLCD","DATE","DEL","DIR","DUMP","FILL","HELP","LIST","MENU","RN","SET","TIME"};
+                                             // "DUMP","HELP","SET","TIME"}; 
+const char command[COMMAND_MAX][COMMAND_LEN] = {"DUMP","HELP","SEND","SET","TIME"};
 
 //-----------------------------------------------------------------------------
 // constructor
@@ -51,9 +34,6 @@
     
     for (i = 0; i < MON_LINE_LEN; mon_line[i++] = 0);
     MonLinePtr = 0;
-    
-    tasten = 0; 
-    tasten_old = 0;
 }  
 
 //---------------------------------------------------------------------------
@@ -139,22 +119,15 @@
   {
         pc.printf("\nAufruf von Funktion %d",i);
         
-        // "CLCD","DATE","DEL","DIR","DUMP","FILL","HELP","LIST","SET","TIME"};        
+        // "CLCD","DUMP","HELP","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;
+          case  0: dump();      break;
+          case  1: help();      break;
+          case  2: send();      break;
+          case  3: set();       break;
+          case  4: time();      break;
         }                                   
   }
 }
@@ -263,35 +236,8 @@
 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
 
@@ -299,20 +245,55 @@
 {
   pc.printf("\n -- help ------------------------");
   pc.printf("\n clcd val >> lcd Kontrast");
+  pc.printf("\n send [val] [val] [val] ... >> ein Telegramm senden");
   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 send
+// sendet ein Telegramm über die RS485 Schnittstelle
+// Die Telegramm sind hier auf 10 Zeichen begrenzt
+//
+void monitor::send(void)
+{
+    int n, pos0, pos[10];
+    uint8_t data[10];
+    //                                0  1  2  3  4  5  6  7  8  9
+    n = sscanf(&mon_line[MonLinePtr],"%x %x %x %x %x %x %x %x %x %x",&pos[0],&pos[1],&pos[2],&pos[3],&pos[4],&pos[5],&pos[6],&pos[7],&pos[8],&pos[9]);
+    
+    switch (n)
+    {
+      case -1:
+      case  0: 
+              pc.printf("\nbitte Werte fuer das Telegramm eingeben");
+              pc.printf("\n send ADR ZIEL LEN [DATA] ");
+              break;
+      
+      default: 
+              // Telegramm zusammenstellen und ausgeben
+              for (int i = 0; i < 10; i++)
+              {
+                if (i <= n)
+                {
+                    data[i] = (uint8_t) pos[i];   
+                }
+                else
+                {
+                    data[i] = 0;   
+                }     
+              }
+              
+              RS485_BUS.write(data);
+              
+              break;
+              
+     } // end switch
+}
+
+//-----------------------------------------------------------------------------
 // monitor Aufruf set
 
 void monitor::set(void)
@@ -338,14 +319,6 @@
 }
 
 //-----------------------------------------------------------------------------
-// monitor Aufruf date
-
-void monitor::date(void)
-{
-  pc.printf("\nin date");
-}
-
-//-----------------------------------------------------------------------------
 // monitor Aufruf time
 
 void monitor::time(void)
@@ -401,6 +374,7 @@
                 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));
@@ -409,358 +383,3 @@
     }
 }
 
-//-----------------------------------------------------------------------------
-// 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.
-    
-}
--- a/mon.h	Sat Jan 03 15:24:48 2015 +0000
+++ b/mon.h	Fri Feb 05 14:40:00 2016 +0000
@@ -1,11 +1,11 @@
 
 //---------------------------------------------------------------------------
 // Modul...: MON.H    
-// Chip....: KL25Z
+// Chip....: iox.mini
 // 
 //---------------------------------------------------------------------------
 // Author..: Reinhold Schäfer
-// Date....: 2014.06.08
+// Date....: 2016.01.23
 // http....: //www.microsps.net
 //---------------------------------------------------------------------------
 
@@ -25,30 +25,17 @@
     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 send(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);
+
 };