monitor

Dependents:   mini_02

Fork of mon by V09

Revision:
1:bf1028d27a23
Parent:
0:401f3ae5ab50
Child:
2:512482b7f8c6
--- 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.
-    
-}