Subversion Repositories Projects

Rev

Blame | Last modification | View Log | RSS feed


/****************************************************************/
/*                                                                                                                              */
/*                               NG-Video 5,8GHz                                                        */
/*                                                                                                                              */
/*                              Copyright (C) 2011 - gebad                                              */
/*                                                                                                                              */
/*  This code is distributed under the GNU Public License               */
/*      which can be found at http://www.gnu.org/licenses/gpl.txt       */
/*                                                                                                                              */
/****************************************************************/

#ifndef SETTING_H_
#define SETTING_H_

/* Indexwerte für av_source bzw. zur Auswertung von av_source */
#define AV1                                     0
#define AV2                                     1
#define DIVERSITY                       2

#define MARKER_SELECT           0xfc    // 0xfc enspricht '>>' Menue-Marker
#define MARKER_AV                       0xfb    // 0xfb enspricht '<<' Diversity AV-Marker
#define MARKER_RSSI                     'd'             // Diversity, wenn RX umschaltet mittels RSSI-Wert
#define MARKER_SYNC                     's'             // Diversity, wenn RX umschaltet auf Grund der Bildsynchronisation

#define SET_MUX_0                       PORTA &= ~(1<<MUX_IN); // MUX SxA enabled
#define SET_MUX_1                       PORTA |= (1<<MUX_IN);  // MUX SxB enabled
#define CLEAR_INT10                     EIMSK &= ~((1<<INT1) | (1<<INT0));      // Interrupt für Sync ausschalten
#define SET_INT10                       EIMSK |= (1<<INT1) | (1<<INT0);         // External Interrupt Mask Register ein

/* Beep Verzögerungszeitein */
#define DBEEPVERS                       2       // Beep on              nach Versionsanzeige
#define DBEEPVERSP                      30      // Beep Pause   nach Versionsanzeige
#define BEEPENTER                       1       // Beep on              Enter kurz Scroll_Menu() und Select_Menu()
#define DBEEPWR                         4       // Beep on              geänderte Werte ROM schreiben
#define DBEEPWRP                        30      // Beep Pause   geänderte Werte ROM schreiben
#define BEEPBAT                         20      // Beep on              bei Akku low
#define BEEP_LOW_TIME           240     // TIMER0_1 aller 500ms aufgerufen, BeepIntervall Akku leer mit 2 Min Abstand beginnen

#define ENABLE_BTIMER           1       // damit Intervall Beeper für Akku leer mit TIMER0_1 gesteuert wird
#define DISABLE_BTIMER          0

#define GPS_DISP_NONE           0       // Anzeigen bei Antennennachführung per WI232 und GPS
#define GPS_DISP_CALC           1
#define GPS_DISP_CURRENT        2
#define GPS_DISP_HOME           3
#define GPS_MISC                        4
#define GPS_RX_COUNT            5

#define BAUDRATE                        5       // für Antennennachführung mittels MKCockpit
#define BAUDRATE_MIN            0
#define BAUDRATE_MAX            6

#define POLOLU_CMD                      2

#define OFF                                     0
#define ON                                      1

#define EEPROM                  __attribute__ ((section(".eeprom")))

uint32_t baud[8] = {4800, 7200, 9600, 14400, 19200, 38400, 57600};

typedef struct {
uint8_t  rev;
uint16_t min;
uint16_t max;
uint16_t mid;
} servo_t;

typedef struct
{ uint16_t min;
  uint16_t max;
  uint16_t korr_1;
  uint16_t korr_2;
} udbm_t;

typedef struct
{
  uint16_t u0;
  uint16_t u1;
} adc_avg_t;

typedef struct
{
  uint16_t min;
  uint16_t max;
} clipo_t;

typedef struct
{
  uint8_t Umk;
  uint16_t Capacity;
  uint16_t UsedCapacity;
  uint32_t time_on;
} lipo_t;

typedef struct
{
  uint32_t Sum;
  uint16_t Count;
} current_t;

/**************************************************************/
/*                                                                                                                        */
/*                          EEPROM                                                        */
/*                                                                                                                        */
/**************************************************************/
static uint8_t   ep_eep_init                                    EEPROM;
static char              ep_version[sizeof(VERSION)]    EEPROM;
static uint8_t   ep_dogm_vers                                   EEPROM;
static uint8_t   ep_contrast                                    EEPROM;
static uint8_t   ep_light_time                                  EEPROM;
static uint8_t   ep_u_offset                                    EEPROM;
static uint32_t  ep_u_min                                       EEPROM;
static uint8_t   ep_channel                                             EEPROM;
static uint8_t   ep_av_source                                   EEPROM;
static uint8_t   ep_language                                    EEPROM;
static udbm_t    ep_udbm[CHANNEL_MAX]                   EEPROM;
static uint8_t   ep_sIdxSteps                                   EEPROM;
static servo_t   ep_servo[SERVO_NUM_CHANNELS][sizeof(servo_t)]  EEPROM;
static uint8_t   ep_servo_frame                                 EEPROM;
static uint8_t   ep_servo_nr                                    EEPROM;
static uint8_t   ep_single_step                                 EEPROM;
static uint8_t   ep_repeat                                              EEPROM;
static uint8_t   ep_pause                                               EEPROM;
static uint8_t   ep_pause_step                                  EEPROM;
static uint8_t   ep_tracking                                    EEPROM;
static uint8_t   ep_track_hyst                                  EEPROM;
static uint8_t   ep_track_tx                                    EEPROM;
static uint8_t   ep_baudrate                                    EEPROM;
static current_t ep_current                                             EEPROM;
static uint8_t   ep_akku_nr                                             EEPROM;
static lipo_t    ep_lipo[AKKU_NR_MAX+1]                 EEPROM;
static uint8_t   ep_mk_i_offset                                 EEPROM;
static uint8_t   ep_mk_i_faktor                                 EEPROM;
static uint8_t   ep_mk_w_faktor                                 EEPROM;

uint8_t  dogm_vers;
uint8_t  contrast;
uint8_t  light_time = BACKGR_LIGHT_MAX;
uint8_t  backgr_light = OFF;
uint8_t  u_offset = U_OFFSET;
uint32_t u_min = U_MIN;
uint8_t  channel = CHANNEL;
uint8_t  av_source = AV_SOURCE;
uint8_t  language = NO_LANGUAGE;
udbm_t udbm = {UDBM_MIN, UDBM_MAX, UDBM_KORR_FA, UDBM_KORR_FA};
uint32_t hyst_u_min;
servo_t servo[SERVO_NUM_CHANNELS] =     {{SERVO_REV, SERVO_I0_RIGHT, SERVO_I0_LEFT, SERVO_I0_MIDDLE},\
                                                                         {SERVO_REV, SERVO_I0_RIGHT, SERVO_I0_LEFT, SERVO_I0_MIDDLE}};
uint8_t  servo_frame = SERVO_PERIODE;
uint8_t  single_step = SINGLE_STEP;
uint8_t  repeat = REPEAT;
uint8_t  pause = PAUSE;
uint8_t  pause_step = PAUSE_STEP;
uint8_t  tracking       = TRACKING_MIN;
uint8_t  track_hyst     = TRACKING_HYSTERESE;
uint8_t  track_tx = 0;
uint8_t  baudrate = BAUDRATE;
current_t current = {0, 0};
uint8_t  akku_nr = AKKU_NR_MIN;
lipo_t   lipo = {0xff, AKKU_CAPACITY, 0, 0};    // Umk 255 ==> erste Inbetriebnahme keine Nachfrage Akku-Nr.
uint8_t  mk_i_offset = MK_I_OFFSET;
uint8_t  mk_i_faktor = MK_I_FAKTOR;
uint8_t  mk_w_faktor = MK_W_FAKTOR;

uint8_t  gps_display = 0;
uint8_t  gps_disp_clear;

uint8_t RSSI_Calc_UdBm(uint16_t *pbar_udbm);
uint8_t Set_AV_Source(uint8_t src);

uint16_t bar_udbm[12];          // RSSI-Bargraph
uint16_t* pbar_udbm = bar_udbm;
uint8_t wudbm;                          // Differenz/Abstand benachbarter udbm[i] für differenzierteren Bargraphen
uint8_t bat_low = 1;   
uint8_t sw_avx;                         // steuert über Set_AV_Source() oder rssi_diversity(av_source) Marker-Position und RX-Umschaltung
uint8_t mux_X;                          // berücksichtigt Schaltung auf Grund Synchronisation und RSSI (sw_avx meist RSSI) RX-Zählung
uint8_t MK_Motor_run = 0;       // Flag für RX Time-Counter Start/Stop
uint8_t mk_timer = 0;           // Zeitzähler lipo.time_on auf aus
uint8_t exit_while = 0;         // unabhängige Task (z.B: Menu_MK_BatteryChangeNr() - Aufruf) kann Eingabe while-Schleife beenden, wenn 1

volatile uint8_t  vsync0;
volatile uint8_t  vsync1;
volatile uint8_t  vscount0;
volatile uint8_t  vscount1;
volatile uint32_t rxcount0 = 0;
volatile uint32_t rxcount1 = 0;

uint16_t ADC_Read( uint8_t channel );
void servoSetDefaultPos(void);
void USART_Init_Baudrate(void);
void Double_Beep(uint8_t time, uint8_t pause);
char* my_itoa(int32_t zahl, uint8_t Vorz, uint8_t len, uint8_t Festkomma, uint8_t Nachkomma);
void Displ_TimeMS(int32_t time);


#endif /* SETTING_H_ */