monitor
Fork of mon by
Revision 1:bf1028d27a23, committed 2016-02-05
- 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);
+
};
