Halli Hallo,
benötige mal euren Rat / Hilfe!
Habe mir ein "einfaches" Menü gebastelt, mit hilfe von einer Struktur
(menue_t).
1 | typedef struct
|
2 | {
|
3 | #define MENUE_EXIT 111
|
4 |
|
5 | char *name;
|
6 | uint8_t ( *fnc )( void );
|
7 | uint8_t menuePos;
|
8 | }menue_t;
|
Dann erstelle Ich mir ein Array aus dieser Struktur..
1 | menue_t menue[] =
|
2 | {
|
3 | { "Time" , menueSetTime , 0 },
|
4 | { "Date" , cnfgDate , 1 },
|
5 | { "Alarm." , menueSetAlarm , 2 },
|
6 | usw..
|
7 | };
|
Untermenüs..
1 | menue_t menueAlert[]=
|
2 | {
|
3 | {"-A1" , NULL , 0 },
|
4 | {"-A2" , NULL , 1 },
|
5 | {"-A3" , NULL , 2 },
|
6 | {"-A4" , NULL , 3 },
|
7 | {"Cycl." , NULL , 4 },
|
8 | {"Exit" , NULL , 5 },
|
9 | };
|
Und eine Funktion die mir das ganze auf den Bildschirm wirft..
1 | uint8_t openMenue( menue_t *m , size_t size )
|
2 | {
|
3 | uint8_t index = menueCursor;
|
4 |
|
5 | button.all = 0;
|
6 | flag.menueOpen = 1;
|
7 | menueTimeout = 0;
|
8 |
|
9 | clearDisplay( true , false );
|
10 |
|
11 | while (1)
|
12 | {
|
13 | if ( menueTimeout > 500 )
|
14 | {
|
15 | menueTimeout = 0;
|
16 | clearDisplay( true , false );
|
17 | return MENUE_EXIT;
|
18 | }
|
19 |
|
20 | if ( button.pressed.up )
|
21 | {
|
22 | button.all = 0;
|
23 | menueTimeout = 0;
|
24 | clearDisplay( true , false );
|
25 | if ( index < ( size - 1 ) )
|
26 | {
|
27 | index++;
|
28 | }
|
29 | }
|
30 |
|
31 | if ( button.pressed.down )
|
32 | {
|
33 | button.all = 0;
|
34 | menueTimeout = 0;
|
35 | clearDisplay( true, false );
|
36 | if ( index > 0 )
|
37 | {
|
38 | index--;
|
39 | }
|
40 | }
|
41 |
|
42 | if ( button.pressed.exit )
|
43 | {
|
44 | button.all = 0;
|
45 | menueTimeout = 0;
|
46 | flag.menueExit = 1;
|
47 | clearDisplay( true , false );
|
48 | return 111;
|
49 | }
|
50 |
|
51 | putStr( m[index].name , 0 );
|
52 |
|
53 | if ( button.pressed.enter )
|
54 | {
|
55 | button.all = 0;
|
56 | menueTimeout = 0;
|
57 |
|
58 | clearDisplay( true , false );
|
59 |
|
60 | menueCursor = 0;
|
61 |
|
62 | if ( m[index].fnc != NULL)
|
63 | {
|
64 | m[index].fnc();
|
65 | menueCursor = m[index].menuePos;
|
66 | }
|
67 |
|
68 | clearDisplay( true , false );
|
69 |
|
70 | menueTimeout = 0;
|
71 | flag.menueExit = 0;
|
72 |
|
73 | return index;
|
74 | }
|
75 | }
|
76 |
|
77 | flag.menueOpen = 0;
|
78 |
|
79 | return 0;
|
80 | }
|
Funktioniert soweit auch ganz gut. Wenn Ich jetzt in mein Untermenü
(menueAlert) bin und etwas einstelle, komme Ich nach der Einstellung
wieder zu meinem "Hauptmenüpunkt" ("Alarm.").
Ab hier stehe Ich auf dem Schlauch. Eigentlich möchte Ich gar nicht
wieder zu diesem Punkt, sondern in meinem Untermenü bleiben solange bis
Ich es halt explizit befehle.
Wie stelle Ich das nun am besten an?