Subversion Repositories Projects

Rev

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

Rev 772 Rev 783
1
/****************************************************************************
1
/****************************************************************************
2
 *   Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje               *
2
 *   Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje               *
3
 *   admiralcascade@gmail.com                                               *
3
 *   admiralcascade@gmail.com                                               *
4
 *   Project-URL: http://www.mylifesucks.de/oss/c-osd/                      *
4
 *   Project-URL: http://www.mylifesucks.de/oss/c-osd/                      *
5
 *                                                                          *
5
 *                                                                          *
6
 *   This program is free software; you can redistribute it and/or modify   *
6
 *   This program is free software; you can redistribute it and/or modify   *
7
 *   it under the terms of the GNU General Public License as published by   *
7
 *   it under the terms of the GNU General Public License as published by   *
8
 *   the Free Software Foundation; either version 2 of the License.         *
8
 *   the Free Software Foundation; either version 2 of the License.         *
9
 *                                                                          *
9
 *                                                                          *
10
 *   This program is distributed in the hope that it will be useful,        *
10
 *   This program is distributed in the hope that it will be useful,        *
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
13
 *   GNU General Public License for more details.                           *
13
 *   GNU General Public License for more details.                           *
14
 *                                                                          *
14
 *                                                                          *
15
 *   You should have received a copy of the GNU General Public License      *
15
 *   You should have received a copy of the GNU General Public License      *
16
 *   along with this program; if not, write to the                          *
16
 *   along with this program; if not, write to the                          *
17
 *   Free Software Foundation, Inc.,                                        *
17
 *   Free Software Foundation, Inc.,                                        *
18
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.              *
18
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.              *
19
 ****************************************************************************/
19
 ****************************************************************************/
20
 
20
 
21
#ifndef _MAIN_H
21
#ifndef _MAIN_H
22
#define _MAIN_H
22
#define _MAIN_H
23
 
23
 
24
#include <avr/pgmspace.h>
24
#include <avr/pgmspace.h>
25
#include "mk-data-structs.h"
25
#include "mk-data-structs.h"
26
 
26
 
27
/* ##########################################################################
27
/* ##########################################################################
28
 * Debugging and general purpose definitions
28
 * Debugging and general purpose definitions
29
 * ##########################################################################*/
29
 * ##########################################################################*/
30
#ifndef BUILDDATE
30
#ifndef BUILDDATE
31
#define BUILDDATE "DEVEL-BUILD" // build date, this is testing...
31
#define BUILDDATE "DEVEL-BUILD" // build date, this is testing...
32
#endif
32
#endif
33
 
33
 
34
#define ALLCHARSDEBUG 0         // set to 1 and flash firmware to see all chars
34
#define ALLCHARSDEBUG 0         // set to 1 and flash firmware to see all chars
35
 
35
 
36
#ifndef WRITECHARS              // if WRITECHARS not set via makefile
36
#ifndef WRITECHARS              // if WRITECHARS not set via makefile
37
#define WRITECHARS -1           // set to 1 and flash firmware to write all chars
37
#define WRITECHARS -1           // set to 1 and flash firmware to write all chars
38
#endif
38
#endif
39
 
39
 
40
#ifndef NTSC                    // if NTSC is not thet via makefile
40
#ifndef NTSC                    // if NTSC is not thet via makefile
41
#define NTSC 0                  // set to 1 for NTSC mode + lifts the bottom line
41
#define NTSC 0                  // set to 1 for NTSC mode + lifts the bottom line
42
#endif
42
#endif
43
 
43
 
44
#ifndef FCONLY
44
#ifndef FCONLY
45
#define FCONLY 0                // set to 1 if you do NOT have a NaviCtrl and the OSD is
45
#define FCONLY 0                // set to 1 if you do NOT have a NaviCtrl and the OSD is
46
#endif                          // connected to the FC directly
46
#endif                          // connected to the FC directly
47
 
47
 
48
#define HUD 1               // set to 0 to disable HUD by default
48
#define HUD 1               // set to 0 to disable HUD by default
49
#define ARTHORIZON 0            // set to 1 to enable roll&nick artificial horizon by default
49
#define ARTHORIZON 0            // set to 1 to enable roll&nick artificial horizon by default
50
#define BIGVARIO 0                      // set to 1 to enable the big vario bar on right side
50
#define BIGVARIO 0                      // set to 1 to enable the big vario bar on right side
51
#define STATS 1                         // set to 1 to enable statistics during motor off by default
51
#define STATS 1                         // set to 1 to enable statistics during motor off by default
52
#define WARNINGS 1                      // set to 1 to display battery+rc warning even if HUD is disabled
52
#define WARNINGS 1                      // set to 1 to display battery+rc warning even if HUD is disabled
53
 
53
 
54
//#define UBAT_WRN  94          // voltage for blinking warning, like FC settings (deprecated)
54
//#define UBAT_WRN  94          // voltage for blinking warning, like FC settings (deprecated)
55
//#define UBAT_MAX 114          // maximal battery voltage for battery-sign (deprecated)
55
//#define UBAT_MAX 114          // maximal battery voltage for battery-sign (deprecated)
56
#define CELL_VOLT_MAX 37        // max voltage per battery cell (37 for LiPo)
56
#define CELL_VOLT_MAX 37        // max voltage per battery cell (37 for LiPo)
57
#define CELL_VOLT_MIN 32        // min voltage per battery cell (maybe 32 for LiPo?)
57
#define CELL_VOLT_MIN 32        // min voltage per battery cell (maybe 32 for LiPo?)
58
#define CELL_NUM -1                     // -1 for auto, 3 for 3s1p and 4 for 4s1p
58
#define CELL_NUM -1                     // -1 for auto, 3 for 3s1p and 4 for 4s1p
59
#define RCLVL_WRN 100           // make the RC level blink if below this number
59
#define RCLVL_WRN 100           // make the RC level blink if below this number
60
 
60
 
61
// ### read datasheet before changing stuff below this line :)
61
// ### read datasheet before changing stuff below this line :)
62
#define BLINK   0b01001111      // attribute byte for blinking characters
62
#define BLINK   0b01001111      // attribute byte for blinking characters
63
#define INVERT  0b00101111      // attribute byte for inverted characters
63
#define INVERT  0b00101111      // attribute byte for inverted characters
64
#define BLACKBG 0b10001111      // attribute byte for _black background_ on characters
64
#define BLACKBG 0b10001111      // attribute byte for _black background_ on characters
65
 
65
 
66
// ### constants
66
// ### constants
67
#define MtoFT 32808399 // 3,2808399
67
#define MtoFT 32808399 // 3,2808399
68
 
68
 
69
// ### Antenna Tracking
69
// ### Antenna Tracking
70
//#define ANTENNATRACKTEST 1
70
//#define ANTENNATRACKTEST 1
71
 
71
 
72
/* ##########################################################################
72
/* ##########################################################################
73
 * FLAGS usable during runtime that get saved
73
 * FLAGS usable during runtime that get saved
74
 * ##########################################################################*/
74
 * ##########################################################################*/
75
#define COSD_FLAG_HUD                     1
75
#define COSD_FLAG_HUD                     1
76
#define COSD_FLAG_ARTHORIZON      2
76
#define COSD_FLAG_ARTHORIZON      2
77
#define COSD_FLAG_BIGVARIO                4
77
#define COSD_FLAG_BIGVARIO                4
78
#define COSD_FLAG_STATS                   8
78
#define COSD_FLAG_STATS                   8
79
#define COSD_FLAG_WARNINGS               16
79
#define COSD_FLAG_WARNINGS               16
80
#define COSD_FLAG_STROMVOLT              32
80
#define COSD_FLAG_STROMVOLT              32
81
#define COSD_FLAG_FCCURRENT              64
81
#define COSD_FLAG_FCCURRENT              64
82
#define COSD_FLAG_AGGRHORIZON   128
82
#define COSD_FLAG_AGGRHORIZON   128
83
 
83
 
84
 
84
 
85
#define COSD_FLAG_NTSC                    1
85
#define COSD_FLAG_NTSC                    1
86
#define COSD_FLAG_GPSHEIGHT               2
86
#define COSD_FLAG_GPSHEIGHT               2
87
#define COSD_FLAG_FCMODE                  4
87
#define COSD_FLAG_FCMODE                  4
88
#define COSD_FLAG_FEET                    8
88
#define COSD_FLAG_FEET                    8
89
 
89
 
90
/* ##########################################################################
90
/* ##########################################################################
91
 * FLAGS only usable during runtime (not saved)
91
 * FLAGS only usable during runtime (not saved)
92
 * ##########################################################################*/
92
 * ##########################################################################*/
93
#define COSD_FLAG_STROMREC                1
93
#define COSD_FLAG_STROMREC                1
94
#define COSD_ICONS_WRITTEN                2
94
#define COSD_ICONS_WRITTEN                2
95
#define COSD_WASFLYING                    4
95
#define COSD_WASFLYING                    4
96
 
96
 
97
/* ##########################################################################
97
/* ##########################################################################
98
 * LED controll
98
 * LED controll
99
 * ##########################################################################*/
99
 * ##########################################################################*/
100
#define LED1_ON                 PORTC |=  (1 << PC0);
100
#define LED1_ON                 PORTC |=  (1 << PC0);
101
#define LED1_OFF                PORTC &= ~(1 << PC0);
101
#define LED1_OFF                PORTC &= ~(1 << PC0);
102
#define LED2_ON                 PORTC |=  (1 << PC1);
102
#define LED2_ON                 PORTC |=  (1 << PC1);
103
#define LED2_OFF                PORTC &= ~(1 << PC1);
103
#define LED2_OFF                PORTC &= ~(1 << PC1);
104
#define LED3_ON                 PORTC |=  (1 << PC2);
104
#define LED3_ON                 PORTC |=  (1 << PC2);
105
#define LED3_OFF                PORTC &= ~(1 << PC2);
105
#define LED3_OFF                PORTC &= ~(1 << PC2);
106
#define LED4_ON                 PORTC |=  (1 << PC3);
106
#define LED4_ON                 PORTC |=  (1 << PC3);
107
#define LED4_OFF                PORTC &= ~(1 << PC3);
107
#define LED4_OFF                PORTC &= ~(1 << PC3);
108
 
108
 
109
/* ##########################################################################
109
/* ##########################################################################
110
 * switch controll
110
 * switch controll
111
 * ##########################################################################*/
111
 * ##########################################################################*/
112
#define S1_PRESSED              !(PINC & (1<<PC5))
112
#define S1_PRESSED              !(PINC & (1<<PC5))
113
#define S2_PRESSED              !(PINC & (1<<PC4))
113
#define S2_PRESSED              !(PINC & (1<<PC4))
114
 
114
 
115
 
115
 
116
/* ##########################################################################
116
/* ##########################################################################
117
 * extern spi controlled vars
117
 * extern spi controlled vars
118
 * ##########################################################################*/
118
 * ##########################################################################*/
119
extern volatile uint16_t icnt;
119
extern volatile uint16_t icnt;
120
extern volatile unsigned char * iptr;
120
extern volatile unsigned char * iptr;
121
extern volatile uint8_t spi_cmd_buffer[];
121
extern volatile uint8_t spi_cmd_buffer[];
122
extern volatile uint8_t spi_ready;
122
extern volatile uint8_t spi_ready;
123
extern int16_t ampere, max_ampere, s_volt;
123
extern int16_t ampere, max_ampere, s_volt;
124
extern int32_t ampere_wasted;
124
extern int32_t ampere_wasted;
125
 
125
 
126
/* ##########################################################################
126
/* ##########################################################################
127
 * struct for displaymodes
127
 * struct for displaymodes
128
 * ##########################################################################*/
128
 * ##########################################################################*/
129
typedef struct {
129
typedef struct {
130
    int (*dfun)(void); // function pointer
130
    int (*dfun)(void); // function pointer
131
    char *desc; // description text
131
    char *desc; // description text
132
} displaymode_t;
132
} displaymode_t;
133
 
133
 
134
const displaymode_t ncdisplaymodes[2];
134
const displaymode_t ncdisplaymodes[2];
135
const displaymode_t fcdisplaymodes[2];
135
const displaymode_t fcdisplaymodes[2];
136
 
136
 
137
int (*osd_ncmode)(void);
137
int (*osd_ncmode)(void);
138
int (*osd_fcmode)(void);
138
int (*osd_fcmode)(void);
139
 
139
 
140
/* ##########################################################################
140
/* ##########################################################################
141
 * vars used by other parts as well
141
 * vars used by other parts as well
142
 * ##########################################################################*/
142
 * ##########################################################################*/
143
volatile uint16_t setsReceived;
143
volatile uint16_t setsReceived;
144
 
144
 
145
volatile NaviData_t naviData;
145
volatile NaviData_t naviData;
146
volatile DebugOut_t debugData;
146
volatile str_DebugOut debugData;
147
 
147
 
148
// cache old vars for blinking attribute, checkup is faster than full
148
// cache old vars for blinking attribute, checkup is faster than full
149
// attribute write each time
149
// attribute write each time
150
volatile uint8_t last_UBat;
150
volatile uint8_t last_UBat;
151
volatile uint8_t last_RC_Quality;
151
volatile uint8_t last_RC_Quality;
152
 
152
 
153
// 16bit should be enough, normal LiPos don't last that long
153
// 16bit should be enough, normal LiPos don't last that long
154
volatile uint16_t uptime;
154
volatile uint16_t uptime;
155
volatile uint16_t timer;
155
volatile uint16_t timer;
156
volatile uint16_t flytime_fc;
156
volatile uint16_t flytime_fc;
157
volatile uint16_t wasted_ampere_offset;
157
volatile uint16_t wasted_ampere_offset;
158
 
158
 
159
// remember last time data was received
159
// remember last time data was received
160
volatile uint8_t seconds_since_last_data;
160
volatile uint8_t seconds_since_last_data;
161
 
161
 
162
// general PAL|NTSC distingiusch stuff
162
// general PAL|NTSC distingiusch stuff
163
uint8_t top_line;
163
uint8_t top_line;
164
uint8_t bottom_line;
164
uint8_t bottom_line;
165
 
165
 
166
// battery voltages
166
// battery voltages
167
uint8_t min_voltage;
167
uint8_t min_voltage;
168
uint8_t max_voltage;
168
uint8_t max_voltage;
169
 
169
 
170
// Flags
170
// Flags
171
uint8_t COSD_FLAGS_MODES, COSD_FLAGS_CONFIG, COSD_FLAGS_RUNTIME, COSD_DISPLAYMODE;
171
uint8_t COSD_FLAGS_MODES, COSD_FLAGS_CONFIG, COSD_FLAGS_RUNTIME, COSD_DISPLAYMODE;
172
 
172
 
173
// stats for after flight
173
// stats for after flight
174
int16_t max_Altimeter, altimeter_offset;
174
int16_t max_Altimeter, altimeter_offset;
175
uint8_t min_UBat;
175
uint8_t min_UBat;
176
 
176
 
177
uint16_t max_GroundSpeed;
177
uint16_t max_GroundSpeed;
178
int16_t max_Distance;
178
int16_t max_Distance;
179
uint16_t max_FlyingTime;
179
uint16_t max_FlyingTime;
180
 
180
 
181
// flags from last round to check for changes
181
// flags from last round to check for changes
182
uint8_t old_MKFlags;
182
uint8_t old_MKFlags;
183
 
183
 
184
const char *directions[8];
184
const char *directions[8];
185
const char *stats_item_pointers[8];
185
const char *stats_item_pointers[8];
186
 
186
 
187
#endif
187
#endif
188
 
188