Subversion Repositories Projects

Rev

Rev 274 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 274 Rev 319
1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
// + Copyright (c) 04.2007 Holger Buss
2
// + Copyright (c) 04.2007 Holger Buss
3
// + only for non-profit use
3
// + only for non-profit use
4
// + www.MikroKopter.com
4
// + www.MikroKopter.com
5
// + see the File "License.txt" for further Informations
5
// + see the File "License.txt" for further Informations
6
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7
 
7
 
8
#include <stdlib.h>
8
#include <stdlib.h>
9
#include <inttypes.h>
9
#include <inttypes.h>
10
#include "uart0.h"
10
#include "uart0.h"
11
#include "printf_P.h"
11
#include "printf_P.h"
12
#include "ubx.h"
12
#include "ubx.h"
13
#include "timer0.h"
13
#include "timer0.h"
14
 
14
 
15
uint8_t MaxMenuItem = 3;
15
uint8_t MaxMenuItem = 3;
16
uint8_t MenuItem = 0;
16
uint8_t MenuItem = 0;
17
uint8_t RemoteKeys = 0;
17
uint8_t RemoteKeys = 0;
18
 
18
 
19
#define KEY1    0x01
19
#define KEY1    0x01
20
#define KEY2    0x02
20
#define KEY2    0x02
21
#define KEY3    0x04
21
#define KEY3    0x04
22
#define KEY4    0x08
22
#define KEY4    0x08
23
#define KEY5    0x10
23
#define KEY5    0x10
24
 
24
 
25
 
25
 
26
 
26
 
27
#define DISPLAYBUFFSIZE 80
27
#define DISPLAYBUFFSIZE 80
28
int8_t DisplayBuff[DISPLAYBUFFSIZE] = "Hello World";
28
int8_t DisplayBuff[DISPLAYBUFFSIZE] = "Hello World";
29
uint8_t DispPtr = 0;
29
uint8_t DispPtr = 0;
30
 
30
 
31
 
31
 
32
/************************************/
32
/************************************/
33
/*        Clear LCD Buffer          */
33
/*        Clear LCD Buffer          */
34
/************************************/
34
/************************************/
35
void LCD_Clear(void)
35
void LCD_Clear(void)
36
{
36
{
37
        uint8_t i;
37
        uint8_t i;
38
        for( i = 0; i < DISPLAYBUFFSIZE; i++) DisplayBuff[i] = ' ';
38
        for( i = 0; i < DISPLAYBUFFSIZE; i++) DisplayBuff[i] = ' ';
39
}
39
}
40
 
40
 
41
 
41
 
42
/************************************/
42
/************************************/
43
/*        Update Menu on LCD        */
43
/*        Update Menu on LCD        */
44
/************************************/
44
/************************************/
45
// Display with 20 characters in 4 lines
45
// Display with 20 characters in 4 lines
46
void LCD_PrintMenu(void)
46
void LCD_PrintMenu(void)
47
{
47
{
48
        int32_t i1,i2;
48
        int16_t i1,i2,i3;
49
        uint8_t sign;
49
        uint8_t sign;
50
 
50
 
51
        if(RemoteKeys & KEY1)
51
        if(RemoteKeys & KEY1)
52
        {
52
        {
53
                if(MenuItem) MenuItem--;
53
                if(MenuItem) MenuItem--;
54
                else MenuItem = MaxMenuItem;
54
                else MenuItem = MaxMenuItem;
55
        }
55
        }
56
        if(RemoteKeys  & KEY2)
56
        if(RemoteKeys  & KEY2)
57
        {
57
        {
58
                if(MenuItem == MaxMenuItem) MenuItem = 0;
58
                if(MenuItem == MaxMenuItem) MenuItem = 0;
59
                else MenuItem++;
59
                else MenuItem++;
60
        }
60
        }
61
        if((RemoteKeys  & KEY1) && (RemoteKeys  & KEY2)) MenuItem = 0;
61
        if((RemoteKeys  & KEY1) && (RemoteKeys  & KEY2)) MenuItem = 0;
62
 
62
 
63
        LCD_Clear();
63
        LCD_Clear();
64
 
64
 
65
        if(MenuItem > MaxMenuItem) MenuItem = MaxMenuItem;
65
        if(MenuItem > MaxMenuItem) MenuItem = MaxMenuItem;
66
        // print menu item number in the upper right corner
66
        // print menu item number in the upper right corner
67
        if(MenuItem < 10)
67
        if(MenuItem < 10)
68
        {
68
        {
69
          LCD_printfxy(17,0,"[%i]",MenuItem);
69
          LCD_printfxy(17,0,"[%i]",MenuItem);
70
        }
70
        }
71
        else
71
        else
72
        {
72
        {
73
          LCD_printfxy(16,0,"[%i]",MenuItem);
73
          LCD_printfxy(16,0,"[%i]",MenuItem);
74
        }
74
        }
75
 
75
 
76
        switch(MenuItem)
76
        switch(MenuItem)
77
        {
77
        {
78
    case 0:// Version Info Menu Item
78
    case 0:// Version Info Menu Item
79
           LCD_printfxy(0,0,"+ Follow Me +");
79
           LCD_printfxy(0,0,"+ Follow Me +");
80
           #ifdef USE_SDLOGGER
80
           #ifdef USE_SDLOGGER
81
           LCD_printfxy(0,1,"HW: SD-Logger");
81
           LCD_printfxy(0,1,"HW: SD-Logger");
82
           #endif
82
           #endif
83
           #ifdef USE_FOLLOWME
83
           #ifdef USE_FOLLOWME
84
           LCD_printfxy(0,1,"HW: Follow-Me");
84
           LCD_printfxy(0,1,"HW: Follow-Me");
85
           #endif
85
           #endif
86
           LCD_printfxy(0,2,"SW: %d.%d%c", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH+'a');
86
           LCD_printfxy(0,2,"SW: %d.%d%c", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH+'a');
87
           LCD_printfxy(0,3,"          ");
87
           LCD_printfxy(0,3,"          ");
88
           break;
88
           break;
89
        case 1:
89
        case 1:
90
                if (GPSData.Status == INVALID)
90
                if (GPSData.Status == INVALID)
91
                {
91
                {
92
                        LCD_printfxy(0,0,"No GPS data");
92
                        LCD_printfxy(0,0,"No GPS data");
93
                        LCD_printfxy(0,1,"Lon:                ");
93
                        LCD_printfxy(0,1,"Lon:                ");
94
                        LCD_printfxy(0,2,"Lat:                ");
94
                        LCD_printfxy(0,2,"Lat:                ");
95
                        LCD_printfxy(0,3,"Alt:                ");
95
                        LCD_printfxy(0,3,"Alt:                ");
96
                }
96
                }
97
                else // newdata or processed
97
                else // newdata or processed
98
                {
98
                {
99
                        switch (GPSData.SatFix)
99
                        switch (GPSData.SatFix)
100
                        {
100
                        {
101
                        case SATFIX_NONE:
101
                        case SATFIX_NONE:
102
                                LCD_printfxy(0,0,"Sats:%02d Fix:None", GPSData.NumOfSats);
102
                                LCD_printfxy(0,0,"Sats:%02d Fix:None", GPSData.NumOfSats);
103
                                break;
103
                                break;
104
                        case SATFIX_2D:
104
                        case SATFIX_2D:
105
                                LCD_printfxy(0,0,"Sats:%02d Fix:2D  ", GPSData.NumOfSats);
105
                                LCD_printfxy(0,0,"Sats:%02d Fix:2D  ", GPSData.NumOfSats);
106
                                break;
106
                                break;
107
                        case SATFIX_3D:
107
                        case SATFIX_3D:
108
                                LCD_printfxy(0,0,"Sats:%02d Fix:3D  ", GPSData.NumOfSats);
108
                                LCD_printfxy(0,0,"Sats:%02d Fix:3D  ", GPSData.NumOfSats);
109
                                break;
109
                                break;
110
                        default:
110
                        default:
111
                                LCD_printfxy(0,0,"Sats:%02d Fix:??  ", GPSData.NumOfSats);
111
                                LCD_printfxy(0,0,"Sats:%02d Fix:??  ", GPSData.NumOfSats);
112
                                break;
112
                                break;
113
                        }
113
                        }
114
                        if(GPSData.Position.Longitude < 0) sign = '-';
114
                        if(GPSData.Position.Longitude < 0) sign = '-';
115
                        else sign = '+';
115
                        else sign = '+';
116
                        i1 = abs(GPSData.Position.Longitude)/10000000L;
116
                        i1 = (int16_t)(GPSData.Position.Longitude/10000000L);
117
                        i2 = abs(GPSData.Position.Longitude)%10000000L;
117
                        i2 = abs((int16_t)((GPSData.Position.Longitude%10000000L)/10000L));
-
 
118
                        i3 = abs((int16_t)(((GPSData.Position.Longitude%10000000L)%10000L)/10L));
118
                        LCD_printfxy(0,1,"Lon:%c%03ld.%07ld deg",sign, i1, i2);
119
                        LCD_printfxy(0,1,"Lon: %c%d.%.3d%.3d deg",sign, i1, i2, i3);
119
                        if(GPSData.Position.Latitude < 0) sign = '-';
120
                        if(GPSData.Position.Latitude < 0) sign = '-';
120
                        else sign = '+';
121
                        else sign = '+';
121
                        i1 = abs(GPSData.Position.Latitude)/10000000L;
122
                        i1 = (int16_t)(GPSData.Position.Latitude/10000000L);
122
                        i2 = abs(GPSData.Position.Latitude)%10000000L;
123
                        i2 = abs((int16_t)((GPSData.Position.Latitude%10000000L)/10000L));
-
 
124
                        i3 = abs((int16_t)(((GPSData.Position.Latitude%10000000L)%10000L)/10L));
123
                        LCD_printfxy(0,2,"Lat:%c%03ld.%07ld deg",sign, i1, i2);
125
                        LCD_printfxy(0,2,"Lat: %c%d.%.3d%.3d deg",sign, i1, i2, i3);
124
                        if(GPSData.Position.Altitude < 0) sign = '-';
126
                        if(GPSData.Position.Altitude < 0) sign = '-';
125
                        else sign = '+';
127
                        else sign = '+';
126
                        i1 = abs(GPSData.Position.Altitude)/1000L;
128
                        i1 = (int16_t)(GPSData.Position.Altitude/1000L);
127
                        i2 = abs(GPSData.Position.Altitude)%1000L;
129
                        i2 = abs((int16_t)(GPSData.Position.Altitude%1000L));
128
                        LCD_printfxy(0,3,"Alt:%c%04ld.%03ld m", sign, i1, i2);
130
                        LCD_printfxy(0,3,"Alt: %c%04d.%.03d m",sign, i1, i2);
129
                }
131
                }
130
                break;
132
                break;
131
        case 2:
133
        case 2:
132
                if (GPSData.Status == INVALID)
134
                if (GPSData.Status == INVALID)
133
                {
135
                {
134
                        LCD_printfxy(0,0,"No GPS data");
136
                        LCD_printfxy(0,0,"No GPS data");
135
                        LCD_printfxy(0,1,"Speed N:            ");
137
                        LCD_printfxy(0,1,"Speed N:            ");
136
                        LCD_printfxy(0,2,"Speed E:            ");
138
                        LCD_printfxy(0,2,"Speed E:            ");
137
                        LCD_printfxy(0,3,"Speed T:            ");
139
                        LCD_printfxy(0,3,"Speed T:            ");
138
                }
140
                }
139
                else // newdata or processed
141
                else // newdata or processed
140
                {
142
                {
141
                        switch (GPSData.SatFix)
143
                        switch (GPSData.SatFix)
142
                        {
144
                        {
143
                        case SATFIX_NONE:
145
                        case SATFIX_NONE:
144
                                LCD_printfxy(0,0,"Sats:%02d Fix:None", GPSData.NumOfSats);
146
                                LCD_printfxy(0,0,"Sats:%02d Fix:None", GPSData.NumOfSats);
145
                                break;
147
                                break;
146
                        case SATFIX_2D:
148
                        case SATFIX_2D:
147
                                LCD_printfxy(0,0,"Sats:%02d Fix:2D  ", GPSData.NumOfSats);
149
                                LCD_printfxy(0,0,"Sats:%02d Fix:2D  ", GPSData.NumOfSats);
148
                                break;
150
                                break;
149
                        case SATFIX_3D:
151
                        case SATFIX_3D:
150
                                LCD_printfxy(0,0,"Sats:%02d Fix:3D  ", GPSData.NumOfSats);
152
                                LCD_printfxy(0,0,"Sats:%02d Fix:3D  ", GPSData.NumOfSats);
151
                                break;
153
                                break;
152
                        default:
154
                        default:
153
                                LCD_printfxy(0,0,"Sats:%02d Fix:??  ", GPSData.NumOfSats);
155
                                LCD_printfxy(0,0,"Sats:%02d Fix:??  ", GPSData.NumOfSats);
154
                                break;
156
                                break;
155
                        }
157
                        }
156
                        LCD_printfxy(0,1,"Speed N: %+4ld cm/s",GPSData.Speed_North);
158
                        LCD_printfxy(0,1,"Speed N: %+4d cm/s",(int16_t)GPSData.Speed_North);
157
                        LCD_printfxy(0,2,"Speed E: %+4ld cm/s",GPSData.Speed_East);
159
                        LCD_printfxy(0,2,"Speed E: %+4d cm/s",(int16_t)GPSData.Speed_East);
158
                        LCD_printfxy(0,3,"Speed T: %+4ld cm/s",GPSData.Speed_Top);
160
                        LCD_printfxy(0,3,"Speed T: %+4d cm/s",(int16_t)GPSData.Speed_Top);
159
                }
161
                }
160
                break;
162
                break;
161
        case 3:
163
        case 3:
162
                LCD_printfxy(0,0,"GPS UTC Time");
164
                LCD_printfxy(0,0,"GPS UTC Time");
163
                if (!SystemTime.Valid)
165
                if (!SystemTime.Valid)
164
                {
166
                {
165
                        LCD_printfxy(0,1,"                    ");
167
                        LCD_printfxy(0,1,"                    ");
166
                        LCD_printfxy(0,2,"  No time data!     ");
168
                        LCD_printfxy(0,2,"  No time data!     ");
167
                        LCD_printfxy(0,3,"                    ");
169
                        LCD_printfxy(0,3,"                    ");
168
                }
170
                }
169
                else // newdata or processed
171
                else // newdata or processed
170
                {
172
                {
171
                        LCD_printfxy(0,1,"                    ");
173
                        LCD_printfxy(0,1,"                    ");
172
                        LCD_printfxy(0,2,"Date: %02i/%02i/%04i",SystemTime.Month, SystemTime.Day, SystemTime.Year);
174
                        LCD_printfxy(0,2,"Date: %02i/%02i/%04i",SystemTime.Month, SystemTime.Day, SystemTime.Year);
173
                        LCD_printfxy(0,3,"Time: %02i:%02i:%02i.%03i", SystemTime.Hour, SystemTime.Min, SystemTime.Sec, SystemTime.mSec);
175
                        LCD_printfxy(0,3,"Time: %02i:%02i:%02i.%03i", SystemTime.Hour, SystemTime.Min, SystemTime.Sec, SystemTime.mSec);
174
                }
176
                }
175
        break;
177
        break;
176
 
178
 
177
    default: MaxMenuItem = MenuItem - 1;
179
    default: MaxMenuItem = MenuItem - 1;
178
             MenuItem = 0;
180
             MenuItem = 0;
179
           break;
181
           break;
180
    }
182
    }
181
    RemoteKeys = 0;
183
    RemoteKeys = 0;
182
}
184
}
183
 
185