Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1734 - 1
/*****************************************************************************
2
 *   Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de                  *
3
 *   Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net                  *
4
 *   Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net *
5
 *   Copyright (C) 2011 Harald Bongartz                                      *
6
 *                                                                           *
7
 *   This program is free software; you can redistribute it and/or modify    *
8
 *   it under the terms of the GNU General Public License as published by    *
9
 *   the Free Software Foundation; either version 2 of the License.          *
10
 *                                                                           *
11
 *   This program is distributed in the hope that it will be useful,         *
12
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
13
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
14
 *   GNU General Public License for more details.                            *
15
 *                                                                           *
16
 *   You should have received a copy of the GNU General Public License       *
17
 *   along with this program; if not, write to the                           *
18
 *   Free Software Foundation, Inc.,                                         *
19
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.               *
20
 *                                                                           *
21
 *                                                                           *
22
 *   Credits to:                                                             *
23
 *   Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN  *
24
 *                          http://www.mikrokopter.de                        *
25
 *   Gregor "killagreg" Stobrawa for his version of the MK code              *
26
 *   Thomas Kaiser "thkais" for the original project. See                    *
27
 *                          http://www.ft-fanpage.de/mikrokopter/            *
28
 *                          http://forum.mikrokopter.de/topic-4061-1.html    *
29
 *   Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
30
 *                          http://www.mylifesucks.de/oss/c-osd/             *
31
 *   Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
32
 *****************************************************************************/
33
 
34
 
35
#include "cpu.h"
36
#include <avr/io.h>
37
#include <inttypes.h>
38
#include <stdlib.h>
39
#include <avr/pgmspace.h>
40
#include <avr/wdt.h>
41
#include <util/delay.h>
42
 
43
#include "main.h"
44
#include "lcd.h"
45
#include "parameter.h"
46
#include "menu.h"
47
#include "display.h"
48
#include "debug.h"
49
#include "timer.h"
50
#include "osd.h"
51
#include "motortest.h"
52
#include "gps.h"
53
#include "eeprom.h"
54
#include "setup.h"
55
#include "uart1.h"
56
#include "mk-data-structs.h"
57
#include "Wi232.h"
58
#include "servo.h"
59
#include "tools.h"
60
#include "connect.h"
61
#include "lipo.h"
62
#include "messages.h"
63
#include "bluetooth.h"
64
#include "followme.h"
65
#include "stick.h" // MartinR
66
 
67
 
68
// #define ITEMS_NC 8  //MartinR: so war es
69
#define ITEMS_NC 9  //MartinR:
70
 
71
prog_char param_menuitems_nc[ITEMS_NC][NUM_LANG][18]= // zeilen,zeichen+1
72
 
73
 
74
	//    German,             English,            French,               Netherlands
75
	/* // MartinR: so war es
76
{
77
	{"OSD              ","OSD              ","OSD              ","OSD              "},
78
	{"3D Lage          ","3D angeles       ","3D location      ","3D locatie       "},
79
	{"MK Display       ","MK Display       ","MK Display       ","MK Display       "},
80
	{"Parameter       \x1d","Parameter       \x1d","Parameter       \x1d","Parameters      \x1d"},
81
	{"Debug Data       ","Debug Data       ","Debug Data       ","Debug Data       "},
82
	{"GPS Info         ","GPS Info         ","GPS Info         ","GPS Info         "},
83
	{"Follow Me        ","Follow Me        ","Follow Me        ","Follow Me        "},
84
	{"PKT Tools       \x1d","PKT Tools       \x1d","PKT Tools       \x1d","PKT Tools       \x1d"},
85
};
86
*/
87
// MartinR: geändert
88
{
89
	{"Joystick         ","Joystick         ","Joystick         ","Joystick         "},
90
	{"OSD              ","OSD              ","OSD              ","OSD              "},
91
	{"3D Lage          ","3D angeles       ","3D location      ","3D locatie       "},
92
	{"GPS Info         ","GPS Info         ","GPS Info         ","GPS Info         "},
93
	{"Follow Me        ","Follow Me        ","Follow Me        ","Follow Me        "},
94
	{"MK Display       ","MK Display       ","MK Display       ","MK Display       "},
95
	{"Parameter       \x1d","Parameter       \x1d","Parameter       \x1d","Parameter       \x1d"},
96
	{"Debug Data       ","Debug Data       ","Debug Data       ","Debug Data       "},
97
	{"PKT Tools       \x1d","PKT Tools       \x1d","PKT Tools       \x1d","PKT Tools       \x1d"},
98
};
99
 
100
 
101
#define ITEMS_FC 5
102
 
103
prog_char param_menuitems_fc[ITEMS_FC][NUM_LANG][18]= // zeilen,zeichen+1
104
{
105
	{"Joystick         ","Joystick         ","Joystick         ","Joystick         "},
106
	//{"OSD              ","OSD              ","OSD              ","OSD              "},
107
	//{"3D Lage          ","3D angeles       ","3D location      ","3D locatie       "},
108
	//{"GPS Info         ","GPS Info         ","GPS Info         ","GPS Info         "},
109
	//{"Follow Me        ","Follow Me        ","Follow Me        ","Follow Me        "},
110
	{"MK Display       ","MK Display       ","MK Display       ","MK Display       "},
111
	{"Parameter       \x1d","Parameter       \x1d","Parameter       \x1d","Parameter       \x1d"},
112
	{"Debug Data       ","Debug Data       ","Debug Data       ","Debug Data       "},
113
	{"PKT Tools       \x1d","PKT Tools       \x1d","PKT Tools       \x1d","PKT Tools       \x1d"},
114
};
115
 
116
 
117
//#define ITEMS_NO 6 // MartinR: so war es
118
#define ITEMS_NO 2 // MartinR:
119
 
120
prog_char param_menuitems_no[ITEMS_NO][NUM_LANG][18]= // zeilen,zeichen+1
121
/*  // MartinR: so war es
122
{
123
	{"BL-Ctrl. Tester ","BL-Ctrl. Tester ","BL-Ctrl. Tester ","BL-Ctrl. Tester "},
124
	{"Servo Tester     ","Servo Tester     ","Servo Tester     ","Servo Tester     "},
125
	{"PC BT  > Kopter  ","PC BT  > Kopter  ","PC BT  > Kopter  ","PC BT  > Kopter  "},
126
	{"PC USB > Kopter  ","PC USB > Kopter  ","PC USB > Kopter  ","PC USB > Kopter  "},
127
	{"PKT Setup       \x1d","PKT Setup       \x1d","PKT Setup       \x1d","PKT Setup       \x1d"},
128
	{"PKT Version      ","PKT Version      ","PKT Version      ","PKT Versie       "},
129
};
130
*/
131
// MartinR: geändert
132
{
133
	{"Joystick         ","Joystick         ","Joystick         ","Joystick         "},
134
	//{"OSD              ","OSD              ","OSD              ","OSD              "},
135
	//{"3D Lage          ","3D angeles       ","3D location      ","3D locatie       "},
136
	//{"GPS Info         ","GPS Info         ","GPS Info         ","GPS Info         "},
137
	//{"Follow Me        ","Follow Me        ","Follow Me        ","Follow Me        "},
138
	//{"MK Display       ","MK Display       ","MK Display       ","MK Display       "},
139
	//{"Parameter       \x1d","Parameter       \x1d","Parameter       \x1d","Parameter       \x1d"},
140
	//{"Debug Data       ","Debug Data       ","Debug Data       ","Debug Data       "},
141
	{"PKT Tools       \x1d","PKT Tools       \x1d","PKT Tools       \x1d","PKT Tools       \x1d"},
142
};
143
 
144
 
145
#define ITEMS_CR 9
146
 
147
prog_char param_copyright[ITEMS_CR][22]= // zeilen,zeichen+1
148
{
149
"                     ",
150
"(C) GNU GPL License  ",
151
"    NO WARRANTY      ",
152
"                     ",
153
"2008 Thomas Kaiser   ",
154
"2009-2010 Peter Mack ",
155
"2010 Sebastian Boehm ",
156
"2012 Chr. Brandtner &",
157
"     Harald Bongartz ",
158
};
159
 
160
 
161
//--------------------------------------------------------------
162
// print cursor
163
void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos)
164
{
165
	lcd_printp_at (pos, before, PSTR(" "), 0);
166
	lcd_printp_at (pos, line, PSTR("\x1d"), 0);
167
}
168
 
169
 
170
// F�r Seting-Auswahl ------------------------------------------
171
//
172
uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos, uint8_t start)
173
{
174
	uint8_t line = start;
175
	uint8_t before = start;
176
 
177
	uint8_t k;
178
 
179
	menu_set_cursor (line, line, pos);
180
 
181
	do
182
	{
183
		if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1))
184
		{
185
			if (line < max)
186
				line ++;
187
			else
188
				line = max;
189
			//	line = min; // Wenn wiederholen soll
190
		}
191
 
192
		if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1))
193
		{
194
			if (line > min)
195
				line --;
196
			else
197
				line = min;
198
			//	line = max; // Wenn wiederholen soll
199
		}
200
 
201
		if (line != before)
202
		{
203
			menu_set_cursor (before, line, pos);
204
			before = line;
205
		}
206
	}
207
	while (!(k = get_key_press ((1 << KEY_ENTER) | (1 << KEY_ESC))));
208
 
209
	if (k & (1 << KEY_ESC))
210
		line = 255;
211
 
212
	return line;
213
}
214
 
215
// F�r Setup und Parameter ------------------------------------------
216
//
217
uint8_t menu_choose2 (uint8_t min, uint8_t max, uint8_t start, uint8_t return_at_start, uint8_t return_at_end)
218
{
219
	uint8_t pos = 1;
220
	uint8_t line = start;
221
	uint8_t before = start;
222
 
223
	uint8_t k;
224
 
225
	menu_set_cursor (line, line, pos);
226
 
227
	do
228
	{
229
		if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1))
230
		{
231
			if (line < max)
232
				line ++;
233
			else
234
			{
235
				if(return_at_end == 1)
236
					return 254;
237
				else
238
					line = max;
239
				//	line = min; // Wenn wiederholen soll
240
			}
241
		}
242
 
243
		if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1))
244
		{
245
			if (line > min)
246
				line --;
247
			else
248
			{
249
				if(return_at_start == 1)
250
					return 253;
251
				else
252
					line = min;
253
				//	line = max; // Wenn wiederholen soll
254
			}
255
		}
256
 
257
		if (line != before)
258
		{
259
			menu_set_cursor (before, line, pos);
260
			before = line;
261
		}
262
	}
263
	while (!(k = get_key_press ((1 << KEY_ENTER) | (1 << KEY_ESC))));
264
 
265
	if (k & (1 << KEY_ESC))
266
		line = 255;
267
 
268
	return line;
269
}
270
 
271
// F�r das Hauptmenue ------------------------------------------
272
//
273
uint8_t menu_choose3 (uint8_t min, uint8_t max,uint8_t start, uint8_t return_at_start, uint8_t return_at_end)
274
{
275
	uint8_t pos = 1;
276
	uint8_t line = start;
277
	uint8_t before = start;
278
 
279
	menu_set_cursor (line, line, pos);
280
 
281
	do
282
	{
283
 
284
		if (get_key_press (1 << KEY_PLUS) | get_key_long_rpt_sp ((1 << KEY_PLUS), 1))
285
		{
286
			if (line < max)
287
				line ++;
288
			else
289
			{
290
				if(return_at_end == 1)
291
					return 254;
292
				else
293
					line = max;
294
				//	line = min; // Wenn wiederholen soll
295
			}
296
		}
297
 
298
		if (get_key_press (1 << KEY_MINUS) | get_key_long_rpt_sp ((1 << KEY_MINUS), 1))
299
		{
300
			if (line > min)
301
				line --;
302
			else
303
			{
304
				if(return_at_start == 1)
305
					return 253;
306
				else
307
					line = min;
308
				//	line = max; // Wenn wiederholen soll
309
			}
310
		}
311
 
312
		if (get_key_long (1 << KEY_ESC))
313
		{
314
			get_key_press(KEY_ALL);
315
			return 250;
316
		}
317
 
318
		if(get_key_long (1 << KEY_ENTER))
319
		{
320
			get_key_press(KEY_ALL);
321
			return 251;
322
		}
323
 
324
		if (get_key_short (1 << KEY_ESC))
325
		{
326
			get_key_press(KEY_ALL);
327
			return 252;
328
		}
329
 
330
		if (line != before)
331
		{
332
			menu_set_cursor (before, line, pos);
333
			before = line;
334
		}
335
#ifdef HWVERSION3_9
336
#ifndef ohne_Lipo // MartinR
337
	show_Lipo();
338
#endif
339
#endif
340
	}
341
	while (!(get_key_short (1 << KEY_ENTER)));
342
 
343
	return line;
344
}
345
 
346
//--------------------------------------------------------------
347
//
348
void main_menu (void)
349
{
350
	uint8_t ii = 0;
351
	uint8_t offset = 0;
352
	uint8_t size = 0;
353
	uint8_t Save_hardware = 0;
354
	uint8_t dmode = 0;
355
	uint8_t target_pos = 1;
356
	uint8_t val =0;
357
 
358
	Save_hardware = hardware;
359
 
360
	#ifdef HWVERSION3_9
361
	#ifndef ohne_Lipo // MartinR
362
		// MartinR: von HAL_HW3_9.c hierher verschoben
363
        ADC_Init();             // ADC für Lipomessung
364
	#endif
365
	#endif
366
 
367
 
368
	get_key_press(KEY_ALL);
369
 
370
	while(1)
371
	{
372
		if (Debug==1)
373
			hardware = NC;
374
		if (Debug==0)
375
			hardware = Save_hardware;
376
		if(hardware == NO)
377
			size = ITEMS_NO ;
378
		if(hardware == FC)
379
			size = ITEMS_FC ;
380
		if(hardware == NC)
381
			size = ITEMS_FC ;
382
 
383
 
384
		lcd_cls ();
385
		lcd_printp_at (0, 0, PSTR("PKT-Tool FC "), 2);
386
		lcd_printp_at (12, 0, PSTR(FC_Version), 2);
387
 
388
//		lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0);
389
		lcd_puts_at(0, 7, strGet(KEYLINE1), 0);
390
//		lcd_printp_at (12, 7, PSTR("Aus "), 0);
391
		lcd_puts_at(12, 7, strGet(OFF), 0);
392
 
393
 
394
		while(2)
395
		{
396
 
397
			ii = 0;
398
			if(offset > 0)
399
				lcd_printp_at(1,1, PSTR("\x12"), 0);
400
 
401
			for(ii = 0;ii < 6 ; ii++)
402
			{
403
				if((ii+offset) < size)
404
				{
405
					if(hardware == NC)
406
						lcd_printp_at(3,ii+1,param_menuitems_nc[ii+offset][DisplayLanguage], 0);
407
					else if(hardware == FC)
408
						lcd_printp_at(3,ii+1,param_menuitems_fc[ii+offset][DisplayLanguage], 0);
409
					else
410
						lcd_printp_at(3,ii+1,param_menuitems_no[ii+offset][DisplayLanguage], 0);
411
				}
412
				if((ii == 5)&&(ii+offset < (size-1)))
413
					lcd_printp_at(1,6, PSTR("\x13"), 0);
414
#ifdef HWVERSION3_9
415
#ifndef ohne_Lipo // MartinR
416
				show_Lipo();
417
#endif
418
#endif
419
			}
420
 
421
			if(dmode == 0)
422
			{
423
				if(offset == 0)
424
				{
425
					if(size > 6)
426
						val = menu_choose3 (1, 5, target_pos,0,1); //menu_choose3 (min, max, start, return_at_start, return_at_end)
427
					else
428
						val = menu_choose3 (1, size, target_pos,0,0);
429
				}
430
				else
431
					val = menu_choose3 (2, 5, target_pos,1,1);
432
			}
433
 
434
			if(dmode == 1)
435
			{
436
				if(offset+7 > size)
437
					val = menu_choose3 (2, 6, target_pos,1,0);
438
				else
439
					val = menu_choose3 (2, 5, target_pos,1,1);
440
			}
441
 
442
			if(val == 254)
443
			{
444
				offset++;
445
				dmode = 1;
446
				target_pos = 5;
447
			}
448
			else if(val == 253)
449
			{
450
				offset--;
451
				dmode = 0;
452
				target_pos = 2;
453
			}
454
#if defined HWVERSION3_9
455
			else if(val == 252)
456
			{
457
 
458
				lcd_cls();
459
//				lcd_printp_at (0, 2, PSTR("  PKT ausschalten?"),0);
460
				lcd_puts_at(0, 2, strGet(SHUTDOWN), 0);
461
//				lcd_printp_at (12, 7, PSTR("Nein   Ja"),0);
462
				lcd_puts_at(12, 7, strGet(YESNO), 0);
463
				while(1)
464
				{
465
					if (get_key_press (1 << KEY_ENTER))
466
						clr_V_On();	// Spannung abschalten
467
 
468
					if (get_key_short (1 << KEY_ESC))
469
					{
470
						get_key_press(KEY_ALL);
471
						lcd_cls();
472
						lcd_printp_at (0, 0, PSTR("PKT-Tool FC "), 2);
473
						lcd_printp_at (12, 0,PSTR(FC_Version), 2);
474
//						show_Lipo();
475
//						lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0);
476
						lcd_puts_at(0, 7, strGet(KEYLINE1), 0);
477
//						lcd_printp_at (12, 7, PSTR("Aus "), 0);
478
						lcd_puts_at(12, 7, strGet(OFF), 0);
479
						break;
480
					}
481
				}
482
			}
483
			else if(val == 251)
484
			{
485
				PC_Fast_Connect();
486
				return;
487
			}
488
#endif
489
			else if(val == 250)
490
			{
491
//				Test_HB();
492
				Test_Language();
493
				return;
494
			}
495
			else
496
				break;
497
		}
498
 
499
		target_pos = val;
500
// MartinR: !!!!!!!!!!!!!!!!!!!
501
#ifdef HWVERSION3_9
502
		if(hardware == NC)
503
		{
504
			if((val+offset) == 1 )
505
				joystick();
506
			if((val+offset) == 2 )
507
				osd(OSD_Mode);
508
			if((val+offset) == 3 )
509
				osd(THREE_D_Mode);
510
			if((val+offset) == 4 )
511
				gps();
512
			if((val+offset) == 5 )
513
               FollowMe();
514
			if((val+offset) == 6 )
515
				display_data();
516
			if((val+offset) == 7 )
517
				edit_parameter();
518
 
519
			if((val+offset) == 8 )
520
//TODO: Debug an FC087 anpassen
521
				display_debug();
522
 
523
			if((val+offset) == 9 )
524
				PKT_Tools();
525
		}
526
#endif
527
 
528
		if(hardware == FC)
529
		{
530
			if((val+offset) == 1 )
531
				joystick();
532
			if((val+offset) == 2 )
533
				display_data();
534
			if((val+offset) == 3 )
535
				edit_parameter();
536
			if((val+offset) == 4 )
537
//TODO: Debug an FC087 anpassen
538
			  display_debug();
539
			if((val+offset) == 5 )
540
				PKT_Tools();
541
		}
542
 
543
 
544
		if(hardware == NO)
545
		{
546
		/* // MartinR: so war es
547
			if((val+offset) == 1 )
548
				motor_test(FC_Mode);
549
			if((val+offset) == 2 )
550
				servo_test();
551
#ifdef HWVERSION3_9
552
			if (U02SV2 == 0)
553
			{
554
				if((val+offset) == 3 )
555
				  {
556
				    if (BTIsSlave==true)
557
				      {
558
					Port_BT2Wi();
559
				      }
560
				    else
561
				      {
562
				        bt_set_mode(BLUETOOTH_SLAVE);
563
				        Port_BT2Wi();
564
				      }
565
				  }
566
				if((val+offset) == 4 )
567
					Port_USB2Wi();
568
			}
569
			else if (U02SV2 == 1)
570
			{
571
				if((val+offset) == 3 )
572
 
573
				     {
574
                                        if (BTIsSlave==true)
575
                                          {
576
                                            Port_BT2FC();
577
                                          }
578
                                        else
579
                                          {
580
                                            bt_set_mode(BLUETOOTH_SLAVE);
581
                                            Port_BT2FC();
582
 
583
                                          }
584
                                      }
585
 
586
				if((val+offset) == 4 )
587
					Port_USB2FC();
588
			}
589
#else
590
			if((val+offset) == 3 )
591
				Show_Error_HW();
592
			if((val+offset) == 4 )
593
				Show_Error_HW();
594
#endif
595
			if((val+offset) == 5 )
596
				PKT_Setup();
597
			if((val+offset) == 6 )
598
				Show_Version();
599
		*/
600
			if((val+offset) == 1 )
601
				joystick();
602
			if((val+offset) == 2 )
603
				PKT_Tools();
604
		}
605
 
606
 
607
	}
608
}
609
 
610
 
611
//--------------------------------------------------------------
612
//
613
void Update_PKT (void)
614
{
615
	lcd_cls();
616
	lcd_printp_at (0, 0, PSTR(" PKT Update          "),2);
617
//	lcd_printp_at (0, 1, PSTR("Connect PC to PKT-USB"),0);
618
	lcd_puts_at(0, 1, strGet(UPDATE1), 0);
619
//	lcd_printp_at (0, 2, PSTR("Press 'Start' on PKT "),0);
620
	lcd_puts_at(0, 2, strGet(UPDATE2), 0);
621
	lcd_printp_at (0, 3, PSTR("Start avrdude.exe    "),0);
622
	lcd_printp_at (0, 4, PSTR("-pm1284p -cavr109    "),0);
623
	lcd_printp_at (0, 5, PSTR("-Pcom? -b115200      "),0);
624
	lcd_printp_at (0, 6, PSTR("-Uflash:w:FILE.hex:a "),0);
625
//	avrdude -pm1284p -cavr109 -P/dev/ttyUSB1 -b115200 -V -Uflash:w:Dateiname.hex:a
626
 
627
//	lcd_printp_at (0, 7, PSTR("           Ende Start"), 0);
628
	lcd_puts_at(0, 7, strGet(ENDSTART), 0);
629
 
630
	do
631
	{
632
		if (get_key_press (1 << KEY_ESC))
633
		{
634
			get_key_press(KEY_ALL);
635
			return;
636
		}
637
	}
638
	while (!(get_key_press (1 << KEY_ENTER)));
639
	{
640
 
641
		// start bootloader with Reset, Hold KEY_ENTER*/
642
		wdt_enable( WDTO_250MS );
643
		while (1)
644
		{;}
645
	}
646
}
647
 
648
 
649
//--------------------------------------------------------------
650
//
651
void Show_Error_HW (void)
652
{
653
	lcd_cls ();
654
	lcd_printp_at (0, 2, PSTR(" Mit dieser Hardware"), 0);
655
	lcd_printp_at (0, 3, PSTR(" nicht möglich!"), 0);
656
	lcd_printp_at (12, 7, PSTR("Ende"), 0);
657
 
658
	while (!get_key_press (1 << KEY_ESC));
659
	get_key_press(KEY_ALL);
660
	return;
661
}
662
 
663
 
664
//--------------------------------------------------------------
665
//
666
void Show_Version (void)
667
{
668
	uint8_t ii = 0;
669
	uint8_t	size = ITEMS_CR;
670
	uint8_t page = 0;
671
 
672
	lcd_cls ();
673
 
674
	lcd_printp_at (0, 0, PSTR("PKT Tool  V.         "), 2);
675
	lcd_printp_at (13,0, PSTR(PKTSWVersion),2);
676
//	lcdPuts(Msg(MSG_VERSION1));
677
//	lcd_printp_at (0, 0, Msg(MSG_VERSION1), 2);
678
//	lcd_printp_at (0, 1, PSTR("für FC ver           "), 2);
679
//	lcd_printp_at (12,1, PSTR(FC_Version),2);
680
	lcd_printp_at (0, 1, PSTR("                     "), 2); //um die ganze Zeile schwarz zu füllen.
681
	lcd_puts_at(0, 1, strGet(START_MSG2), 2);
682
//	lcd_printp_at (0, 7, PSTR(KEY_LINE_1), 0);
683
	lcd_puts_at(0, 7, strGet(KEYLINE1), 0);
684
 
685
	while(1)
686
	{
687
		for(ii = 0;ii < 3 ; ii++)
688
			if((ii + page) < size)
689
				lcd_printp_at(0,ii + 3,param_copyright[ii + page], 0);
690
 
691
		if (page == 0)
692
		{
693
			lcd_printp_at (0, 2, PSTR(" "), 0);
694
			lcd_printp_at (0, 6, PSTR("\x13"), 0);
695
		}
696
 
697
		if (page > 0 && page < (size - 3))
698
		{
699
			lcd_printp_at (0, 2, PSTR("\x12"), 0);
700
			lcd_printp_at (0, 6, PSTR("\x13"), 0);
701
		}
702
 
703
		if (page >= (size - 3))
704
		{
705
			lcd_printp_at (0, 2, PSTR("\x12"), 0);
706
			lcd_printp_at (0, 6, PSTR(" "), 0);
707
		}
708
 
709
 
710
		if (get_key_press (1 << KEY_PLUS))
711
			if (page < size - 3)
712
				page++;
713
 
714
		if (get_key_press (1 << KEY_MINUS))
715
			if (page > 0)
716
				page--;
717
 
718
		if (get_key_press (1 << KEY_ESC) || get_key_press (1 << KEY_ENTER))
719
		{
720
			get_key_press(KEY_ALL);
721
			return;
722
		}
723
	}
724
}
725
 
726