monitor

Dependents:   mini_02

Fork of mon by V09

Committer:
rs27
Date:
Fri Feb 05 14:40:00 2016 +0000
Revision:
1:bf1028d27a23
Parent:
0:401f3ae5ab50
Child:
2:512482b7f8c6
monitor

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 1:bf1028d27a23 4 // Chip....: iox.mini
rs27 0:401f3ae5ab50 5 //
rs27 0:401f3ae5ab50 6 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 7 // Author..: Reinhold Schäfer
rs27 1:bf1028d27a23 8 // Date....: 2016.01.23
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 "MODSERIAL.h"
rs27 0:401f3ae5ab50 16 #include "timer0.h"
rs27 1:bf1028d27a23 17 #include "rs_485.h"
rs27 0:401f3ae5ab50 18
rs27 0:401f3ae5ab50 19 extern MODSERIAL pc; // definiert in main
rs27 1:bf1028d27a23 20 extern timer0 down_timer; // Timer für Zeitsteuerung, definiert in main
rs27 1:bf1028d27a23 21 extern rs_485 RS485_BUS; // RS385 Schnittstelle für den H-Bus, definiert in main
rs27 0:401f3ae5ab50 22
rs27 1:bf1028d27a23 23 #define COMMAND_MAX 5
rs27 0:401f3ae5ab50 24 #define COMMAND_LEN 7
rs27 1:bf1028d27a23 25 // "DUMP","HELP","SET","TIME"};
rs27 1:bf1028d27a23 26 const char command[COMMAND_MAX][COMMAND_LEN] = {"DUMP","HELP","SEND","SET","TIME"};
rs27 0:401f3ae5ab50 27
rs27 0:401f3ae5ab50 28 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 29 // constructor
rs27 0:401f3ae5ab50 30
rs27 0:401f3ae5ab50 31 monitor::monitor(void)
rs27 0:401f3ae5ab50 32 {
rs27 0:401f3ae5ab50 33 uint8_t i;
rs27 0:401f3ae5ab50 34
rs27 0:401f3ae5ab50 35 for (i = 0; i < MON_LINE_LEN; mon_line[i++] = 0);
rs27 0:401f3ae5ab50 36 MonLinePtr = 0;
rs27 0:401f3ae5ab50 37 }
rs27 0:401f3ae5ab50 38
rs27 0:401f3ae5ab50 39 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 40 //
rs27 0:401f3ae5ab50 41 // Function name : PARSER
rs27 0:401f3ae5ab50 42 //
rs27 0:401f3ae5ab50 43 // Returns : none
rs27 0:401f3ae5ab50 44 //
rs27 0:401f3ae5ab50 45 // Parameters : none
rs27 0:401f3ae5ab50 46 //
rs27 0:401f3ae5ab50 47 // Purpose : wertet die Eingangszeile aus und verzweigt zum gewünschten
rs27 0:401f3ae5ab50 48 // Programm
rs27 0:401f3ae5ab50 49 //
rs27 0:401f3ae5ab50 50 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 51 void monitor::parser (void)
rs27 0:401f3ae5ab50 52 {
rs27 0:401f3ae5ab50 53 uint8_t i, ch, tch, top, bottom, len;
rs27 0:401f3ae5ab50 54 int8_t res;
rs27 0:401f3ae5ab50 55
rs27 0:401f3ae5ab50 56 // Zuerst wird der erste Buchstabe aus dem Eingabestring mit den ersten
rs27 0:401f3ae5ab50 57 // Buchstaben aus der Befehlstabelle verglichen
rs27 0:401f3ae5ab50 58
rs27 0:401f3ae5ab50 59 bottom = 0; // untere Suchgrenze
rs27 0:401f3ae5ab50 60 top = COMMAND_MAX; // obere Suchgerenze
rs27 0:401f3ae5ab50 61 ch = mon_line[0]; // hole erstes Suchzeichen
rs27 0:401f3ae5ab50 62
rs27 0:401f3ae5ab50 63 do
rs27 0:401f3ae5ab50 64 {
rs27 0:401f3ae5ab50 65 i = (top + bottom) >> 1; // suche in der Mitte des Feldes beginnen
rs27 0:401f3ae5ab50 66 tch = command [i][0]; // Vergleichszeichen laden
rs27 0:401f3ae5ab50 67 if (tch == ch) break; // Zeichen gefunden
rs27 0:401f3ae5ab50 68 if (tch > ch) top = i; // nach unten suchen
rs27 0:401f3ae5ab50 69 else bottom = i; // nach oben suchen
rs27 0:401f3ae5ab50 70 if (bottom != 0 && top == bottom + 1) break; // kein Buchstabe gef.
rs27 0:401f3ae5ab50 71
rs27 0:401f3ae5ab50 72 } while (i > 0 && i < COMMAND_MAX - 1);
rs27 0:401f3ae5ab50 73
rs27 0:401f3ae5ab50 74 if (tch != ch)
rs27 0:401f3ae5ab50 75 {
rs27 0:401f3ae5ab50 76 pc.printf("\nParser Kommando nicht gefunden\n");
rs27 0:401f3ae5ab50 77 return; // Kommando nicht gefunden wurde
rs27 0:401f3ae5ab50 78 }
rs27 0:401f3ae5ab50 79
rs27 0:401f3ae5ab50 80 // das erst Wort soll von den Übergabeparametern isoliert werden
rs27 0:401f3ae5ab50 81
rs27 0:401f3ae5ab50 82 for (i = 0; mon_line[i] != ' ' && mon_line[i] != 0; i++);
rs27 0:401f3ae5ab50 83 len = i;
rs27 0:401f3ae5ab50 84
rs27 0:401f3ae5ab50 85
rs27 0:401f3ae5ab50 86 if (i == 0) return;
rs27 0:401f3ae5ab50 87
rs27 0:401f3ae5ab50 88 // die Übergabparameter ermitteln und in als Indexzeiger in
rs27 0:401f3ae5ab50 89 // 'ComLinePtr' abspeichern
rs27 0:401f3ae5ab50 90
rs27 0:401f3ae5ab50 91 for ( ; mon_line[i] == ' ' && mon_line[i] != 0; i++);
rs27 0:401f3ae5ab50 92 MonLinePtr = i;
rs27 0:401f3ae5ab50 93
rs27 0:401f3ae5ab50 94 // die binäre Suche nach den restlichen Zeichen wird hier fortgesetzt
rs27 0:401f3ae5ab50 95
rs27 0:401f3ae5ab50 96 do
rs27 0:401f3ae5ab50 97 {
rs27 0:401f3ae5ab50 98 i = (top + bottom) >> 1; // berechnen des Suchplatzes
rs27 0:401f3ae5ab50 99 //printf_P (PSTR("\n\rVergleich 1 com_line = [%s] und Länge = [%d]"),com_line,len);
rs27 0:401f3ae5ab50 100 //strcpy_P (temp, &command[i][0]);
rs27 0:401f3ae5ab50 101 //printf_P (PSTR("\n\rVergleich 2 command[i] = [%s] und Index = [%d]"),temp,i);
rs27 0:401f3ae5ab50 102 res = strncmp(mon_line, &command[i][0], len);
rs27 0:401f3ae5ab50 103 //printf_P (PSTR("\n\rVergleich 3 res = [%d]"),res);
rs27 0:401f3ae5ab50 104 if (res == 0) break; // Zeichen gefunden
rs27 0:401f3ae5ab50 105 if (res > 0)
rs27 0:401f3ae5ab50 106 bottom = i; // nach unten suchen
rs27 0:401f3ae5ab50 107 else
rs27 0:401f3ae5ab50 108 top = i; // nach oben suchen
rs27 0:401f3ae5ab50 109 if (bottom != 0 && top == bottom + 1) break;
rs27 0:401f3ae5ab50 110
rs27 0:401f3ae5ab50 111 } while (i > 0 && i < COMMAND_MAX - 1);
rs27 0:401f3ae5ab50 112
rs27 0:401f3ae5ab50 113
rs27 0:401f3ae5ab50 114 if (res)
rs27 0:401f3ae5ab50 115 {
rs27 0:401f3ae5ab50 116 pc.printf("\nParser Kommando nicht gefunden.\n");
rs27 0:401f3ae5ab50 117 }
rs27 0:401f3ae5ab50 118 else
rs27 0:401f3ae5ab50 119 {
rs27 0:401f3ae5ab50 120 pc.printf("\nAufruf von Funktion %d",i);
rs27 0:401f3ae5ab50 121
rs27 1:bf1028d27a23 122 // "CLCD","DUMP","HELP","SET","TIME"};
rs27 0:401f3ae5ab50 123
rs27 0:401f3ae5ab50 124 switch(i) // Programmaufruf
rs27 0:401f3ae5ab50 125 {
rs27 1:bf1028d27a23 126 case 0: dump(); break;
rs27 1:bf1028d27a23 127 case 1: help(); break;
rs27 1:bf1028d27a23 128 case 2: send(); break;
rs27 1:bf1028d27a23 129 case 3: set(); break;
rs27 1:bf1028d27a23 130 case 4: time(); break;
rs27 0:401f3ae5ab50 131 }
rs27 0:401f3ae5ab50 132 }
rs27 0:401f3ae5ab50 133 }
rs27 0:401f3ae5ab50 134
rs27 0:401f3ae5ab50 135 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 136 //
rs27 0:401f3ae5ab50 137 // Function name : monitor
rs27 0:401f3ae5ab50 138 //
rs27 0:401f3ae5ab50 139 // Returns : none
rs27 0:401f3ae5ab50 140 //
rs27 0:401f3ae5ab50 141 // Parameters : none
rs27 0:401f3ae5ab50 142 //
rs27 0:401f3ae5ab50 143 // Purpose : Monitor für die Benutzereingabe
rs27 0:401f3ae5ab50 144 //
rs27 0:401f3ae5ab50 145 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 146 void monitor::monPC(void)
rs27 0:401f3ae5ab50 147 {
rs27 0:401f3ae5ab50 148 uint8_t i;
rs27 0:401f3ae5ab50 149 char ch;
rs27 0:401f3ae5ab50 150
rs27 0:401f3ae5ab50 151 monLine();
rs27 0:401f3ae5ab50 152 if (cr_flag) // Neue Eingabezeile
rs27 0:401f3ae5ab50 153 {
rs27 0:401f3ae5ab50 154 if (mon_line[0] != 0)
rs27 0:401f3ae5ab50 155 {
rs27 0:401f3ae5ab50 156 // Zeichenkette in Großbuchstaben umwandeln
rs27 0:401f3ae5ab50 157 for (i = 0; mon_line[i] != 0; i++)
rs27 0:401f3ae5ab50 158 {
rs27 0:401f3ae5ab50 159 ch = mon_line[i];
rs27 0:401f3ae5ab50 160 ch = toupper(ch); // Nur Großbuchstaben
rs27 0:401f3ae5ab50 161 mon_line[i] = ch;
rs27 0:401f3ae5ab50 162 //pc.printf(("\n[%02x] %c"),ch,ch);
rs27 0:401f3ae5ab50 163 if (ch == ' ') i = MON_LINE_LEN;
rs27 0:401f3ae5ab50 164 }
rs27 0:401f3ae5ab50 165
rs27 0:401f3ae5ab50 166 // pc.printf("\n monitor %s", mon_line); // zum Testen => später wird der parcer aufgerufen
rs27 0:401f3ae5ab50 167 parser(); // Parcer wird aufgerufen
rs27 0:401f3ae5ab50 168 }
rs27 0:401f3ae5ab50 169
rs27 0:401f3ae5ab50 170 for (i=0; i < MON_LINE_LEN; mon_line[i++] = 0);
rs27 0:401f3ae5ab50 171 MonLinePtr = 0;
rs27 0:401f3ae5ab50 172 cr_flag = 0;
rs27 0:401f3ae5ab50 173 }
rs27 0:401f3ae5ab50 174 }
rs27 0:401f3ae5ab50 175
rs27 0:401f3ae5ab50 176 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 177 //
rs27 0:401f3ae5ab50 178 // Function name : mon_line
rs27 0:401f3ae5ab50 179 //
rs27 0:401f3ae5ab50 180 // Returns : none
rs27 0:401f3ae5ab50 181 //
rs27 0:401f3ae5ab50 182 // Parameters : none
rs27 0:401f3ae5ab50 183 //
rs27 0:401f3ae5ab50 184 // Purpose :
rs27 0:401f3ae5ab50 185 // Wird periodisch in unregelmäsigen Abständen aufgerufen und ermittelt,
rs27 0:401f3ae5ab50 186 // ob weitere Zeichen von der Schnittstelle empfangen und die Eingabe
rs27 0:401f3ae5ab50 187 // mit Carrige Return abgeschlossen wurde. Sollte dies der Fall sein,
rs27 0:401f3ae5ab50 188 // wird das CR_FLAG gesetzt. Auch Editierfunktionen werden in diesem
rs27 0:401f3ae5ab50 189 // Rahmen behandelt.
rs27 0:401f3ae5ab50 190 //
rs27 0:401f3ae5ab50 191 //---------------------------------------------------------------------------
rs27 0:401f3ae5ab50 192
rs27 0:401f3ae5ab50 193 void monitor::monLine (void)
rs27 0:401f3ae5ab50 194 {
rs27 0:401f3ae5ab50 195 int ch;
rs27 0:401f3ae5ab50 196
rs27 0:401f3ae5ab50 197 if (pc.readable() == false) return; // kein Zeichen vorhanden
rs27 0:401f3ae5ab50 198
rs27 0:401f3ae5ab50 199 if (MonLinePtr >= 40) // Zeilenüberlauf ?
rs27 0:401f3ae5ab50 200 {
rs27 0:401f3ae5ab50 201 cr_flag = 1;
rs27 0:401f3ae5ab50 202 return;
rs27 0:401f3ae5ab50 203 }
rs27 0:401f3ae5ab50 204
rs27 0:401f3ae5ab50 205 ch = pc.getc(); // Hole das Zeichen
rs27 0:401f3ae5ab50 206 //pc.printf("\nmon_line: %c [%02x]",ch,ch); // nur zum Test
rs27 0:401f3ae5ab50 207
rs27 0:401f3ae5ab50 208 switch(ch)
rs27 0:401f3ae5ab50 209 {
rs27 0:401f3ae5ab50 210 //case ESC: esc_flag = 1; // Sonder Stringkommandos
rs27 0:401f3ae5ab50 211 // break;
rs27 0:401f3ae5ab50 212
rs27 0:401f3ae5ab50 213 case '\r': // CARRIAGE RETURN
rs27 0:401f3ae5ab50 214 cr_flag = 1;
rs27 0:401f3ae5ab50 215 break;
rs27 0:401f3ae5ab50 216
rs27 0:401f3ae5ab50 217 case '\n': // LF empfangen
rs27 0:401f3ae5ab50 218 cr_flag = 1;
rs27 0:401f3ae5ab50 219 break;
rs27 0:401f3ae5ab50 220
rs27 0:401f3ae5ab50 221 default: // Normales Zeichen
rs27 0:401f3ae5ab50 222 if (~iscntrl(ch))
rs27 0:401f3ae5ab50 223 {
rs27 0:401f3ae5ab50 224 mon_line[MonLinePtr] = ch; // Zeichen einfuegen
rs27 0:401f3ae5ab50 225 MonLinePtr++;
rs27 0:401f3ae5ab50 226 // pc.putc(ch);
rs27 0:401f3ae5ab50 227 }
rs27 0:401f3ae5ab50 228 break;
rs27 0:401f3ae5ab50 229
rs27 0:401f3ae5ab50 230 } // Ende SWITCH
rs27 0:401f3ae5ab50 231 }
rs27 0:401f3ae5ab50 232
rs27 0:401f3ae5ab50 233 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 234 // monitor Aufruf damp
rs27 0:401f3ae5ab50 235
rs27 0:401f3ae5ab50 236 void monitor::dump(void)
rs27 0:401f3ae5ab50 237 {
rs27 0:401f3ae5ab50 238 pc.printf("\nin dump");
rs27 1:bf1028d27a23 239 }
rs27 0:401f3ae5ab50 240
rs27 0:401f3ae5ab50 241 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 242 // monitor Aufruf help
rs27 0:401f3ae5ab50 243
rs27 0:401f3ae5ab50 244 void monitor::help(void)
rs27 0:401f3ae5ab50 245 {
rs27 0:401f3ae5ab50 246 pc.printf("\n -- help ------------------------");
rs27 0:401f3ae5ab50 247 pc.printf("\n clcd val >> lcd Kontrast");
rs27 1:bf1028d27a23 248 pc.printf("\n send [val] [val] [val] ... >> ein Telegramm senden");
rs27 0:401f3ae5ab50 249 pc.printf("\n set index [val] >> Sensor auswaehlen");
rs27 0:401f3ae5ab50 250 pc.printf("\n time [std min sek tag monat jahr]");
rs27 0:401f3ae5ab50 251 pc.printf("\n");
rs27 0:401f3ae5ab50 252 pc.printf("\n");
rs27 0:401f3ae5ab50 253 }
rs27 0:401f3ae5ab50 254
rs27 0:401f3ae5ab50 255 //-----------------------------------------------------------------------------
rs27 1:bf1028d27a23 256 // monitor Aufruf send
rs27 1:bf1028d27a23 257 // sendet ein Telegramm über die RS485 Schnittstelle
rs27 1:bf1028d27a23 258 // Die Telegramm sind hier auf 10 Zeichen begrenzt
rs27 1:bf1028d27a23 259 //
rs27 1:bf1028d27a23 260 void monitor::send(void)
rs27 1:bf1028d27a23 261 {
rs27 1:bf1028d27a23 262 int n, pos0, pos[10];
rs27 1:bf1028d27a23 263 uint8_t data[10];
rs27 1:bf1028d27a23 264 // 0 1 2 3 4 5 6 7 8 9
rs27 1:bf1028d27a23 265 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]);
rs27 1:bf1028d27a23 266
rs27 1:bf1028d27a23 267 switch (n)
rs27 1:bf1028d27a23 268 {
rs27 1:bf1028d27a23 269 case -1:
rs27 1:bf1028d27a23 270 case 0:
rs27 1:bf1028d27a23 271 pc.printf("\nbitte Werte fuer das Telegramm eingeben");
rs27 1:bf1028d27a23 272 pc.printf("\n send ADR ZIEL LEN [DATA] ");
rs27 1:bf1028d27a23 273 break;
rs27 1:bf1028d27a23 274
rs27 1:bf1028d27a23 275 default:
rs27 1:bf1028d27a23 276 // Telegramm zusammenstellen und ausgeben
rs27 1:bf1028d27a23 277 for (int i = 0; i < 10; i++)
rs27 1:bf1028d27a23 278 {
rs27 1:bf1028d27a23 279 if (i <= n)
rs27 1:bf1028d27a23 280 {
rs27 1:bf1028d27a23 281 data[i] = (uint8_t) pos[i];
rs27 1:bf1028d27a23 282 }
rs27 1:bf1028d27a23 283 else
rs27 1:bf1028d27a23 284 {
rs27 1:bf1028d27a23 285 data[i] = 0;
rs27 1:bf1028d27a23 286 }
rs27 1:bf1028d27a23 287 }
rs27 1:bf1028d27a23 288
rs27 1:bf1028d27a23 289 RS485_BUS.write(data);
rs27 1:bf1028d27a23 290
rs27 1:bf1028d27a23 291 break;
rs27 1:bf1028d27a23 292
rs27 1:bf1028d27a23 293 } // end switch
rs27 1:bf1028d27a23 294 }
rs27 1:bf1028d27a23 295
rs27 1:bf1028d27a23 296 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 297 // monitor Aufruf set
rs27 0:401f3ae5ab50 298
rs27 0:401f3ae5ab50 299 void monitor::set(void)
rs27 0:401f3ae5ab50 300 {
rs27 0:401f3ae5ab50 301 int n, pos, val;
rs27 0:401f3ae5ab50 302
rs27 0:401f3ae5ab50 303 n = sscanf(&mon_line[MonLinePtr],"%d %d",&pos,&val);
rs27 0:401f3ae5ab50 304
rs27 0:401f3ae5ab50 305 switch (n)
rs27 0:401f3ae5ab50 306 {
rs27 0:401f3ae5ab50 307 case -1: pc.printf("\nbitte index [wert] angeben");
rs27 0:401f3ae5ab50 308 pc.printf("\n Index >> Sonsor 0 bis 7");
rs27 0:401f3ae5ab50 309 pc.printf("\n wert >> 0 = inaktiv, 1 = Rohwerte, 2 = errechneter Wert");
rs27 0:401f3ae5ab50 310 break;
rs27 0:401f3ae5ab50 311
rs27 0:401f3ae5ab50 312 case 1: pc.printf("\nread status[%d] ",pos);
rs27 0:401f3ae5ab50 313 break;
rs27 0:401f3ae5ab50 314
rs27 0:401f3ae5ab50 315 case 2: //status[pos] = val;
rs27 0:401f3ae5ab50 316 pc.printf("\nset status[%d] = %d",pos);
rs27 0:401f3ae5ab50 317 break;
rs27 0:401f3ae5ab50 318 } // end switch
rs27 0:401f3ae5ab50 319 }
rs27 0:401f3ae5ab50 320
rs27 0:401f3ae5ab50 321 //-----------------------------------------------------------------------------
rs27 0:401f3ae5ab50 322 // monitor Aufruf time
rs27 0:401f3ae5ab50 323
rs27 0:401f3ae5ab50 324 void monitor::time(void)
rs27 0:401f3ae5ab50 325 {
rs27 0:401f3ae5ab50 326 int sek, min, std, day, month, year, n;
rs27 0:401f3ae5ab50 327
rs27 0:401f3ae5ab50 328 sek = 0;
rs27 0:401f3ae5ab50 329 min = 0;
rs27 0:401f3ae5ab50 330 std = 0;
rs27 0:401f3ae5ab50 331 day = 0;
rs27 0:401f3ae5ab50 332 month = 0;
rs27 0:401f3ae5ab50 333 year = 0;
rs27 0:401f3ae5ab50 334
rs27 0:401f3ae5ab50 335 n = sscanf(&mon_line[MonLinePtr],"%d %d %d %d %d %d",&std, &min, &sek, &day, &month, &year);
rs27 0:401f3ae5ab50 336
rs27 0:401f3ae5ab50 337 switch (n)
rs27 0:401f3ae5ab50 338 {
rs27 0:401f3ae5ab50 339 case -1 : // keine Zeichenübergabe
rs27 0:401f3ae5ab50 340 case 0 : // keine Zeichenübergabe
rs27 0:401f3ae5ab50 341
rs27 0:401f3ae5ab50 342 strftime(buffer, 40, "%a, %d.%m.%Y %H:%M:%S", localtime(&down_timer.seconds));
rs27 0:401f3ae5ab50 343 pc.printf("\nTime = %s\n", buffer);
rs27 0:401f3ae5ab50 344 break;
rs27 0:401f3ae5ab50 345
rs27 0:401f3ae5ab50 346 case 1 : // std
rs27 0:401f3ae5ab50 347 case 2 : // min
rs27 0:401f3ae5ab50 348 case 3 : // sek
rs27 0:401f3ae5ab50 349 case 4 : // tag
rs27 0:401f3ae5ab50 350 case 5 : // mon
rs27 0:401f3ae5ab50 351 case 6 : // jahr
rs27 0:401f3ae5ab50 352
rs27 0:401f3ae5ab50 353 if (sek > 59) sek = 59;
rs27 0:401f3ae5ab50 354 if (sek < 0) sek = 0;
rs27 0:401f3ae5ab50 355 buffer[0] = (uint8_t)sek;;
rs27 0:401f3ae5ab50 356
rs27 0:401f3ae5ab50 357 if (min > 59) min = 59;
rs27 0:401f3ae5ab50 358 if (min < 0) min = 0;
rs27 0:401f3ae5ab50 359 buffer[1] = (uint8_t)min;
rs27 0:401f3ae5ab50 360
rs27 0:401f3ae5ab50 361 if (std > 23) std = 23;
rs27 0:401f3ae5ab50 362 if (std < 0) std = 0;
rs27 0:401f3ae5ab50 363 buffer[2] = (uint8_t)std;
rs27 0:401f3ae5ab50 364
rs27 0:401f3ae5ab50 365 if (day > 31) day = 31;
rs27 0:401f3ae5ab50 366 if (day < 0) day = 0;
rs27 0:401f3ae5ab50 367 buffer[3] = (uint8_t)day;;
rs27 0:401f3ae5ab50 368
rs27 0:401f3ae5ab50 369 if (month > 12) month = 12;
rs27 0:401f3ae5ab50 370 if (month < 0) month = 0;
rs27 0:401f3ae5ab50 371 buffer[4] = (uint8_t)month;
rs27 0:401f3ae5ab50 372
rs27 0:401f3ae5ab50 373 if (year > 2100) year = 2100;
rs27 0:401f3ae5ab50 374 if (year < 2000) year = 2000;
rs27 0:401f3ae5ab50 375 buffer[5] = (uint8_t)(year - 1900);
rs27 0:401f3ae5ab50 376
rs27 1:bf1028d27a23 377
rs27 0:401f3ae5ab50 378 down_timer.Set_t((uint8_t *)buffer);
rs27 0:401f3ae5ab50 379
rs27 0:401f3ae5ab50 380 strftime(buffer, 40, "%a, %d.%m.%Y %H:%M:%S", localtime(&down_timer.seconds));
rs27 0:401f3ae5ab50 381 pc.printf("\nnew Time = %s\n", buffer);
rs27 0:401f3ae5ab50 382 break;
rs27 0:401f3ae5ab50 383 }
rs27 0:401f3ae5ab50 384 }
rs27 0:401f3ae5ab50 385