Subversion Repositories MK3Mag

Rev

Rev 72 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
58 killagreg 1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
// + Copyright (c) 04.2007 Holger Buss
3
// + only for non-profit use
4
// + www.MikroKopter.com
5
// + see the File "License.txt" for further Informations
6
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7
 
8
#include <stdlib.h>
9
#include <inttypes.h>
10
#include "menu.h"
11
#include "uart.h"
12
#include "printf_P.h"
13
#include "analog.h"
14
#include "main.h"
15
 
16
 
17
uint8_t MaxMenuItem = 2;
18
uint8_t MenuItem = 0;
19
 
20
int8_t DisplayBuff[DISPLAYBUFFSIZE] = "Hello World";
21
uint8_t DispPtr = 0;
22
 
23
 
24
/************************************/
72 killagreg 25
/*  Put Character to  LCD Buffer    */
26
/************************************/
27
void Menu_Putchar(char c)
28
{
29
        if(DispPtr < DISPLAYBUFFSIZE) DisplayBuff[DispPtr++] = c;
30
}
31
 
32
/************************************/
58 killagreg 33
/*        Clear LCD Buffer          */
34
/************************************/
72 killagreg 35
void Menu_Clear(void)
58 killagreg 36
{
37
        uint8_t i;
38
        for( i = 0; i < DISPLAYBUFFSIZE; i++) DisplayBuff[i] = ' ';
39
}
40
 
41
 
42
/************************************/
43
/*        Update Menu on LCD        */
44
/************************************/
45
// Display with 20 characters in 4 lines
72 killagreg 46
void Menu_Update(uint8_t Keys)
58 killagreg 47
{
72 killagreg 48
        if(Keys & KEY1)
58 killagreg 49
        {
50
                if(MenuItem) MenuItem--;
51
                else MenuItem = MaxMenuItem;
52
        }
72 killagreg 53
        if(Keys  & KEY2)
58 killagreg 54
        {
55
                if(MenuItem == MaxMenuItem) MenuItem = 0;
56
                else MenuItem++;
57
        }
72 killagreg 58
        if((Keys  & KEY1) && (Keys  & KEY2)) MenuItem = 0;
58 killagreg 59
 
67 killagreg 60
 
72 killagreg 61
        Menu_Clear();
58 killagreg 62
 
63
        if(MenuItem > MaxMenuItem) MenuItem = MaxMenuItem;
64
        // print menu item number in the upper right corner
65
        if(MenuItem < 10)
66
        {
69 killagreg 67
                LCD_printfxy(17,0,"[%i]",MenuItem);
58 killagreg 68
        }
69
        else
70
        {
69 killagreg 71
                LCD_printfxy(16,0,"[%i]",MenuItem);
58 killagreg 72
        }
73
        switch(MenuItem)
74
        {
69 killagreg 75
                case 0:// Version Info Menu Item
58 killagreg 76
                        LCD_printfxy(0,0,"++   MK3MAG   ++ ");
77
                        LCD_printfxy(0,1," V %d.%d%c", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH + 'a');
78
                        if(AccPresent)
79
                        {
80
                                LCD_printfxy(0,2, " ACC Support  ");
81
                        }
82
                        else
83
                        {
84
                                LCD_printfxy(0,2, "             ");
85
                        }
86
                        LCD_printfxy(0,3,"(c) Buss, Busker   ");
87
                        break;
88
 
89
                case 1: // Magnet readings
60 holgerb 90
                        LCD_printfxy(0,0,"Magnet Sensors: ");
68 holgerb 91
                        LCD_printfxy(0,1,"X:%+4d   Attitude", MagX);
92
                        LCD_printfxy(0,2,"Y:%+4d   by", MagY);
93
                        LCD_printfxy(0,3,"Z:%+4d ", MagZ);
94
                        switch(AttitudeSource)
95
                        {
96
                        case ATTITUDE_SOURCE_I2C:  LCD_printfxy(12,2,"I2C"); break;
97
                        case ATTITUDE_SOURCE_UART: LCD_printfxy(12,2,"UART"); break;
98
                        case ATTITUDE_SOURCE_ACC:  LCD_printfxy(12,2,"ACC"); break;
99
                        default: LCD_printfxy(12,2,"???"); break;
58 killagreg 100
                        break;
68 holgerb 101
                        }
102
                        break;
103
                case 2: // Calcstate
104
                        LCD_printfxy(0,0,"Calibrating: ");
105
                        LCD_printfxy(0,1,"Step: %1d ",ActualCalstate);
106
                        switch(ActualCalstate)
107
                         {
108
                          default:
109
                          case 0: LCD_printfxy(0,2," -- "); break;
69 killagreg 110
                          case 3:
68 holgerb 111
                          case 1: LCD_printfxy(0,2," pause "); break;
112
                          case 2: LCD_printfxy(0,2,"measure horizontal"); break;
113
                          case 4: LCD_printfxy(0,2,"measure vertical"); break;
114
                          case 5: LCD_printfxy(0,2,"store data"); break;
115
                         }
116
                        if(!ActualCalstate) LCD_printfxy(13,3,"(start)")
117
                        else                            LCD_printfxy(9,3,"(ESC)(step)");
72 killagreg 118
                        if(Keys  & KEY4) InternalCalstate++;
119
                        if(ActualCalstate >= 5 || (Keys & KEY3)) InternalCalstate = 0;
68 holgerb 120
                        break;
58 killagreg 121
 
69 killagreg 122
                default:
123
                        MaxMenuItem = MenuItem - 1;
124
                        MenuItem = 0;
125
                        break;
126
        }
58 killagreg 127
}