Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 901 → Rev 902

/C-OSD/trunk/main.h
1,203 → 1,205
/****************************************************************************
* Copyright (C) 2009-2010 by Claas Anders "CaScAdE" Rathje *
* admiralcascade@gmail.com *
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
****************************************************************************/
 
#ifndef _MAIN_H
#define _MAIN_H
 
#ifndef MCU
#define MCU atmega162
#endif
 
#ifndef __AVR_ATmega162__
#define __AVR_ATmega162__
#endif
 
 
#include <avr/pgmspace.h>
#include "mk-data-structs.h"
 
/* ##########################################################################
* Debugging and general purpose definitions
* ##########################################################################*/
#ifndef BUILDDATE
#define BUILDDATE "DEVEL-BUILD" // build date, this is testing...
#endif
 
#define ALLCHARSDEBUG 0 // set to 1 and flash firmware to see all chars
 
#ifndef WRITECHARS // if WRITECHARS not set via makefile
#define WRITECHARS -1 // set to 1 and flash firmware to write all chars
#endif
 
#ifndef NTSC // if NTSC is not thet via makefile
#define NTSC 0 // set to 1 for NTSC mode + lifts the bottom line
#endif
 
#ifndef FCONLY
#define FCONLY 0 // set to 1 if you do NOT have a NaviCtrl and the OSD is
#endif // connected to the FC directly
 
#define HUD 1 // set to 0 to disable HUD by default
#define ARTHORIZON 0 // set to 1 to enable roll&nick artificial horizon by default
#define BIGVARIO 0 // set to 1 to enable the big vario bar on right side
#define STATS 1 // set to 1 to enable statistics during motor off by default
#define WARNINGS 1 // set to 1 to display battery+rc warning even if HUD is disabled
 
//#define UBAT_WRN 94 // voltage for blinking warning, like FC settings (deprecated)
//#define UBAT_MAX 114 // maximal battery voltage for battery-sign (deprecated)
#define CELL_VOLT_MAX 37 // max voltage per battery cell (37 for LiPo)
#define CELL_VOLT_MIN 32 // min voltage per battery cell (maybe 32 for LiPo?)
#define CELL_NUM -1 // -1 for auto, 3 for 3s1p and 4 for 4s1p
#define RCLVL_WRN 100 // make the RC level blink if below this number
 
// ### read datasheet before changing stuff below this line :)
#define BLINK 0b01001111 // attribute byte for blinking characters
#define INVERT 0b00101111 // attribute byte for inverted characters
#define BLACKBG 0b10001111 // attribute byte for _black background_ on characters
 
// ### constants
#define MtoFT 32808399 // 3,2808399
 
// ### Antenna Tracking
//#define ANTENNATRACKTEST 1
 
/* ##########################################################################
* FLAGS usable during runtime that get saved
* ##########################################################################*/
#define COSD_FLAG_HUD 1
#define COSD_FLAG_ARTHORIZON 2
#define COSD_FLAG_BIGVARIO 4
#define COSD_FLAG_STATS 8
#define COSD_FLAG_WARNINGS 16
#define COSD_FLAG_STROMVOLT 32
#define COSD_FLAG_FCCURRENT 64
#define COSD_FLAG_AGGRHORIZON 128
 
 
#define COSD_FLAG_NTSC 1
#define COSD_FLAG_GPSHEIGHT 2
#define COSD_FLAG_FCMODE 4
#define COSD_FLAG_FEET 8
#define COSD_FLAG_PASSIVE 16
#define COSD_FLAG_SHOW_SCOPE 32
 
/* ##########################################################################
* FLAGS only usable during runtime (not saved)
* ##########################################################################*/
#define COSD_FLAG_STROMREC 1
#define COSD_ICONS_WRITTEN 2
#define COSD_WASFLYING 4
#define COSD_DATARECEIVED 8
 
/* ##########################################################################
* LED controll
* ##########################################################################*/
#define LED1_ON PORTC |= (1 << PC0);
#define LED1_OFF PORTC &= ~(1 << PC0);
#define LED2_ON PORTC |= (1 << PC1);
#define LED2_OFF PORTC &= ~(1 << PC1);
#define LED3_ON PORTC |= (1 << PC2);
#define LED3_OFF PORTC &= ~(1 << PC2);
#define LED4_ON PORTC |= (1 << PC3);
#define LED4_OFF PORTC &= ~(1 << PC3);
 
/* ##########################################################################
* switch controll
* ##########################################################################*/
#define S1_PRESSED !(PINC & (1<<PC5))
#define S2_PRESSED !(PINC & (1<<PC4))
 
 
/* ##########################################################################
* extern spi controlled vars
* ##########################################################################*/
extern volatile uint16_t icnt;
extern volatile unsigned char * iptr;
extern volatile uint8_t spi_cmd_buffer[];
extern volatile uint8_t spi_ready;
extern int16_t ampere, max_ampere, s_volt;
extern int32_t ampere_wasted;
 
/* ##########################################################################
* struct for displaymodes
* ##########################################################################*/
typedef struct {
int (*dfun)(void); // function pointer
char *desc; // description text
} displaymode_t;
 
const displaymode_t ncdisplaymodes[2];
const displaymode_t fcdisplaymodes[2];
 
int (*osd_ncmode)(void);
int (*osd_fcmode)(void);
 
/* ##########################################################################
* vars used by other parts as well
* ##########################################################################*/
volatile uint16_t setsReceived;
 
volatile NaviData_t naviData;
volatile str_DebugOut debugData;
 
// cache old vars for blinking attribute, checkup is faster than full
// attribute write each time
volatile uint8_t last_UBat;
volatile uint8_t last_RC_Quality;
 
// 16bit should be enough, normal LiPos don't last that long
volatile uint16_t uptime;
volatile uint16_t timer;
volatile uint16_t flytime_fc;
volatile uint16_t wasted_ampere_offset;
 
// remember last time data was received
volatile uint8_t seconds_since_last_data;
 
// general PAL|NTSC distingiusch stuff
uint8_t top_line;
uint8_t bottom_line;
 
// battery voltages
uint8_t min_voltage;
uint8_t max_voltage;
 
// scope for 2nd camera field of view
uint8_t scope[8];
 
// Flags
uint8_t COSD_FLAGS_MODES, COSD_FLAGS_CONFIG, COSD_FLAGS_RUNTIME, COSD_DISPLAYMODE;
 
// stats for after flight
int16_t max_Altimeter, altimeter_offset;
uint8_t min_UBat;
 
uint16_t max_GroundSpeed;
int16_t max_Distance;
uint16_t max_FlyingTime;
 
// flags from last round to check for changes
uint8_t old_MKFlags;
uint8_t old_NCFlags;
 
const char *directions[8];
const char *stats_item_pointers[8];
 
#endif
/****************************************************************************
* Copyright (C) 2009-2011 by Claas Anders "CaScAdE" Rathje *
* admiralcascade@gmail.com *
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
****************************************************************************/
 
#ifndef _MAIN_H
#define _MAIN_H
 
#ifndef MCU
#define MCU atmega162
#endif
 
#ifndef __AVR_ATmega162__
#define __AVR_ATmega162__
#endif
 
 
#include <avr/pgmspace.h>
#include "mk-data-structs.h"
 
/* ##########################################################################
* Debugging and general purpose definitions
* ##########################################################################*/
#ifndef BUILDDATE
#define BUILDDATE "DEVEL-BUILD" // build date, this is testing...
#endif
 
#define ALLCHARSDEBUG 0 // set to 1 and flash firmware to see all chars
 
#ifndef WRITECHARS // if WRITECHARS not set via makefile
#define WRITECHARS -1 // set to 1 and flash firmware to write all chars
#endif
 
#ifndef NTSC // if NTSC is not thet via makefile
#define NTSC 0 // set to 1 for NTSC mode + lifts the bottom line
#endif
 
#ifndef FCONLY
#define FCONLY 0 // set to 1 if you do NOT have a NaviCtrl and the OSD is
#endif // connected to the FC directly
 
#define HUD 1 // set to 0 to disable HUD by default
#define ARTHORIZON 0 // set to 1 to enable roll&nick artificial horizon by default
#define BIGVARIO 0 // set to 1 to enable the big vario bar on right side
#define STATS 1 // set to 1 to enable statistics during motor off by default
#define WARNINGS 1 // set to 1 to display battery+rc warning even if HUD is disabled
 
//#define UBAT_WRN 94 // voltage for blinking warning, like FC settings (deprecated)
//#define UBAT_MAX 114 // maximal battery voltage for battery-sign (deprecated)
#define CELL_VOLT_MAX 37 // max voltage per battery cell (37 for LiPo)
#define CELL_VOLT_MIN 32 // min voltage per battery cell (maybe 32 for LiPo?)
#define CELL_NUM -1 // -1 for auto, 3 for 3s1p and 4 for 4s1p
#define RCLVL_WRN 100 // make the RC level blink if below this number
 
// ### read datasheet before changing stuff below this line :)
#define BLINK 0b01001111 // attribute byte for blinking characters
#define INVERT 0b00101111 // attribute byte for inverted characters
#define BLACKBG 0b10001111 // attribute byte for _black background_ on characters
 
// ### constants
#define MtoFT 32808399 // 3,2808399
 
// ### Antenna Tracking
//#define ANTENNATRACKTEST 1
 
/* ##########################################################################
* FLAGS usable during runtime that get saved
* ##########################################################################*/
#define COSD_FLAG_HUD 1
#define COSD_FLAG_ARTHORIZON 2
#define COSD_FLAG_BIGVARIO 4
#define COSD_FLAG_STATS 8
#define COSD_FLAG_WARNINGS 16
#define COSD_FLAG_STROMVOLT 32
#define COSD_FLAG_FCCURRENT 64
#define COSD_FLAG_AGGRHORIZON 128
 
 
#define COSD_FLAG_NTSC 1
#define COSD_FLAG_GPSHEIGHT 2
#define COSD_FLAG_FCMODE 4
#define COSD_FLAG_FEET 8
#define COSD_FLAG_PASSIVE 16
#define COSD_FLAG_SHOW_SCOPE 32
#define COSD_FLAG_SHOW_COORDS 64
#define COSD_FLAG_BIGSPEED 128
 
/* ##########################################################################
* FLAGS only usable during runtime (not saved)
* ##########################################################################*/
#define COSD_FLAG_STROMREC 1
#define COSD_ICONS_WRITTEN 2
#define COSD_WASFLYING 4
#define COSD_DATARECEIVED 8
 
/* ##########################################################################
* LED controll
* ##########################################################################*/
#define LED1_ON PORTC |= (1 << PC0);
#define LED1_OFF PORTC &= ~(1 << PC0);
#define LED2_ON PORTC |= (1 << PC1);
#define LED2_OFF PORTC &= ~(1 << PC1);
#define LED3_ON PORTC |= (1 << PC2);
#define LED3_OFF PORTC &= ~(1 << PC2);
#define LED4_ON PORTC |= (1 << PC3);
#define LED4_OFF PORTC &= ~(1 << PC3);
 
/* ##########################################################################
* switch controll
* ##########################################################################*/
#define S1_PRESSED !(PINC & (1<<PC5))
#define S2_PRESSED !(PINC & (1<<PC4))
 
 
/* ##########################################################################
* extern spi controlled vars
* ##########################################################################*/
extern volatile uint16_t icnt;
extern volatile unsigned char * iptr;
extern volatile uint8_t spi_cmd_buffer[];
extern volatile uint8_t spi_ready;
extern int16_t ampere, max_ampere, s_volt;
extern int32_t ampere_wasted;
 
/* ##########################################################################
* struct for displaymodes
* ##########################################################################*/
typedef struct {
int (*dfun)(void); // function pointer
char *desc; // description text
} displaymode_t;
 
const displaymode_t ncdisplaymodes[2];
const displaymode_t fcdisplaymodes[2];
 
int (*osd_ncmode)(void);
int (*osd_fcmode)(void);
 
/* ##########################################################################
* vars used by other parts as well
* ##########################################################################*/
volatile uint16_t setsReceived;
 
volatile NaviData_t naviData;
volatile str_DebugOut debugData;
 
// cache old vars for blinking attribute, checkup is faster than full
// attribute write each time
volatile uint8_t last_UBat;
volatile uint8_t last_RC_Quality;
 
// 16bit should be enough, normal LiPos don't last that long
volatile uint16_t uptime;
volatile uint16_t timer;
volatile uint16_t flytime_fc;
volatile uint16_t wasted_ampere_offset;
 
// remember last time data was received
volatile uint8_t seconds_since_last_data;
 
// general PAL|NTSC distingiusch stuff
uint8_t top_line;
uint8_t bottom_line;
 
// battery voltages
uint8_t min_voltage;
uint8_t max_voltage;
 
// scope for 2nd camera field of view
uint8_t scope[12];
 
// Flags
uint8_t COSD_FLAGS_MODES, COSD_FLAGS_CONFIG, COSD_FLAGS_RUNTIME, COSD_DISPLAYMODE;
 
// stats for after flight
int16_t max_Altimeter, altimeter_offset;
uint8_t min_UBat;
 
uint16_t max_GroundSpeed;
int16_t max_Distance;
uint16_t max_FlyingTime;
 
// flags from last round to check for changes
uint8_t old_MKFlags;
uint8_t old_NCFlags;
 
const char *directions[8];
const char *stats_item_pointers[8];
 
#endif