monitor

Fork of mon by V09

Committer:
rs27
Date:
Sat Jan 03 15:24:48 2015 +0000
Revision:
0:401f3ae5ab50
V09 Anzeige source code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rs27 0:401f3ae5ab50 1
rs27 0:401f3ae5ab50 2 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 3 // Modul...: MON.CPP
rs27 0:401f3ae5ab50 4 // Chip....: KL25Z
rs27 0:401f3ae5ab50 5 //
rs27 0:401f3ae5ab50 6 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 7 // Author..: Reinhold Schäfer
rs27 0:401f3ae5ab50 8 // Date....: 2014.06.08
rs27 0:401f3ae5ab50 9 // http....: //www.microsps.net
rs27 0:401f3ae5ab50 10 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 11 #include <stdarg.h>
rs27 0:401f3ae5ab50 12 #include <ctype.h>
rs27 0:401f3ae5ab50 13 #include "mbed.h"
rs27 0:401f3ae5ab50 14 #include "mon.h"
rs27 0:401f3ae5ab50 15 #include "com.h"
rs27 0:401f3ae5ab50 16 #include "menu.h"
rs27 0:401f3ae5ab50 17 #include "MODSERIAL.h"
rs27 0:401f3ae5ab50 18 #include "SDFileSystem.h"
rs27 0:401f3ae5ab50 19 #include "FATDirHandle.h"
rs27 0:401f3ae5ab50 20 #include "FATFileSystem.h"
rs27 0:401f3ae5ab50 21 #include "myTextLCD.h"
rs27 0:401f3ae5ab50 22 #include "timer0.h"
rs27 0:401f3ae5ab50 23
rs27 0:401f3ae5ab50 24 extern MODSERIAL pc; // definiert in main
rs27 0:401f3ae5ab50 25 extern SDFileSystem sd;
rs27 0:401f3ae5ab50 26 extern PwmOut lcd_kontrast; // definiert in main
rs27 0:401f3ae5ab50 27 extern timer0 down_timer; // Timer für Zeitsteuerung
rs27 0:401f3ae5ab50 28 extern menu menu_var;
rs27 0:401f3ae5ab50 29 extern TextLCD lcd;
rs27 0:401f3ae5ab50 30
rs27 0:401f3ae5ab50 31 // Taster für die Eingabe
rs27 0:401f3ae5ab50 32 extern DigitalIn S1;
rs27 0:401f3ae5ab50 33 extern DigitalIn S2;
rs27 0:401f3ae5ab50 34 extern DigitalIn S3;
rs27 0:401f3ae5ab50 35 extern DigitalIn S4;
rs27 0:401f3ae5ab50 36 extern DigitalIn S5;
rs27 0:401f3ae5ab50 37
rs27 0:401f3ae5ab50 38 Timer t;
rs27 0:401f3ae5ab50 39
rs27 0:401f3ae5ab50 40 #define COMMAND_MAX 12
rs27 0:401f3ae5ab50 41 #define COMMAND_LEN 7
rs27 0:401f3ae5ab50 42
rs27 0:401f3ae5ab50 43 const char command[COMMAND_MAX][COMMAND_LEN] = {"CLCD","DATE","DEL","DIR","DUMP","FILL","HELP","LIST","MENU","RN","SET","TIME"};
rs27 0:401f3ae5ab50 44
rs27 0:401f3ae5ab50 45 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 46 // constructor
rs27 0:401f3ae5ab50 47
rs27 0:401f3ae5ab50 48 monitor::monitor(void)
rs27 0:401f3ae5ab50 49 {
rs27 0:401f3ae5ab50 50 uint8_t i;
rs27 0:401f3ae5ab50 51
rs27 0:401f3ae5ab50 52 for (i = 0; i < MON_LINE_LEN; mon_line[i++] = 0);
rs27 0:401f3ae5ab50 53 MonLinePtr = 0;
rs27 0:401f3ae5ab50 54
rs27 0:401f3ae5ab50 55 tasten = 0;
rs27 0:401f3ae5ab50 56 tasten_old = 0;
rs27 0:401f3ae5ab50 57 }
rs27 0:401f3ae5ab50 58
rs27 0:401f3ae5ab50 59 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 60 //
rs27 0:401f3ae5ab50 61 // Function name : PARSER
rs27 0:401f3ae5ab50 62 //
rs27 0:401f3ae5ab50 63 // Returns : none
rs27 0:401f3ae5ab50 64 //
rs27 0:401f3ae5ab50 65 // Parameters : none
rs27 0:401f3ae5ab50 66 //
rs27 0:401f3ae5ab50 67 // Purpose : wertet die Eingangszeile aus und verzweigt zum gewünschten
rs27 0:401f3ae5ab50 68 // Programm
rs27 0:401f3ae5ab50 69 //
rs27 0:401f3ae5ab50 70 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 71 void monitor::parser (void)
rs27 0:401f3ae5ab50 72 {
rs27 0:401f3ae5ab50 73 uint8_t i, ch, tch, top, bottom, len;
rs27 0:401f3ae5ab50 74 int8_t res;
rs27 0:401f3ae5ab50 75
rs27 0:401f3ae5ab50 76 // Zuerst wird der erste Buchstabe aus dem Eingabestring mit den ersten
rs27 0:401f3ae5ab50 77 // Buchstaben aus der Befehlstabelle verglichen
rs27 0:401f3ae5ab50 78
rs27 0:401f3ae5ab50 79 bottom = 0; // untere Suchgrenze
rs27 0:401f3ae5ab50 80 top = COMMAND_MAX; // obere Suchgerenze
rs27 0:401f3ae5ab50 81 ch = mon_line[0]; // hole erstes Suchzeichen
rs27 0:401f3ae5ab50 82
rs27 0:401f3ae5ab50 83 do
rs27 0:401f3ae5ab50 84 {
rs27 0:401f3ae5ab50 85 i = (top + bottom) >> 1; // suche in der Mitte des Feldes beginnen
rs27 0:401f3ae5ab50 86 tch = command [i][0]; // Vergleichszeichen laden
rs27 0:401f3ae5ab50 87 if (tch == ch) break; // Zeichen gefunden
rs27 0:401f3ae5ab50 88 if (tch > ch) top = i; // nach unten suchen
rs27 0:401f3ae5ab50 89 else bottom = i; // nach oben suchen
rs27 0:401f3ae5ab50 90 if (bottom != 0 && top == bottom + 1) break; // kein Buchstabe gef.
rs27 0:401f3ae5ab50 91
rs27 0:401f3ae5ab50 92 } while (i > 0 && i < COMMAND_MAX - 1);
rs27 0:401f3ae5ab50 93
rs27 0:401f3ae5ab50 94 if (tch != ch)
rs27 0:401f3ae5ab50 95 {
rs27 0:401f3ae5ab50 96 pc.printf("\nParser Kommando nicht gefunden\n");
rs27 0:401f3ae5ab50 97 return; // Kommando nicht gefunden wurde
rs27 0:401f3ae5ab50 98 }
rs27 0:401f3ae5ab50 99
rs27 0:401f3ae5ab50 100 // das erst Wort soll von den Übergabeparametern isoliert werden
rs27 0:401f3ae5ab50 101
rs27 0:401f3ae5ab50 102 for (i = 0; mon_line[i] != ' ' && mon_line[i] != 0; i++);
rs27 0:401f3ae5ab50 103 len = i;
rs27 0:401f3ae5ab50 104
rs27 0:401f3ae5ab50 105
rs27 0:401f3ae5ab50 106 if (i == 0) return;
rs27 0:401f3ae5ab50 107
rs27 0:401f3ae5ab50 108 // die Übergabparameter ermitteln und in als Indexzeiger in
rs27 0:401f3ae5ab50 109 // 'ComLinePtr' abspeichern
rs27 0:401f3ae5ab50 110
rs27 0:401f3ae5ab50 111 for ( ; mon_line[i] == ' ' && mon_line[i] != 0; i++);
rs27 0:401f3ae5ab50 112 MonLinePtr = i;
rs27 0:401f3ae5ab50 113
rs27 0:401f3ae5ab50 114 // die binäre Suche nach den restlichen Zeichen wird hier fortgesetzt
rs27 0:401f3ae5ab50 115
rs27 0:401f3ae5ab50 116 do
rs27 0:401f3ae5ab50 117 {
rs27 0:401f3ae5ab50 118 i = (top + bottom) >> 1; // berechnen des Suchplatzes
rs27 0:401f3ae5ab50 119 //printf_P (PSTR("\n\rVergleich 1 com_line = [%s] und Länge = [%d]"),com_line,len);
rs27 0:401f3ae5ab50 120 //strcpy_P (temp, &command[i][0]);
rs27 0:401f3ae5ab50 121 //printf_P (PSTR("\n\rVergleich 2 command[i] = [%s] und Index = [%d]"),temp,i);
rs27 0:401f3ae5ab50 122 res = strncmp(mon_line, &command[i][0], len);
rs27 0:401f3ae5ab50 123 //printf_P (PSTR("\n\rVergleich 3 res = [%d]"),res);
rs27 0:401f3ae5ab50 124 if (res == 0) break; // Zeichen gefunden
rs27 0:401f3ae5ab50 125 if (res > 0)
rs27 0:401f3ae5ab50 126 bottom = i; // nach unten suchen
rs27 0:401f3ae5ab50 127 else
rs27 0:401f3ae5ab50 128 top = i; // nach oben suchen
rs27 0:401f3ae5ab50 129 if (bottom != 0 && top == bottom + 1) break;
rs27 0:401f3ae5ab50 130
rs27 0:401f3ae5ab50 131 } while (i > 0 && i < COMMAND_MAX - 1);
rs27 0:401f3ae5ab50 132
rs27 0:401f3ae5ab50 133
rs27 0:401f3ae5ab50 134 if (res)
rs27 0:401f3ae5ab50 135 {
rs27 0:401f3ae5ab50 136 pc.printf("\nParser Kommando nicht gefunden.\n");
rs27 0:401f3ae5ab50 137 }
rs27 0:401f3ae5ab50 138 else
rs27 0:401f3ae5ab50 139 {
rs27 0:401f3ae5ab50 140 pc.printf("\nAufruf von Funktion %d",i);
rs27 0:401f3ae5ab50 141
rs27 0:401f3ae5ab50 142 // "CLCD","DATE","DEL","DIR","DUMP","FILL","HELP","LIST","SET","TIME"};
rs27 0:401f3ae5ab50 143
rs27 0:401f3ae5ab50 144 switch(i) // Programmaufruf
rs27 0:401f3ae5ab50 145 {
rs27 0:401f3ae5ab50 146 case 0: clcd(); break;
rs27 0:401f3ae5ab50 147 case 1: date(); break;
rs27 0:401f3ae5ab50 148 case 2: del(); break;
rs27 0:401f3ae5ab50 149 case 3: dir(); break;
rs27 0:401f3ae5ab50 150 case 4: dump(); break;
rs27 0:401f3ae5ab50 151 case 5: fill(); break;
rs27 0:401f3ae5ab50 152 case 6: help(); break;
rs27 0:401f3ae5ab50 153 case 7: list(); break;
rs27 0:401f3ae5ab50 154 case 8: read_menu(); break;
rs27 0:401f3ae5ab50 155 case 9: rename(); break;
rs27 0:401f3ae5ab50 156 case 10: set(); break;
rs27 0:401f3ae5ab50 157 case 11: time(); break;
rs27 0:401f3ae5ab50 158 }
rs27 0:401f3ae5ab50 159 }
rs27 0:401f3ae5ab50 160 }
rs27 0:401f3ae5ab50 161
rs27 0:401f3ae5ab50 162 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 163 //
rs27 0:401f3ae5ab50 164 // Function name : monitor
rs27 0:401f3ae5ab50 165 //
rs27 0:401f3ae5ab50 166 // Returns : none
rs27 0:401f3ae5ab50 167 //
rs27 0:401f3ae5ab50 168 // Parameters : none
rs27 0:401f3ae5ab50 169 //
rs27 0:401f3ae5ab50 170 // Purpose : Monitor für die Benutzereingabe
rs27 0:401f3ae5ab50 171 //
rs27 0:401f3ae5ab50 172 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 173 void monitor::monPC(void)
rs27 0:401f3ae5ab50 174 {
rs27 0:401f3ae5ab50 175 uint8_t i;
rs27 0:401f3ae5ab50 176 char ch;
rs27 0:401f3ae5ab50 177
rs27 0:401f3ae5ab50 178 monLine();
rs27 0:401f3ae5ab50 179 if (cr_flag) // Neue Eingabezeile
rs27 0:401f3ae5ab50 180 {
rs27 0:401f3ae5ab50 181 if (mon_line[0] != 0)
rs27 0:401f3ae5ab50 182 {
rs27 0:401f3ae5ab50 183 // Zeichenkette in Großbuchstaben umwandeln
rs27 0:401f3ae5ab50 184 for (i = 0; mon_line[i] != 0; i++)
rs27 0:401f3ae5ab50 185 {
rs27 0:401f3ae5ab50 186 ch = mon_line[i];
rs27 0:401f3ae5ab50 187 ch = toupper(ch); // Nur Großbuchstaben
rs27 0:401f3ae5ab50 188 mon_line[i] = ch;
rs27 0:401f3ae5ab50 189 //pc.printf(("\n[%02x] %c"),ch,ch);
rs27 0:401f3ae5ab50 190 if (ch == ' ') i = MON_LINE_LEN;
rs27 0:401f3ae5ab50 191 }
rs27 0:401f3ae5ab50 192
rs27 0:401f3ae5ab50 193 // pc.printf("\n monitor %s", mon_line); // zum Testen => später wird der parcer aufgerufen
rs27 0:401f3ae5ab50 194 parser(); // Parcer wird aufgerufen
rs27 0:401f3ae5ab50 195 }
rs27 0:401f3ae5ab50 196
rs27 0:401f3ae5ab50 197 for (i=0; i < MON_LINE_LEN; mon_line[i++] = 0);
rs27 0:401f3ae5ab50 198 MonLinePtr = 0;
rs27 0:401f3ae5ab50 199 cr_flag = 0;
rs27 0:401f3ae5ab50 200 }
rs27 0:401f3ae5ab50 201 }
rs27 0:401f3ae5ab50 202
rs27 0:401f3ae5ab50 203 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 204 //
rs27 0:401f3ae5ab50 205 // Function name : mon_line
rs27 0:401f3ae5ab50 206 //
rs27 0:401f3ae5ab50 207 // Returns : none
rs27 0:401f3ae5ab50 208 //
rs27 0:401f3ae5ab50 209 // Parameters : none
rs27 0:401f3ae5ab50 210 //
rs27 0:401f3ae5ab50 211 // Purpose :
rs27 0:401f3ae5ab50 212 // Wird periodisch in unregelmäsigen Abständen aufgerufen und ermittelt,
rs27 0:401f3ae5ab50 213 // ob weitere Zeichen von der Schnittstelle empfangen und die Eingabe
rs27 0:401f3ae5ab50 214 // mit Carrige Return abgeschlossen wurde. Sollte dies der Fall sein,
rs27 0:401f3ae5ab50 215 // wird das CR_FLAG gesetzt. Auch Editierfunktionen werden in diesem
rs27 0:401f3ae5ab50 216 // Rahmen behandelt.
rs27 0:401f3ae5ab50 217 //
rs27 0:401f3ae5ab50 218 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 219
rs27 0:401f3ae5ab50 220 void monitor::monLine (void)
rs27 0:401f3ae5ab50 221 {
rs27 0:401f3ae5ab50 222 int ch;
rs27 0:401f3ae5ab50 223
rs27 0:401f3ae5ab50 224 if (pc.readable() == false) return; // kein Zeichen vorhanden
rs27 0:401f3ae5ab50 225
rs27 0:401f3ae5ab50 226 if (MonLinePtr >= 40) // Zeilenüberlauf ?
rs27 0:401f3ae5ab50 227 {
rs27 0:401f3ae5ab50 228 cr_flag = 1;
rs27 0:401f3ae5ab50 229 return;
rs27 0:401f3ae5ab50 230 }
rs27 0:401f3ae5ab50 231
rs27 0:401f3ae5ab50 232 ch = pc.getc(); // Hole das Zeichen
rs27 0:401f3ae5ab50 233 //pc.printf("\nmon_line: %c [%02x]",ch,ch); // nur zum Test
rs27 0:401f3ae5ab50 234
rs27 0:401f3ae5ab50 235 switch(ch)
rs27 0:401f3ae5ab50 236 {
rs27 0:401f3ae5ab50 237 //case ESC: esc_flag = 1; // Sonder Stringkommandos
rs27 0:401f3ae5ab50 238 // break;
rs27 0:401f3ae5ab50 239
rs27 0:401f3ae5ab50 240 case '\r': // CARRIAGE RETURN
rs27 0:401f3ae5ab50 241 cr_flag = 1;
rs27 0:401f3ae5ab50 242 break;
rs27 0:401f3ae5ab50 243
rs27 0:401f3ae5ab50 244 case '\n': // LF empfangen
rs27 0:401f3ae5ab50 245 cr_flag = 1;
rs27 0:401f3ae5ab50 246 break;
rs27 0:401f3ae5ab50 247
rs27 0:401f3ae5ab50 248 default: // Normales Zeichen
rs27 0:401f3ae5ab50 249 if (~iscntrl(ch))
rs27 0:401f3ae5ab50 250 {
rs27 0:401f3ae5ab50 251 mon_line[MonLinePtr] = ch; // Zeichen einfuegen
rs27 0:401f3ae5ab50 252 MonLinePtr++;
rs27 0:401f3ae5ab50 253 // pc.putc(ch);
rs27 0:401f3ae5ab50 254 }
rs27 0:401f3ae5ab50 255 break;
rs27 0:401f3ae5ab50 256
rs27 0:401f3ae5ab50 257 } // Ende SWITCH
rs27 0:401f3ae5ab50 258 }
rs27 0:401f3ae5ab50 259
rs27 0:401f3ae5ab50 260 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 261 // monitor Aufruf damp
rs27 0:401f3ae5ab50 262
rs27 0:401f3ae5ab50 263 void monitor::dump(void)
rs27 0:401f3ae5ab50 264 {
rs27 0:401f3ae5ab50 265 pc.printf("\nin dump");
rs27 0:401f3ae5ab50 266 }
rs27 0:401f3ae5ab50 267
rs27 0:401f3ae5ab50 268 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 269 // monitor Aufruf clcd contrast lcd
rs27 0:401f3ae5ab50 270
rs27 0:401f3ae5ab50 271 void monitor::clcd (void)
rs27 0:401f3ae5ab50 272 {
rs27 0:401f3ae5ab50 273 int n, val;
rs27 0:401f3ae5ab50 274
rs27 0:401f3ae5ab50 275 n = sscanf(&mon_line[MonLinePtr],"%d",&val);
rs27 0:401f3ae5ab50 276
rs27 0:401f3ae5ab50 277 switch (n)
rs27 0:401f3ae5ab50 278 {
rs27 0:401f3ae5ab50 279 case -1:
rs27 0:401f3ae5ab50 280
rs27 0:401f3ae5ab50 281 pc.printf("\n bitte Wert angeben");
rs27 0:401f3ae5ab50 282 pc.printf("\n Wert >> 0 bis 100");
rs27 0:401f3ae5ab50 283 pc.printf("\n default Wert = 30");
rs27 0:401f3ae5ab50 284 break;
rs27 0:401f3ae5ab50 285
rs27 0:401f3ae5ab50 286 case 1: //status[pos] = val;
rs27 0:401f3ae5ab50 287 if (val < 0) val = 0;
rs27 0:401f3ae5ab50 288 if (val > 100) val = 100;
rs27 0:401f3ae5ab50 289 lcd_kontrast.pulsewidth_us(val); // Kontrastwert setzen
rs27 0:401f3ae5ab50 290 pc.printf("\n LCD Kontrast = %d",val);
rs27 0:401f3ae5ab50 291 break;
rs27 0:401f3ae5ab50 292 } // end switch
rs27 0:401f3ae5ab50 293
rs27 0:401f3ae5ab50 294 }
rs27 0:401f3ae5ab50 295 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 296 // monitor Aufruf help
rs27 0:401f3ae5ab50 297
rs27 0:401f3ae5ab50 298 void monitor::help(void)
rs27 0:401f3ae5ab50 299 {
rs27 0:401f3ae5ab50 300 pc.printf("\n -- help ------------------------");
rs27 0:401f3ae5ab50 301 pc.printf("\n clcd val >> lcd Kontrast");
rs27 0:401f3ae5ab50 302 pc.printf("\n set index [val] >> Sensor auswaehlen");
rs27 0:401f3ae5ab50 303 pc.printf("\n time [std min sek tag monat jahr]");
rs27 0:401f3ae5ab50 304 pc.printf("\n");
rs27 0:401f3ae5ab50 305 pc.printf("\n -- files ------------------------");
rs27 0:401f3ae5ab50 306 pc.printf("\n dir >> Dateien anzeigen");
rs27 0:401f3ae5ab50 307 pc.printf("\n list name >> den Inhalte einer Datei anzeigen");
rs27 0:401f3ae5ab50 308 pc.printf("\n del name >> eine Datei loeschen");
rs27 0:401f3ae5ab50 309 pc.printf("\n fill name [zeilen] >> eine Datei anlegen und fuellen");
rs27 0:401f3ae5ab50 310 pc.printf("\n rn name name >> eine Datei umbenennen");
rs27 0:401f3ae5ab50 311 pc.printf("\n menu testen der menu Funktion");
rs27 0:401f3ae5ab50 312 pc.printf("\n");
rs27 0:401f3ae5ab50 313 }
rs27 0:401f3ae5ab50 314
rs27 0:401f3ae5ab50 315 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 316 // monitor Aufruf set
rs27 0:401f3ae5ab50 317
rs27 0:401f3ae5ab50 318 void monitor::set(void)
rs27 0:401f3ae5ab50 319 {
rs27 0:401f3ae5ab50 320 int n, pos, val;
rs27 0:401f3ae5ab50 321
rs27 0:401f3ae5ab50 322 n = sscanf(&mon_line[MonLinePtr],"%d %d",&pos,&val);
rs27 0:401f3ae5ab50 323
rs27 0:401f3ae5ab50 324 switch (n)
rs27 0:401f3ae5ab50 325 {
rs27 0:401f3ae5ab50 326 case -1: pc.printf("\nbitte index [wert] angeben");
rs27 0:401f3ae5ab50 327 pc.printf("\n Index >> Sonsor 0 bis 7");
rs27 0:401f3ae5ab50 328 pc.printf("\n wert >> 0 = inaktiv, 1 = Rohwerte, 2 = errechneter Wert");
rs27 0:401f3ae5ab50 329 break;
rs27 0:401f3ae5ab50 330
rs27 0:401f3ae5ab50 331 case 1: pc.printf("\nread status[%d] ",pos);
rs27 0:401f3ae5ab50 332 break;
rs27 0:401f3ae5ab50 333
rs27 0:401f3ae5ab50 334 case 2: //status[pos] = val;
rs27 0:401f3ae5ab50 335 pc.printf("\nset status[%d] = %d",pos);
rs27 0:401f3ae5ab50 336 break;
rs27 0:401f3ae5ab50 337 } // end switch
rs27 0:401f3ae5ab50 338 }
rs27 0:401f3ae5ab50 339
rs27 0:401f3ae5ab50 340 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 341 // monitor Aufruf date
rs27 0:401f3ae5ab50 342
rs27 0:401f3ae5ab50 343 void monitor::date(void)
rs27 0:401f3ae5ab50 344 {
rs27 0:401f3ae5ab50 345 pc.printf("\nin date");
rs27 0:401f3ae5ab50 346 }
rs27 0:401f3ae5ab50 347
rs27 0:401f3ae5ab50 348 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 349 // monitor Aufruf time
rs27 0:401f3ae5ab50 350
rs27 0:401f3ae5ab50 351 void monitor::time(void)
rs27 0:401f3ae5ab50 352 {
rs27 0:401f3ae5ab50 353 int sek, min, std, day, month, year, n;
rs27 0:401f3ae5ab50 354
rs27 0:401f3ae5ab50 355 sek = 0;
rs27 0:401f3ae5ab50 356 min = 0;
rs27 0:401f3ae5ab50 357 std = 0;
rs27 0:401f3ae5ab50 358 day = 0;
rs27 0:401f3ae5ab50 359 month = 0;
rs27 0:401f3ae5ab50 360 year = 0;
rs27 0:401f3ae5ab50 361
rs27 0:401f3ae5ab50 362 n = sscanf(&mon_line[MonLinePtr],"%d %d %d %d %d %d",&std, &min, &sek, &day, &month, &year);
rs27 0:401f3ae5ab50 363
rs27 0:401f3ae5ab50 364 switch (n)
rs27 0:401f3ae5ab50 365 {
rs27 0:401f3ae5ab50 366 case -1 : // keine Zeichenübergabe
rs27 0:401f3ae5ab50 367 case 0 : // keine Zeichenübergabe
rs27 0:401f3ae5ab50 368
rs27 0:401f3ae5ab50 369 strftime(buffer, 40, "%a, %d.%m.%Y %H:%M:%S", localtime(&down_timer.seconds));
rs27 0:401f3ae5ab50 370 pc.printf("\nTime = %s\n", buffer);
rs27 0:401f3ae5ab50 371 break;
rs27 0:401f3ae5ab50 372
rs27 0:401f3ae5ab50 373 case 1 : // std
rs27 0:401f3ae5ab50 374 case 2 : // min
rs27 0:401f3ae5ab50 375 case 3 : // sek
rs27 0:401f3ae5ab50 376 case 4 : // tag
rs27 0:401f3ae5ab50 377 case 5 : // mon
rs27 0:401f3ae5ab50 378 case 6 : // jahr
rs27 0:401f3ae5ab50 379
rs27 0:401f3ae5ab50 380 if (sek > 59) sek = 59;
rs27 0:401f3ae5ab50 381 if (sek < 0) sek = 0;
rs27 0:401f3ae5ab50 382 buffer[0] = (uint8_t)sek;;
rs27 0:401f3ae5ab50 383
rs27 0:401f3ae5ab50 384 if (min > 59) min = 59;
rs27 0:401f3ae5ab50 385 if (min < 0) min = 0;
rs27 0:401f3ae5ab50 386 buffer[1] = (uint8_t)min;
rs27 0:401f3ae5ab50 387
rs27 0:401f3ae5ab50 388 if (std > 23) std = 23;
rs27 0:401f3ae5ab50 389 if (std < 0) std = 0;
rs27 0:401f3ae5ab50 390 buffer[2] = (uint8_t)std;
rs27 0:401f3ae5ab50 391
rs27 0:401f3ae5ab50 392 if (day > 31) day = 31;
rs27 0:401f3ae5ab50 393 if (day < 0) day = 0;
rs27 0:401f3ae5ab50 394 buffer[3] = (uint8_t)day;;
rs27 0:401f3ae5ab50 395
rs27 0:401f3ae5ab50 396 if (month > 12) month = 12;
rs27 0:401f3ae5ab50 397 if (month < 0) month = 0;
rs27 0:401f3ae5ab50 398 buffer[4] = (uint8_t)month;
rs27 0:401f3ae5ab50 399
rs27 0:401f3ae5ab50 400 if (year > 2100) year = 2100;
rs27 0:401f3ae5ab50 401 if (year < 2000) year = 2000;
rs27 0:401f3ae5ab50 402 buffer[5] = (uint8_t)(year - 1900);
rs27 0:401f3ae5ab50 403
rs27 0:401f3ae5ab50 404 down_timer.Set_t((uint8_t *)buffer);
rs27 0:401f3ae5ab50 405
rs27 0:401f3ae5ab50 406 strftime(buffer, 40, "%a, %d.%m.%Y %H:%M:%S", localtime(&down_timer.seconds));
rs27 0:401f3ae5ab50 407 pc.printf("\nnew Time = %s\n", buffer);
rs27 0:401f3ae5ab50 408 break;
rs27 0:401f3ae5ab50 409 }
rs27 0:401f3ae5ab50 410 }
rs27 0:401f3ae5ab50 411
rs27 0:401f3ae5ab50 412 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 413 // monitor Aufruf dir
rs27 0:401f3ae5ab50 414 //
rs27 0:401f3ae5ab50 415 // weiter Infos siehe auch
rs27 0:401f3ae5ab50 416 // http://elm-chan.org/fsw/ff/00index_e.html
rs27 0:401f3ae5ab50 417 //
rs27 0:401f3ae5ab50 418 void monitor::dir(void)
rs27 0:401f3ae5ab50 419 {
rs27 0:401f3ae5ab50 420
rs27 0:401f3ae5ab50 421 long size;
rs27 0:401f3ae5ab50 422 float f_size;
rs27 0:401f3ae5ab50 423 int i, len;
rs27 0:401f3ae5ab50 424
rs27 0:401f3ae5ab50 425 DIR *d;
rs27 0:401f3ae5ab50 426 struct dirent *p;
rs27 0:401f3ae5ab50 427
rs27 0:401f3ae5ab50 428 d = opendir("/sd");
rs27 0:401f3ae5ab50 429 if (d != NULL)
rs27 0:401f3ae5ab50 430 {
rs27 0:401f3ae5ab50 431 while ((p = readdir(d)) != NULL)
rs27 0:401f3ae5ab50 432 {
rs27 0:401f3ae5ab50 433 sprintf(buffer,"/sd/%s",p->d_name);
rs27 0:401f3ae5ab50 434 pc.printf("\n %s", p->d_name);
rs27 0:401f3ae5ab50 435 FILE * f = fopen(buffer, "r");
rs27 0:401f3ae5ab50 436 fseek(f, 0, SEEK_END); // seek to end of file
rs27 0:401f3ae5ab50 437 size = ftell(f); // get current file pointer
rs27 0:401f3ae5ab50 438
rs27 0:401f3ae5ab50 439 len = strlen(p->d_name);
rs27 0:401f3ae5ab50 440 for (i = len; i < 16; i++) pc.printf("%c",' ');
rs27 0:401f3ae5ab50 441
rs27 0:401f3ae5ab50 442 if (size < 1024)
rs27 0:401f3ae5ab50 443 {
rs27 0:401f3ae5ab50 444 sprintf(buffer," %ld bytes ",size);
rs27 0:401f3ae5ab50 445 }
rs27 0:401f3ae5ab50 446 else
rs27 0:401f3ae5ab50 447 {
rs27 0:401f3ae5ab50 448 if (size > 1048576)
rs27 0:401f3ae5ab50 449 {
rs27 0:401f3ae5ab50 450 f_size = size / 1048576.0;
rs27 0:401f3ae5ab50 451 sprintf(buffer," %0.3f MB ",f_size);
rs27 0:401f3ae5ab50 452
rs27 0:401f3ae5ab50 453 }
rs27 0:401f3ae5ab50 454 else
rs27 0:401f3ae5ab50 455 {
rs27 0:401f3ae5ab50 456 f_size = size / 1024.0;
rs27 0:401f3ae5ab50 457 sprintf(buffer," %0.3f kB ",f_size);
rs27 0:401f3ae5ab50 458 }
rs27 0:401f3ae5ab50 459 }
rs27 0:401f3ae5ab50 460
rs27 0:401f3ae5ab50 461 pc.printf("%s",buffer);
rs27 0:401f3ae5ab50 462
rs27 0:401f3ae5ab50 463 len = strlen(buffer);
rs27 0:401f3ae5ab50 464 for (i = len; i < 16; i++) pc.printf("%c",' ');
rs27 0:401f3ae5ab50 465
rs27 0:401f3ae5ab50 466 // fno.fdate = (WORD)(((year - 1980) * 512U) | month * 32U | mday);
rs27 0:401f3ae5ab50 467 // fno.ftime = (WORD)(hour * 2048U | min * 32U | sec / 2U);
rs27 0:401f3ae5ab50 468
rs27 0:401f3ae5ab50 469 unsigned long fdate = p->fdate;
rs27 0:401f3ae5ab50 470 unsigned long ftime = p->ftime;
rs27 0:401f3ae5ab50 471
rs27 0:401f3ae5ab50 472 pc.printf("%02d:",(ftime>>11)); // Stunden
rs27 0:401f3ae5ab50 473 pc.printf("%02d:",((ftime & 0x000007E0)>>5)); // Minuten
rs27 0:401f3ae5ab50 474 pc.printf("%02d ",((ftime & 0x0000001F)*2)); // Sekunden
rs27 0:401f3ae5ab50 475
rs27 0:401f3ae5ab50 476 pc.printf("%02d.",(fdate & 0x0000001F)); // Tag
rs27 0:401f3ae5ab50 477 pc.printf("%02d.",((fdate & 0x000001E0)>>5)); // Monat
rs27 0:401f3ae5ab50 478 pc.printf("%04d ",((fdate>>9)+1980)); // Monat
rs27 0:401f3ae5ab50 479
rs27 0:401f3ae5ab50 480
rs27 0:401f3ae5ab50 481 // time_t fattime = get_fattime();
rs27 0:401f3ae5ab50 482 // strftime(buffer, 40, "%a,%d %m %Y.%H:%M:%S", localtime(&fattime));
rs27 0:401f3ae5ab50 483 // pc.printf(" %s ", buffer);
rs27 0:401f3ae5ab50 484
rs27 0:401f3ae5ab50 485 fclose(f);
rs27 0:401f3ae5ab50 486 }
rs27 0:401f3ae5ab50 487
rs27 0:401f3ae5ab50 488 }
rs27 0:401f3ae5ab50 489 else
rs27 0:401f3ae5ab50 490 {
rs27 0:401f3ae5ab50 491 pc.printf("\nCould not open directory!\n");
rs27 0:401f3ae5ab50 492 }
rs27 0:401f3ae5ab50 493 closedir(d);
rs27 0:401f3ae5ab50 494
rs27 0:401f3ae5ab50 495
rs27 0:401f3ae5ab50 496 FATFS* fs;
rs27 0:401f3ae5ab50 497 DWORD fre_clust;
rs27 0:401f3ae5ab50 498 f_getfree("0:",&fre_clust,&fs);
rs27 0:401f3ae5ab50 499 const float frs = float(fs->csize)*float(fs->free_clust)
rs27 0:401f3ae5ab50 500 #if _MAX_SS != 512
rs27 0:401f3ae5ab50 501 *(fs->ssize);
rs27 0:401f3ae5ab50 502 #else
rs27 0:401f3ae5ab50 503 *512;
rs27 0:401f3ae5ab50 504 #endif
rs27 0:401f3ae5ab50 505 pc.printf("\n\nfree space = %0.3f GB",frs/1073741824.0);
rs27 0:401f3ae5ab50 506
rs27 0:401f3ae5ab50 507 pc.printf("\ndone\n");
rs27 0:401f3ae5ab50 508 }
rs27 0:401f3ae5ab50 509
rs27 0:401f3ae5ab50 510 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 511 // monitor Aufruf list
rs27 0:401f3ae5ab50 512
rs27 0:401f3ae5ab50 513 void monitor::list(void)
rs27 0:401f3ae5ab50 514 {
rs27 0:401f3ae5ab50 515 char dname[25];
rs27 0:401f3ae5ab50 516
rs27 0:401f3ae5ab50 517 sscanf(&mon_line[MonLinePtr],"%s",dname);
rs27 0:401f3ae5ab50 518 sprintf(buffer,"/sd/%s",dname);
rs27 0:401f3ae5ab50 519 pc.printf("\nlist, file %s \n",buffer);
rs27 0:401f3ae5ab50 520 FILE * fp = fopen(buffer, "r");
rs27 0:401f3ae5ab50 521 if(fp == NULL)
rs27 0:401f3ae5ab50 522 {
rs27 0:401f3ae5ab50 523 pc.printf("\nCould not open file for read\n\r");
rs27 0:401f3ae5ab50 524 return;
rs27 0:401f3ae5ab50 525 }
rs27 0:401f3ae5ab50 526
rs27 0:401f3ae5ab50 527 // mit fgets werden die Zeile einzeln gelesen, wenn die Länge < 64 Zeichen ist
rs27 0:401f3ae5ab50 528
rs27 0:401f3ae5ab50 529 while (fgets(buffer, 64, fp))
rs27 0:401f3ae5ab50 530 {
rs27 0:401f3ae5ab50 531 pc.printf("> %s", buffer);
rs27 0:401f3ae5ab50 532 }
rs27 0:401f3ae5ab50 533
rs27 0:401f3ae5ab50 534 fclose(fp);
rs27 0:401f3ae5ab50 535 pc.printf("\ndone\n");
rs27 0:401f3ae5ab50 536 }
rs27 0:401f3ae5ab50 537
rs27 0:401f3ae5ab50 538 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 539 // monitor Aufruf del
rs27 0:401f3ae5ab50 540
rs27 0:401f3ae5ab50 541 void monitor::del(void)
rs27 0:401f3ae5ab50 542 {
rs27 0:401f3ae5ab50 543 char dname[25];
rs27 0:401f3ae5ab50 544
rs27 0:401f3ae5ab50 545 sscanf(&mon_line[MonLinePtr],"%s",dname);
rs27 0:401f3ae5ab50 546 sprintf(buffer,"/sd/%s",dname);
rs27 0:401f3ae5ab50 547 pc.printf("\ndelete file %s",buffer);
rs27 0:401f3ae5ab50 548 remove(buffer);
rs27 0:401f3ae5ab50 549 //int res = sd.re_name("/sd/test1","/sd/test1.txt");
rs27 0:401f3ae5ab50 550 pc.printf("\ndone");
rs27 0:401f3ae5ab50 551 }
rs27 0:401f3ae5ab50 552
rs27 0:401f3ae5ab50 553 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 554 // monitor Aufruf fill
rs27 0:401f3ae5ab50 555
rs27 0:401f3ae5ab50 556 void monitor::fill(void)
rs27 0:401f3ae5ab50 557 {
rs27 0:401f3ae5ab50 558 char dname[25];
rs27 0:401f3ae5ab50 559 int n = 20;
rs27 0:401f3ae5ab50 560
rs27 0:401f3ae5ab50 561 sscanf(&mon_line[MonLinePtr],"%s %d",dname,&n);
rs27 0:401f3ae5ab50 562 sprintf(buffer,"/sd/%s",dname);
rs27 0:401f3ae5ab50 563 pc.printf("\nfill file %s \n",buffer);
rs27 0:401f3ae5ab50 564 FILE *fp = fopen(buffer, "w");
rs27 0:401f3ae5ab50 565 if(fp == NULL)
rs27 0:401f3ae5ab50 566 {
rs27 0:401f3ae5ab50 567 pc.printf("Could not open file for write\n");
rs27 0:401f3ae5ab50 568 }
rs27 0:401f3ae5ab50 569 for (int i = 0; i<n; i++)
rs27 0:401f3ae5ab50 570 {
rs27 0:401f3ae5ab50 571 fprintf(fp, "\nschreibe eine Zeile %d ",i);
rs27 0:401f3ae5ab50 572 }
rs27 0:401f3ae5ab50 573 fclose(fp);
rs27 0:401f3ae5ab50 574 pc.printf("\ndone\n");
rs27 0:401f3ae5ab50 575 }
rs27 0:401f3ae5ab50 576
rs27 0:401f3ae5ab50 577 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 578 // monitor Aufruf rename
rs27 0:401f3ae5ab50 579
rs27 0:401f3ae5ab50 580 void monitor::rename(void)
rs27 0:401f3ae5ab50 581 {
rs27 0:401f3ae5ab50 582 // char str1[20]; // neuer Dateiname
rs27 0:401f3ae5ab50 583 // char str2[25]; // neuer Dateiname
rs27 0:401f3ae5ab50 584 // char str3[20]; // alter Dateiname
rs27 0:401f3ae5ab50 585 // char str4[25]; // alter Dateiname
rs27 0:401f3ae5ab50 586 int ch;
rs27 0:401f3ae5ab50 587
rs27 0:401f3ae5ab50 588 pc.printf("\nrename ");
rs27 0:401f3ae5ab50 589 sscanf(&mon_line[MonLinePtr],"%s %s",str3,str1);
rs27 0:401f3ae5ab50 590 sprintf(str4,"/sd/%s",str3);
rs27 0:401f3ae5ab50 591 pc.printf("%s ",str4);
rs27 0:401f3ae5ab50 592 FILE *fpold = fopen(str4, "r"); // src file
rs27 0:401f3ae5ab50 593 sprintf(str2,"/sd/%s",str1);
rs27 0:401f3ae5ab50 594 pc.printf("%s \n",str2);
rs27 0:401f3ae5ab50 595 FILE *fpnew = fopen(str2, "w"); // dest file
rs27 0:401f3ae5ab50 596
rs27 0:401f3ae5ab50 597 while (1) // Copy src to dest
rs27 0:401f3ae5ab50 598 {
rs27 0:401f3ae5ab50 599 ch = fgetc(fpold); // until src EOF read.
rs27 0:401f3ae5ab50 600 if (ch == EOF) break;
rs27 0:401f3ae5ab50 601 fputc(ch, fpnew);
rs27 0:401f3ae5ab50 602 }
rs27 0:401f3ae5ab50 603
rs27 0:401f3ae5ab50 604 fclose(fpnew);
rs27 0:401f3ae5ab50 605 fclose(fpold);
rs27 0:401f3ae5ab50 606
rs27 0:401f3ae5ab50 607 fpnew = fopen(str2, "r"); // Reopen dest to insure
rs27 0:401f3ae5ab50 608 if(fpnew == NULL) // that it was created.
rs27 0:401f3ae5ab50 609 {
rs27 0:401f3ae5ab50 610 pc.printf("\nerror\n"); // Return Error.
rs27 0:401f3ae5ab50 611 }
rs27 0:401f3ae5ab50 612 else
rs27 0:401f3ae5ab50 613 {
rs27 0:401f3ae5ab50 614 fclose(fpnew);
rs27 0:401f3ae5ab50 615 remove(str4); // Remove original file.
rs27 0:401f3ae5ab50 616 pc.printf("\ndone\n"); // Return Success.
rs27 0:401f3ae5ab50 617 }
rs27 0:401f3ae5ab50 618 }
rs27 0:401f3ae5ab50 619
rs27 0:401f3ae5ab50 620 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 621 // wird für die Abfrage der Tasten verwendet
rs27 0:401f3ae5ab50 622
rs27 0:401f3ae5ab50 623 uint8_t monitor::taste(void)
rs27 0:401f3ae5ab50 624 {
rs27 0:401f3ae5ab50 625 tasten_old = tasten;
rs27 0:401f3ae5ab50 626
rs27 0:401f3ae5ab50 627 while(1)
rs27 0:401f3ae5ab50 628 {
rs27 0:401f3ae5ab50 629 if (S1 == 0) tasten |= 0x01; else tasten &= ~0x01;
rs27 0:401f3ae5ab50 630 if (S2 == 0) tasten |= 0x02; else tasten &= ~0x02;
rs27 0:401f3ae5ab50 631 if (S3 == 0) tasten |= 0x04; else tasten &= ~0x04;
rs27 0:401f3ae5ab50 632 if (S4 == 0) tasten |= 0x08; else tasten &= ~0x08;
rs27 0:401f3ae5ab50 633 if (S5 == 0) tasten |= 0x10; else tasten &= ~0x10;
rs27 0:401f3ae5ab50 634
rs27 0:401f3ae5ab50 635 if (tasten != tasten_old)
rs27 0:401f3ae5ab50 636 {
rs27 0:401f3ae5ab50 637 break;
rs27 0:401f3ae5ab50 638 }
rs27 0:401f3ae5ab50 639 com_line(); // in dieser Schleife läuft der Buffer sonst über
rs27 0:401f3ae5ab50 640 }
rs27 0:401f3ae5ab50 641 return tasten;
rs27 0:401f3ae5ab50 642 }
rs27 0:401f3ae5ab50 643
rs27 0:401f3ae5ab50 644 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 645 // monitor Aufruf menu
rs27 0:401f3ae5ab50 646
rs27 0:401f3ae5ab50 647 void monitor::read_menu(void)
rs27 0:401f3ae5ab50 648 {
rs27 0:401f3ae5ab50 649 uint8_t flag;
rs27 0:401f3ae5ab50 650 int anf, len, len_neu, end, index;
rs27 0:401f3ae5ab50 651
rs27 0:401f3ae5ab50 652 char ch;
rs27 0:401f3ae5ab50 653 int n = 1, pos, a;
rs27 0:401f3ae5ab50 654 int wert;
rs27 0:401f3ae5ab50 655
rs27 0:401f3ae5ab50 656 t.reset();
rs27 0:401f3ae5ab50 657 t.start();
rs27 0:401f3ae5ab50 658
rs27 0:401f3ae5ab50 659 n = sscanf(&mon_line[MonLinePtr],"%s %s %s %s",str1,str2,str3,str4);
rs27 0:401f3ae5ab50 660
rs27 0:401f3ae5ab50 661 if (n == 1)
rs27 0:401f3ae5ab50 662 {
rs27 0:401f3ae5ab50 663 pos = atoi(str1);
rs27 0:401f3ae5ab50 664 if (menu_var.getValue(pos,str2,str3,str4))
rs27 0:401f3ae5ab50 665 {
rs27 0:401f3ae5ab50 666 pc.printf("\nmenu: %d; %s; %s; %s",pos,str2,str3,str4);
rs27 0:401f3ae5ab50 667 }
rs27 0:401f3ae5ab50 668 }
rs27 0:401f3ae5ab50 669
rs27 0:401f3ae5ab50 670 t.stop();
rs27 0:401f3ae5ab50 671
rs27 0:401f3ae5ab50 672 lcd.set_lcd_flag(false);
rs27 0:401f3ae5ab50 673
rs27 0:401f3ae5ab50 674 lcd.cls(); // LCD löschen
rs27 0:401f3ae5ab50 675
rs27 0:401f3ae5ab50 676 wert = 555;
rs27 0:401f3ae5ab50 677
rs27 0:401f3ae5ab50 678 //wert = atoi(str4);
rs27 0:401f3ae5ab50 679 sprintf(str4," %d",wert);
rs27 0:401f3ae5ab50 680
rs27 0:401f3ae5ab50 681 end = 8;
rs27 0:401f3ae5ab50 682 len = strlen(str4); // drei Zeichen
rs27 0:401f3ae5ab50 683 anf = end - len; // position des erstes Zeichens in der Anzeige
rs27 0:401f3ae5ab50 684 index = len; // letzte Stelle im String
rs27 0:401f3ae5ab50 685 index--; // null zählt als das erste Zeichen
rs27 0:401f3ae5ab50 686
rs27 0:401f3ae5ab50 687 while(1)
rs27 0:401f3ae5ab50 688 {
rs27 0:401f3ae5ab50 689 // Wert auf der Anzeige ausgeben und ändern
rs27 0:401f3ae5ab50 690
rs27 0:401f3ae5ab50 691 sprintf(str4," %d",wert);
rs27 0:401f3ae5ab50 692
rs27 0:401f3ae5ab50 693 len_neu = strlen(str4); // drei Zeichen
rs27 0:401f3ae5ab50 694 anf = end - len_neu; // Position bestimmen
rs27 0:401f3ae5ab50 695 index += (len_neu - len);
rs27 0:401f3ae5ab50 696 len = len_neu;
rs27 0:401f3ae5ab50 697 if (index < 0) index = 0;
rs27 0:401f3ae5ab50 698 lcd.print_LCD(str4,1,anf);
rs27 0:401f3ae5ab50 699
rs27 0:401f3ae5ab50 700 ch = str4[index];
rs27 0:401f3ae5ab50 701
rs27 0:401f3ae5ab50 702 // Cursor setzen
rs27 0:401f3ae5ab50 703 a = lcd.address(anf + index,1);
rs27 0:401f3ae5ab50 704 lcd.writeCommand(a);
rs27 0:401f3ae5ab50 705 lcd.writeCommand(0x0F); // Curor einschalten
rs27 0:401f3ae5ab50 706
rs27 0:401f3ae5ab50 707 pc.printf("\n[%s], anf %d, end %d, index %d",str4, anf, end, index);
rs27 0:401f3ae5ab50 708
rs27 0:401f3ae5ab50 709 flag = taste();
rs27 0:401f3ae5ab50 710 pc.printf("\ntaste %02x wert %d",flag,wert);
rs27 0:401f3ae5ab50 711
rs27 0:401f3ae5ab50 712 switch (flag)
rs27 0:401f3ae5ab50 713 {
rs27 0:401f3ae5ab50 714 case 0x01: // left
rs27 0:401f3ae5ab50 715 if (index > 0)
rs27 0:401f3ae5ab50 716 {
rs27 0:401f3ae5ab50 717 index--;
rs27 0:401f3ae5ab50 718 }
rs27 0:401f3ae5ab50 719 break;
rs27 0:401f3ae5ab50 720
rs27 0:401f3ae5ab50 721 case 0x02: // down
rs27 0:401f3ae5ab50 722 if( ch > '0')
rs27 0:401f3ae5ab50 723 {
rs27 0:401f3ae5ab50 724 ch--;
rs27 0:401f3ae5ab50 725 str4[index] = ch;
rs27 0:401f3ae5ab50 726 }
rs27 0:401f3ae5ab50 727 break;
rs27 0:401f3ae5ab50 728
rs27 0:401f3ae5ab50 729 case 0x04: // up
rs27 0:401f3ae5ab50 730 if ((ch >= '0') && (ch < '9'))
rs27 0:401f3ae5ab50 731 {
rs27 0:401f3ae5ab50 732 ch++;
rs27 0:401f3ae5ab50 733 str4[index] = ch;
rs27 0:401f3ae5ab50 734 }
rs27 0:401f3ae5ab50 735
rs27 0:401f3ae5ab50 736 if (ch == ' ')
rs27 0:401f3ae5ab50 737 {
rs27 0:401f3ae5ab50 738 ch = '1';
rs27 0:401f3ae5ab50 739 str4[index] = ch;
rs27 0:401f3ae5ab50 740 }
rs27 0:401f3ae5ab50 741
rs27 0:401f3ae5ab50 742 break;
rs27 0:401f3ae5ab50 743
rs27 0:401f3ae5ab50 744 case 0x08: // rigth
rs27 0:401f3ae5ab50 745 if (index < len)
rs27 0:401f3ae5ab50 746 {
rs27 0:401f3ae5ab50 747 index++;
rs27 0:401f3ae5ab50 748 }
rs27 0:401f3ae5ab50 749 break;
rs27 0:401f3ae5ab50 750
rs27 0:401f3ae5ab50 751 } // end while
rs27 0:401f3ae5ab50 752
rs27 0:401f3ae5ab50 753 wert = atoi(str4);
rs27 0:401f3ae5ab50 754 if (flag == 0x10) break;
rs27 0:401f3ae5ab50 755 }
rs27 0:401f3ae5ab50 756
rs27 0:401f3ae5ab50 757 // die alten Daten wieder anzeigen
rs27 0:401f3ae5ab50 758 lcd.writeCommand(0x0C); // Cursor ausschalten
rs27 0:401f3ae5ab50 759 wait_us(40);
rs27 0:401f3ae5ab50 760
rs27 0:401f3ae5ab50 761 lcd.writeALL();
rs27 0:401f3ae5ab50 762 lcd.set_lcd_flag(true);
rs27 0:401f3ae5ab50 763
rs27 0:401f3ae5ab50 764 pc.printf("\ndone %f us\n",t.read()); // Return Success.
rs27 0:401f3ae5ab50 765
rs27 0:401f3ae5ab50 766 }