monitor

Dependents:   mini_02

Fork of mon by V09

Committer:
rs27
Date:
Thu Mar 10 20:35:10 2016 +0000
Revision:
2:512482b7f8c6
Parent:
1:bf1028d27a23

        

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