Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 2136 → Rev 2147

/Transportables_Koptertool/PKT/trunk/mksettings/mkparameters.c
0,0 → 1,2692
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net *
* Copyright (C) 2011 Harald Bongartz *
* *
* 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. *
* *
* *
* Credits to: *
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN *
* http://www.mikrokopter.de *
* Gregor "killagreg" Stobrawa for his version of the MK code *
* Thomas Kaiser "thkais" for the original project. See *
* http://www.ft-fanpage.de/mikrokopter/ *
* http://forum.mikrokopter.de/topic-4061-1.html *
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
* http://www.mylifesucks.de/oss/c-osd/ *
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
*****************************************************************************/
 
//############################################################################
//# HISTORY mkparameters.c
//#
//# 16.07.2015 Cebra
//# - add: Erweiterung SingleWpControlChannel; (FC2.11a)
//# MenuKeyChannel; (FC2.11a)
//#
//# 09.04.2015 Cebra
//# - add: Erweiterung paramEditItemTable und ID_MENU_KAMERA_Items[] um neue Parameter (FC2.09j)
//# param_ServoNickFailsave, param_ServoRollFailsave, param_Servo3Failsave, param_Servo4Failsave, param_Servo5Failsave
//#
//# 26.01.2015 Cebra
//# - add: Comming Home Ausrichtung hinzugefügt,
//# neue Einstellungen ab FC 209a im Wert ServoCompInvert, Bit4 + Bit5
//#
//# 26.09.2014 Cebra
//# - add: im Menü Höhe -> param_Hoehe_TiltCompensation, FC207d
//#
//# 04.06.2014 OG
//# - chg: MK_Parameters_MenuMain() eine Menue-Trennlinie hinter Favoriten eingefuegt
//#
//# 14.05.2014 OG
//# - chg: include "mkbase.h" geaendert auf "../mk/mkbase.h"
//#
//# 11.05.2014 OG
//# - chg: Menu_Favoriten() umgestellt auf MenuCtrl_SetTitleFromParentItem()
//# - chg: Menu_EditCategory() umgestellt auf MenuCtrl_SetTitleFromParentItem()
//#
//# 10.05.2014 OG
//# - del: editDisableDeclCalc() - wurde ersetzt durch eine Transform-Funktion
//# in paramset.c und wird jetzt von editGeneric() bearbeitet
//#
//# 07.05.2014 OG
//# - chg: Menu_Favoriten() - uebernimmt den gegebenen Menuetitel vom
//# uebergeordneten Eintrag aus mkparameters_messages.h (also Multilanguage)
//# - chg: fav_add() - erweitert um Menue-Separatoren (Trennlinien) aufzunehmen
//# - chg: Menu_EditCategory() umgestellt auf MenuCtrl_PushSeparatorID()
//#
//# 06.05.2014 OG
//# - add: Favoriten-Verwaltung implementiert (Aenderungen an verschiedenen Funktionen)
//#
//# 18.04.2014 OG
//# - fix: im ID_MENU_NAVICTRL fehlten param_NaviStickThreshold ("GPS Stick-Schwelle")
//# und param_NaviGpsMinSat ("Min. Sat")
//#
//# 17.04.2014 OG
//# - add: param_Servo3OnValue, param_Servo3OffValue, param_Servo4OnValue
//# param_Servo4OffValue
//# - add: param_NaviMaxFlyingRange, param_NaviDescendRange
//# - chg: Menu_EditCategory() blendet ggf. doppelt aufeinanderfolgenden
//# Menue-Separatoren aus
//#
//# 30.03.2014 OG
//# - chg: Sprache Hollaendisch vollstaendig entfernt
//# - chg: MenuCtrl_PushML_P() umgestellt auf MenuCtrl_PushML2_P()
//#
//# 29.03.2014 OG
//# - chg: versch. Funktioionen del: MenuCtrl_SetShowBatt() wegen Aenderung Default auf true
//# - add: Unterstuetzung fuer Rev. 100
//# (param_AutoPhotoDistance, param_AutoPhotoAtitudes, param_SingleWpSpeed)
//#
//# 27.03.2014 OG
//# kompletter neuer Code fuer ein erstes Release
//#
//# 23.02.2014 OG
//# - chg: MK_Parameters_Menu() umbenannt zu MK_Parameters()
//#
//# 20.02.2014 OG
//# - chg: MK_Parameters_Menu() meldet "nicht verfügbar"
//#
//# 12.02.2014 OG - NEU
//############################################################################
 
 
#include "../cpu.h"
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <string.h>
#include <util/atomic.h>
 
//#include "../lipo/lipo.h"
#include "../main.h"
#include "../lipo/lipo.h"
#include "../lcd/lcd.h"
#include "../uart/usart.h"
#include "../utils/menuctrl.h"
#include "../utils/xutils.h"
 
#include "../uart/uart1.h"
#include "../mk-data-structs.h"
//#include "../menu.h"
#include "../timer/timer.h"
#include "../eeprom/eeprom.h"
#include "../messages.h"
#include "../pkt/pkt.h"
#include "../mk/mkbase.h"
#include "paramset.h"
#include "mkparameters.h"
#include "mkparameters_messages.h"
 
 
//#############################################################################################
//# Strukturen; Forward-Deklarationen
//#############################################################################################
 
#define DEBUG_PARAMEDIT // schaltet zusaetzliche Debug-Ausgaben ein
 
#define EOF 255 // End Of File (bzw. end of Table...)
 
#define SEPARATOR 254 // ID fuer einen Separator in einem Menue (Trennlinie)
 
 
#define SCREEN_REFRESH 1 // neuzeichnen/refresh der Anzeige
#define SCREEN_REDRAW 2 // neuzeichnen/refresh der Anzeige
 
 
//--------------------------------------------
// editGenericCode_t
// deklariert ein einzelnes Code-Zeichen fuer Edit-Generic
//--------------------------------------------
typedef struct
{
unsigned char code; // z.B. '0', '1', 'v', 'P', 'C' ... (einzelnes Zeichen aus paramEditItem_t.format )
unsigned char min;
unsigned char max;
const char *shortText_de; //
const char *shortText_en;
const char *longText_de;
const char *longText_en;
} editGenericCode_t;
 
 
 
//---------------------------------------------
//----- globale Modulvariablen
//---------------------------------------------
 
editGenericCode_t genericCode; // Daten eines einzelnen Code-Zeichen (im RAM)
paramEditItem_t paramEditItem; // RAM Buffer: fuer ein Element von paramEditDef
char paramEditFormat[MKPARAM_STRBUFFER_LEN]; // RAM Buffer: fuer 'str' von paramEdit (Format; editGeneric)
char mkparam_strValueBuffer[MKPARAM_STRBUFFER_LEN]; // Anzeige eines Values als Klartext; Kurz (fuer das Menue) oder Lang (in der Edit-Funktion)
 
 
 
//#############################################################################################
//#
//#############################################################################################
 
static const char GENERIC_SHORT_VALUE_de[] PROGMEM = "%3u"; // nur Wert anzeigen - min/max wird uebergeordnet definiert
#define GENERIC_SHORT_VALUE_en GENERIC_SHORT_VALUE_de
#define GENERIC_LONG_VALUE_de GENERIC_SHORT_VALUE_de
#define GENERIC_LONG_VALUE_en GENERIC_SHORT_VALUE_de
//
//static const char GENERIC_SHORT_VALUE_ACCZ_de[] PROGMEM = "%4u"; // nur Wert anzeigen - min/max wird uebergeordnet definiert
//#define GENERIC_SHORT_VALUE_ACCZ_en GENERIC_SHORT_VALUE_ACCZ_de
//#define GENERIC_LONG_VALUE_ACCZ_de GENERIC_SHORT_VALUE_ACCZ_de
//#define GENERIC_LONG_VALUE_ACCZ_en GENERIC_SHORT_VALUE_ACCZ_de
 
 
static const char GENERIC_SHORT_NO_de[] PROGMEM = " N";
#define GENERIC_SHORT_NO_en GENERIC_SHORT_NO_de
static const char GENERIC_LONG_NO_de[] PROGMEM = "Nein";
static const char GENERIC_LONG_NO_en[] PROGMEM = "No";
 
static const char GENERIC_SHORT_YES_de[] PROGMEM = " J";
static const char GENERIC_SHORT_YES_en[] PROGMEM = " Y";
static const char GENERIC_LONG_YES_de[] PROGMEM = "Ja";
static const char GENERIC_LONG_YES_en[] PROGMEM = "Yes";
 
static const char GENERIC_SHORT_POTI_de[] PROGMEM = " P%u";
#define GENERIC_SHORT_POTI_en GENERIC_SHORT_POTI_de
static const char GENERIC_LONG_POTI_de[] PROGMEM = "Poti %u";
#define GENERIC_LONG_POTI_en GENERIC_LONG_POTI_de
 
static const char GENERIC_SHORT_CHANNEL_de[] PROGMEM = "C%2u";
#define GENERIC_SHORT_CHANNEL_en GENERIC_SHORT_CHANNEL_de
static const char GENERIC_LONG_CHANNEL_de[] PROGMEM = "Kanal %u";
static const char GENERIC_LONG_CHANNEL_en[] PROGMEM = "Channel %u";
 
static const char GENERIC_SHORT_SERCHANNEL_de[] PROGMEM = "S%2u";
#define GENERIC_SHORT_SERCHANNEL_en GENERIC_SHORT_SERCHANNEL_de
static const char GENERIC_LONG_SERCHANNEL_de[] PROGMEM = "Ser. Kanal %u";
static const char GENERIC_LONG_SERCHANNEL_en[] PROGMEM = "Ser. Channel %u";
 
static const char GENERIC_SHORT_AUS_de[] PROGMEM = "Aus";
static const char GENERIC_SHORT_AUS_en[] PROGMEM = "Off";
#define GENERIC_LONG_AUS_de GENERIC_SHORT_AUS_de
#define GENERIC_LONG_AUS_en GENERIC_SHORT_AUS_en
 
static const char GENERIC_SHORT_INACTIV_de[] PROGMEM = "Ina";
#define GENERIC_SHORT_INACTIV_en GENERIC_SHORT_INACTIV_de
static const char GENERIC_LONG_INACTIV_de[] PROGMEM = "Inaktiv";
#define GENERIC_LONG_INACTIV_en GENERIC_LONG_INACTIV_de
 
static const char GENERIC_SHORT_WPEVENT_de[] PROGMEM = "WPE";
#define GENERIC_SHORT_WPEVENT_en GENERIC_SHORT_WPEVENT_de
static const char GENERIC_LONG_WPEVENT_de[] PROGMEM = "WP-Event";
#define GENERIC_LONG_WPEVENT_en GENERIC_LONG_WPEVENT_de
 
static const char GENERIC_SHORT_MINIMUM_de[] PROGMEM = "Min";
#define GENERIC_SHORT_MINIMUM_en GENERIC_SHORT_MINIMUM_de
static const char GENERIC_LONG_MINIMUM_de[] PROGMEM = "Minimum";
#define GENERIC_LONG_MINIMUM_en GENERIC_LONG_MINIMUM_de
 
static const char GENERIC_SHORT_MIDDLE_de[] PROGMEM = "Mid";
#define GENERIC_SHORT_MIDDLE_en GENERIC_SHORT_MIDDLE_de
static const char GENERIC_LONG_MIDDLE_de[] PROGMEM = "Mitte";
static const char GENERIC_LONG_MIDDLE_en[] PROGMEM = "Middle";
 
static const char GENERIC_SHORT_MAXIMUM_de[] PROGMEM = "Max";
#define GENERIC_SHORT_MAXIMUM_en GENERIC_SHORT_MAXIMUM_de
static const char GENERIC_LONG_MAXIMUM_de[] PROGMEM = "Maximum";
#define GENERIC_LONG_MAXIMUM_en GENERIC_LONG_MAXIMUM_de
 
static const char GENERIC_SHORT_AN_de[] PROGMEM = " An";
static const char GENERIC_SHORT_AN_en[] PROGMEM = " On";
#define GENERIC_LONG_AN_de GENERIC_SHORT_AN_de
#define GENERIC_LONG_AN_en GENERIC_SHORT_AN_en
 
static const char GENERIC_SHORT_FREE_de[] PROGMEM = "Fre"; // z.b. "GPS Modus Steuerung"
#define GENERIC_SHORT_FREE_en GENERIC_SHORT_FREE_de
static const char GENERIC_LONG_FREE_de[] PROGMEM = "Free";
#define GENERIC_LONG_FREE_en GENERIC_LONG_FREE_de
 
static const char GENERIC_SHORT_CH_de[] PROGMEM = " CH"; // z.b. "GPS Modus Steuerung"
#define GENERIC_SHORT_CH_en GENERIC_SHORT_CH_de
static const char GENERIC_LONG_CH_de[] PROGMEM = "Coming Home (CH)";
#define GENERIC_LONG_CH_en GENERIC_LONG_CH_de
 
static const char GENERIC_SHORT_PH_de[] PROGMEM = " PH"; // z.b. "GPS Modus Steuerung"
#define GENERIC_SHORT_PH_en GENERIC_SHORT_PH_de
static const char GENERIC_LONG_PH_de[] PROGMEM = "Position Hold (PH)";
#define GENERIC_LONG_PH_en GENERIC_LONG_PH_de
 
static const char GENERIC_SHORT_DISABLED_de[] PROGMEM = "Dis"; // z.b. "Auto Start / Land"
#define GENERIC_SHORT_DISABLED_en GENERIC_SHORT_DISABLED_de
static const char GENERIC_LONG_DISABLED_de[] PROGMEM = "Disabled";
#define GENERIC_LONG_DISABLED_en GENERIC_LONG_DISABLED_de
 
static const char GENERIC_SHORT_OUT_de[] PROGMEM = "Ou%1u"; // z.B. Servo 3 und Servo 4
#define GENERIC_SHORT_OUT_en GENERIC_SHORT_OUT_de
static const char GENERIC_LONG_OUT_de[] PROGMEM = "Out %1u";
#define GENERIC_LONG_OUT_en GENERIC_LONG_OUT_de
 
static const char GENERIC_SHORT_CH_OR_NC_de[] PROGMEM = "kÄn";
static const char GENERIC_SHORT_CH_OR_NC_en[] PROGMEM = "nCh";
static const char GENERIC_LONG_CH_OR_NC_de[] PROGMEM = "Keine Änderung";
static const char GENERIC_LONG_CH_OR_NC_en[] PROGMEM = "no change";
 
static const char GENERIC_SHORT_CH_OR_FH_de[] PROGMEM = "FzH";
static const char GENERIC_SHORT_CH_OR_FH_en[] PROGMEM = "FtH";
static const char GENERIC_LONG_CH_OR_FH_de[] PROGMEM = "Front zu Home";
static const char GENERIC_LONG_CH_OR_FH_en[] PROGMEM = "front to home";
 
static const char GENERIC_SHORT_CH_OR_RH_de[] PROGMEM = "HzH";
static const char GENERIC_SHORT_CH_OR_RH_en[] PROGMEM = "RtH";
static const char GENERIC_LONG_CH_OR_RH_de[] PROGMEM = "Heck zu Home";
static const char GENERIC_LONG_CH_OR_RH_en[] PROGMEM = "rear to home";
 
static const char GENERIC_SHORT_CH_OR_SO_de[] PROGMEM = "wSt";
static const char GENERIC_SHORT_CH_OR_SO_en[] PROGMEM = "sOr";
static const char GENERIC_LONG_CH_OR_SO_de[] PROGMEM = "wie beim Start";
static const char GENERIC_LONG_CH_OR_SO_en[] PROGMEM = "same as start";
 
 
 
//------------------------------------------------
 
 
 
/*************************************************
//-------------
// ZUR INFO
//-------------
typedef struct
{
unsigned char code; // '0', '1', 'v', 'P', 'C' ...
unsigned char min;
unsigned char max;
const char *shortText_de;
const char *shortText_en;
const char *longText_de;
const char *longText_en;
} editGenericCode_t;
*************************************************/
 
// Anmerkung: kann bei Bedarf evtl. zu PROGMEM umschreiben
//editGenericCode_t const editGenericCode[] PROGMEM =
 
editGenericCode_t editGenericCode[] =
{
{ 'v', 0, 0, GENERIC_SHORT_VALUE_de, GENERIC_SHORT_VALUE_en, GENERIC_LONG_VALUE_de, GENERIC_LONG_VALUE_en }, // nur Wert anzeigen - min/max wird uebergeordnet definiert
// { 'z', 0, 0, GENERIC_SHORT_VALUE_ACCZ_de, GENERIC_SHORT_VALUE_ACCZ_en, GENERIC_LONG_VALUE_ACCZ_de, GENERIC_LONG_VALUE_ACCZ_en }, // nur Wert anzeigen x 4- min/max wird uebergeordnet definiert
{ '0', 0, 0, GENERIC_SHORT_NO_de, GENERIC_SHORT_NO_en, GENERIC_LONG_NO_de, GENERIC_LONG_NO_en },
{ '1', 1, 1, GENERIC_SHORT_YES_de, GENERIC_SHORT_YES_en, GENERIC_LONG_YES_de, GENERIC_LONG_YES_en },
{ 'P', 255,248, GENERIC_SHORT_POTI_de, GENERIC_SHORT_POTI_en, GENERIC_LONG_POTI_de, GENERIC_LONG_POTI_en },
{ 'C', 1, 16, GENERIC_SHORT_CHANNEL_de, GENERIC_SHORT_CHANNEL_en, GENERIC_LONG_CHANNEL_de, GENERIC_LONG_CHANNEL_en },
{ 'S', 17, 28, GENERIC_SHORT_SERCHANNEL_de, GENERIC_SHORT_SERCHANNEL_en, GENERIC_LONG_SERCHANNEL_de, GENERIC_LONG_SERCHANNEL_en },
{ 'A', 0, 0, GENERIC_SHORT_AUS_de, GENERIC_SHORT_AUS_en, GENERIC_LONG_AUS_de, GENERIC_LONG_AUS_en },
{ 'I', 0, 0, GENERIC_SHORT_INACTIV_de, GENERIC_SHORT_INACTIV_en, GENERIC_LONG_INACTIV_de, GENERIC_LONG_INACTIV_en },
{ 'W', 29, 29, GENERIC_SHORT_WPEVENT_de, GENERIC_SHORT_WPEVENT_en, GENERIC_LONG_WPEVENT_de, GENERIC_LONG_WPEVENT_en },
{ 'U', 30, 30, GENERIC_SHORT_MINIMUM_de, GENERIC_SHORT_MINIMUM_en, GENERIC_LONG_MINIMUM_de, GENERIC_LONG_MINIMUM_en },
{ 'M', 31, 31, GENERIC_SHORT_MIDDLE_de, GENERIC_SHORT_MIDDLE_en, GENERIC_LONG_MIDDLE_de, GENERIC_LONG_MIDDLE_en },
{ 'X', 32, 32, GENERIC_SHORT_MAXIMUM_de, GENERIC_SHORT_MAXIMUM_en, GENERIC_LONG_MAXIMUM_de, GENERIC_LONG_MAXIMUM_en },
{ 'O', 30, 30, GENERIC_SHORT_AUS_de, GENERIC_SHORT_AUS_en, GENERIC_LONG_AUS_de, GENERIC_LONG_AUS_en }, // ein weiteres "Aus"; z.b. "Motors-Sicherheitsschalter"
{ 'N', 31, 31, GENERIC_SHORT_AN_de, GENERIC_SHORT_AN_en, GENERIC_LONG_AN_de, GENERIC_LONG_AN_en }, // z.b. "Carefree"
{ 'F', 30, 30, GENERIC_SHORT_FREE_de, GENERIC_SHORT_FREE_en, GENERIC_LONG_FREE_de, GENERIC_LONG_FREE_en }, // Free - z.b. "Carefree"
{ 'H', 31, 31, GENERIC_SHORT_CH_de, GENERIC_SHORT_CH_en, GENERIC_LONG_CH_de, GENERIC_LONG_CH_en }, // Coming Home - z.b. "Carefree"
{ 'Q', 32, 32, GENERIC_SHORT_PH_de, GENERIC_SHORT_PH_en, GENERIC_LONG_PH_de, GENERIC_LONG_PH_en }, // Positiosn Hold - z.b. "Carefree"
{ 'D', 0, 0, GENERIC_SHORT_DISABLED_de, GENERIC_SHORT_DISABLED_en, GENERIC_LONG_DISABLED_de, GENERIC_LONG_DISABLED_en }, // Inaktiv - z.b. "Auto Start / Land"
{ 'T', 247,246, GENERIC_SHORT_OUT_de, GENERIC_SHORT_OUT_en, GENERIC_LONG_OUT_de, GENERIC_LONG_OUT_en },
{ 'K', 0, 0, GENERIC_SHORT_CH_OR_NC_de, GENERIC_SHORT_CH_OR_NC_en, GENERIC_LONG_CH_OR_NC_de, GENERIC_LONG_CH_OR_NC_en }, // CommingHome Orientation,
{ 'V', 1, 1, GENERIC_SHORT_CH_OR_FH_de, GENERIC_SHORT_CH_OR_FH_en, GENERIC_LONG_CH_OR_FH_de, GENERIC_LONG_CH_OR_FH_en }, // CommingHome Orientation,
{ 'R', 2, 2, GENERIC_SHORT_CH_OR_RH_de, GENERIC_SHORT_CH_OR_RH_en, GENERIC_LONG_CH_OR_RH_de, GENERIC_LONG_CH_OR_RH_en }, // CommingHome Orientation,
{ 'G', 3, 3, GENERIC_SHORT_CH_OR_SO_de, GENERIC_SHORT_CH_OR_SO_en, GENERIC_LONG_CH_OR_SO_de, GENERIC_LONG_CH_OR_SO_en }, // CommingHome Orientation,
 
{ EOF, 0, 0, 0,0,0,0 } // END OF LIST - MUST BE THE LAST!!
};
 
 
 
 
 
 
 
//#############################################################################################
//#
//#############################################################################################
 
 
static const char GENERIC_NoYes[] PROGMEM = "01"; // Nein, Ja (z.B. (fast) alle Checkboxen)
static const char GENERIC_Value[] PROGMEM = "v"; // value mit min,max aus paramEditItem (in paramEditItemTable) (z.B. Nick/Roll P (0..20) / Min. Gas (0..247) )
static const char GENERIC_ValueACCZ[] PROGMEM = "D"; // value mit min,max aus paramEditItem (in paramEditItemTable) x 4 (ACC Z Landing pulse )
static const char GENERIC_ValuePoti[] PROGMEM = "vP"; // value, Poti (z.B. Gyro Gier P)
static const char GENERIC_ValueOutPoti[] PROGMEM = "vTP"; // value, Out, Poti (z.B. Servo 3 & 4)
static const char GENERIC_Cannel[] PROGMEM = "C"; // Channel (z.B. Gas / Gier / Nick / Roll)
static const char GENERIC_AusChSerWpeMMM[] PROGMEM = "ACSWUMX"; // Aus, Channel, Ser. Channel, WP Event, Minimum, Mitte, Maximum (z.B. Poti 1..8)
static const char GENERIC_DisChSerWpeOff[] PROGMEM = "DCSWO"; // Disabled, Channel, Ser. Channel, WP Event, Off (z.B. Motors-Sicherheitsschalter)
static const char GENERIC_DisChSerWpeOffOn[] PROGMEM = "DCSWON"; // Disabled, Channel, Ser. Channel, WP Event, Off, On (z.B. Carefree)
static const char GENERIC_DisChSerWpeFreeCHPH[] PROGMEM = "DCSWFHQ"; // Disabled, Channel, Ser. Channel, WP Event, Free, CH, PH (z.B. GPS Modus Steuerung)
static const char GENERIC_DisChSer[] PROGMEM = "DCS"; // Disabled, Channel, Ser. Channel (z.B. Auto Start / Land)
static const char GENERIC_CH_Orientation[] PROGMEM = "KVRG"; // Keine Änderung, vorne Home, Heck Home, gleiche Richtung (Comming Home Orientation
static const char GENERIC_InaChSerWpeMMM[] PROGMEM = "ICSWUMX"; // Inactiv, Channel, Ser. Channel, WP Event, Minimum, Mitte, Maximum(z.B. Menu Key Channel
 
 
 
 
/*************************************************
//-------------
// ZUR INFO
//-------------
typedef struct
{
unsigned char paramID; // paramID aus paramset.h
void (*editfunc)(unsigned char paramID, uint8_t cmd); // Edit-Funktion - z.B. editGeneric(); cmd = MKPARAM_EDIT oder MKPARAM_SHORTVALUE
const char *format; // Parameter: String (PROGMEM) (vorallem fuer editGeneric() )
unsigned char min; // Parameter: min (P1)
unsigned char max; // Parameter: max (P2)
const char *title_de; // Text in PROGMEM - Menuetext und Beschreibung im Edit-Screen
const char *title_en; // Text in PROGMEM
} paramEditItem_t;
*************************************************/
 
//----------------------
// HINWEIS!
// Die unten stehende Aufgliederung in die verschiedenen Menue-Bereiche ist nur zur ORIENTIERUNG!
// Jede paramID wird nur EINMAL deklariert - die Zuordnung in die Menues erfolgt in den
// nachfolgenden ID_MENU_xyz_Items Strukturen!
//----------------------
paramEditItem_t const paramEditItemTable[] PROGMEM =
{
//-----------------------------------
// Menue: ID_MENU_KANAELE (Kanäle)
//-----------------------------------
{ param_Kanalbelegung_Gas , &editGeneric, GENERIC_Cannel , 0, 0, param_Kanalbelegung_Gas_de, param_Kanalbelegung_Gas_en },
{ param_Kanalbelegung_Gear , &editGeneric, GENERIC_Cannel , 0, 0, param_Kanalbelegung_Gear_de, param_Kanalbelegung_Gear_en },
{ param_Kanalbelegung_Nick , &editGeneric, GENERIC_Cannel , 0, 0, param_Kanalbelegung_Nick_de, param_Kanalbelegung_Nick_en },
{ param_Kanalbelegung_Roll , &editGeneric, GENERIC_Cannel , 0, 0, param_Kanalbelegung_Roll_de, param_Kanalbelegung_Roll_en },
{ param_Kanalbelegung_Poti1 , &editGeneric, GENERIC_AusChSerWpeMMM , 0, 0, param_Kanalbelegung_Poti1_de, param_Kanalbelegung_Poti1_en },
{ param_Kanalbelegung_Poti2 , &editGeneric, GENERIC_AusChSerWpeMMM , 0, 0, param_Kanalbelegung_Poti2_de, param_Kanalbelegung_Poti2_en },
{ param_Kanalbelegung_Poti3 , &editGeneric, GENERIC_AusChSerWpeMMM , 0, 0, param_Kanalbelegung_Poti3_de, param_Kanalbelegung_Poti3_en },
{ param_Kanalbelegung_Poti4 , &editGeneric, GENERIC_AusChSerWpeMMM , 0, 0, param_Kanalbelegung_Poti4_de, param_Kanalbelegung_Poti4_en },
{ param_Kanalbelegung_Poti5 , &editGeneric, GENERIC_AusChSerWpeMMM , 0, 0, param_Kanalbelegung_Poti5_de, param_Kanalbelegung_Poti5_en },
{ param_Kanalbelegung_Poti6 , &editGeneric, GENERIC_AusChSerWpeMMM , 0, 0, param_Kanalbelegung_Poti6_de, param_Kanalbelegung_Poti6_en },
{ param_Kanalbelegung_Poti7 , &editGeneric, GENERIC_AusChSerWpeMMM , 0, 0, param_Kanalbelegung_Poti7_de, param_Kanalbelegung_Poti7_en },
{ param_Kanalbelegung_Poti8 , &editGeneric, GENERIC_AusChSerWpeMMM , 0, 0, param_Kanalbelegung_Poti8_de, param_Kanalbelegung_Poti8_en },
{ param_MotorSafetySwitch , &editGeneric, GENERIC_DisChSerWpeOff , 0, 0, param_MotorSafetySwitch_de, param_MotorSafetySwitch_en },
{ param_GlobalConfig3_MotorSwitchMode , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig3_MotorSwitchMode_de, param_GlobalConfig3_MotorSwitchMode_en },
{ param_ExtraConfig_SensitiveRc , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_SensitiveRc_de, param_ExtraConfig_SensitiveRc_en },
{ param_GlobalConfig3_SpeakAll , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig3_SpeakAll_de, param_GlobalConfig3_SpeakAll_en },
 
 
//-----------------------------------
// Menue: ID_MENU_KONFIGURATION (Konfiguration)
//-----------------------------------
{ param_GlobalConfig_HoehenRegelung , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_HoehenRegelung_de, param_GlobalConfig_HoehenRegelung_en },
{ param_GlobalConfig_GpsAktiv , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_GpsAktiv_de, param_GlobalConfig_GpsAktiv_en },
{ param_GlobalConfig_KompassAktiv , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_KompassAktiv_de, param_GlobalConfig_KompassAktiv_en },
{ param_GlobalConfig_KompassFix , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_KompassFix_de, param_GlobalConfig_KompassFix_en },
// param_ExtraConfig_SensitiveRc
{ param_GlobalConfig_AchsenkopplungAktiv , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_AchsenkopplungAktiv_de, param_GlobalConfig_AchsenkopplungAktiv_en },
{ param_GlobalConfig_DrehratenBegrenzer , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_DrehratenBegrenzer_de, param_GlobalConfig_DrehratenBegrenzer_en },
{ param_GlobalConfig_HeadingHold , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_HeadingHold_de, param_GlobalConfig_HeadingHold_en },
 
 
//-----------------------------------
// Menue: ID_MENU_STICK (Stick)
//-----------------------------------
{ param_Stick_P , &editGeneric, GENERIC_Value , 0, 20, param_Stick_P_de, param_Stick_P_en },
{ param_Stick_D , &editGeneric, GENERIC_Value , 0, 20, param_Stick_D_de, param_Stick_D_en },
{ param_StickGier_P , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Gyro_Gier_P_de, param_Gyro_Gier_P_en },
{ param_ExternalControl , &editGeneric, GENERIC_ValuePoti , 0, 247, param_ExternalControl_de, param_ExternalControl_en },
 
 
//-----------------------------------
// Menue: ID_MENU_LOOPING (Looping)
//-----------------------------------
{ param_BitConfig_LoopOben , &editGeneric, GENERIC_NoYes , 0, 0, param_BitConfig_LoopOben_de, param_BitConfig_LoopOben_en },
{ param_BitConfig_LoopUnten , &editGeneric, GENERIC_NoYes , 0, 0, param_BitConfig_LoopUnten_de, param_BitConfig_LoopUnten_en },
{ param_BitConfig_LoopLinks , &editGeneric, GENERIC_NoYes , 0, 0, param_BitConfig_LoopLinks_de, param_BitConfig_LoopLinks_en },
{ param_BitConfig_LoopRechts , &editGeneric, GENERIC_NoYes , 0, 0, param_BitConfig_LoopRechts_de, param_BitConfig_LoopRechts_en },
{ param_LoopGasLimit , &editGeneric, GENERIC_ValuePoti , 0, 247, param_LoopGasLimit_de, param_LoopGasLimit_en },
{ param_LoopThreshold , &editGeneric, GENERIC_Value , 0, 247, param_LoopThreshold_de, param_LoopThreshold_en },
{ param_LoopHysterese , &editGeneric, GENERIC_Value , 0, 247, param_LoopHysterese_de, param_LoopHysterese_en },
{ param_WinkelUmschlagNick , &editGeneric, GENERIC_Value , 0, 247, param_WinkelUmschlagNick_de, param_WinkelUmschlagNick_en },
{ param_WinkelUmschlagRoll , &editGeneric, GENERIC_Value , 0, 247, param_WinkelUmschlagRoll_de, param_WinkelUmschlagRoll_en },
 
 
//-----------------------------------
// Menue: ID_MENU_HOEHE (Höhe)
//-----------------------------------
{ param_GlobalConfig_HoehenRegelung , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_HoehenRegelung_de, param_GlobalConfig_HoehenRegelung_en},
{ param_ExtraConfig_HeightLimit , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_HeightLimit_de, param_ExtraConfig_HeightLimit_en },
{ param_ExtraConfig_HeightVario , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_HeightVario_de, param_ExtraConfig_HeightVario_en }, // negiertes param_ExtraConfig_HeightLimit
{ param_GlobalConfig_HoehenSchalter , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_HoehenSchalter_de, param_GlobalConfig_HoehenSchalter_en},
{ param_ExtraConfig_VarioBeep , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_VarioBeep_de, param_ExtraConfig_VarioBeep_en },
{ param_HoeheChannel , &editGeneric, GENERIC_DisChSerWpeOffOn, 0, 0, param_HoeheChannel_de, param_HoeheChannel_en },
{ param_Hoehe_MinGas , &editGeneric, GENERIC_Value , 0, 247, param_Hoehe_MinGas_de, param_Hoehe_MinGas_en },
{ param_Hoehe_P , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Hoehe_P_de, param_Hoehe_P_en },
{ param_Luftdruck_D , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Luftdruck_D_de, param_Luftdruck_D_en },
{ param_Hoehe_ACC_Wirkung , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Hoehe_ACC_Wirkung_de, param_Hoehe_ACC_Wirkung_en },
{ param_MaxAltitude , &editGeneric, GENERIC_ValuePoti , 0, 247, param_MaxAltitude_de, param_MaxAltitude_en },
{ param_Hoehe_Verstaerkung , &editGeneric, GENERIC_Value , 0, 247, param_Hoehe_Verstaerkung_de, param_Hoehe_Verstaerkung_en },
{ param_Hoehe_HoverBand , &editGeneric, GENERIC_Value , 0, 247, param_Hoehe_HoverBand_de, param_Hoehe_HoverBand_en },
{ param_Hoehe_GPS_Z , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Hoehe_GPS_Z_de, param_Hoehe_GPS_Z_en },
{ param_Hoehe_TiltCompensation , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Hoehe_Tilt_Comp_de, param_Hoehe_Tilt_Comp_en },
{ param_Hoehe_StickNeutralPoint , &editGeneric, GENERIC_Value , 0, 160, param_Hoehe_StickNeutralPoint_de, param_Hoehe_StickNeutralPoint_en },
{ param_StartLandChannel , &editGeneric, GENERIC_DisChSer , 0, 0, param_StartLandChannel_de, param_StartLandChannel_en },
{ param_LandingSpeed , &editGeneric, GENERIC_Value , 0, 247, param_LandingSpeed_de, param_LandingSpeed_en },
{ param_LandingPulse , &editACCZLandingPulse, GENERIC_ValueACCZ , 0, 0, param_LandingPulse_de, param_LandingPulse_en },
 
 
//-----------------------------------
// Menue: ID_MENU_KAMERA (Kamera)
//-----------------------------------
{ param_ServoNickControl , &editGeneric, GENERIC_ValuePoti , 0, 247, param_ServoNickControl_de, param_ServoNickControl_en },
{ param_ServoNickComp , &editGeneric, GENERIC_ValuePoti , 0, 247, param_ServoNickComp_de, param_ServoNickComp_en },
{ param_ServoNickFailsave , &editGeneric, GENERIC_Value , 0, 247, param_ServoNickFails_de, param_ServoNickFails_en },
{ param_GlobalConfig3_ServoNickCompOff , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig3_ServoNickCompOff_de, param_GlobalConfig3_ServoNickCompOff_en }, // TODO: pruefen: ab welcher Version ist das drin ???
{ param_ServoCompInvert_SERVO_NICK_INV , &editGeneric, GENERIC_NoYes , 0, 0, param_ServoCompInvert_SVNick_de, param_ServoCompInvert_SVNick_en },
{ param_ServoCompInvert_SERVO_RELATIVE , &editGeneric, GENERIC_NoYes , 0, 0, param_ServoCompInvert_SVRelMov_de, param_ServoCompInvert_SVRelMov_en },
{ param_ServoNickMin , &editGeneric, GENERIC_Value , 0, 247, param_ServoNickMin_de, param_ServoNickMin_en },
{ param_ServoNickMax , &editGeneric, GENERIC_Value , 0, 247, param_ServoNickMax_de, param_ServoNickMax_en },
{ param_ServoFilterNick , &editGeneric, GENERIC_Value , 0, 25, param_ServoFilterNick_de, param_ServoFilterNick_en },
{ param_ServoRollControl , &editGeneric, GENERIC_ValuePoti , 0, 247, param_ServoRollControl_de, param_ServoRollControl_en },
{ param_ServoRollComp , &editGeneric, GENERIC_ValuePoti , 0, 247, param_ServoRollComp_de, param_ServoRollComp_en },
{ param_ServoRollFailsave , &editGeneric, GENERIC_Value , 0, 247, param_ServoRollFails_de, param_ServoRollFails_en },
{ param_ServoCompInvert_SERVO_ROLL_INV , &editGeneric, GENERIC_NoYes , 0, 0, param_ServoCompInvert_SVRoll_de, param_ServoCompInvert_SVRoll_en },
{ param_ServoRollMin , &editGeneric, GENERIC_Value , 0, 247, param_ServoRollMin_de, param_ServoRollMin_en },
{ param_ServoRollMax , &editGeneric, GENERIC_Value , 0, 247, param_ServoRollMax_de, param_ServoRollMax_en },
{ param_ServoFilterRoll , &editGeneric, GENERIC_Value , 0, 25, param_ServoFilterRoll_de, param_ServoFilterRoll_en },
{ param_ServoNickRefresh , &editGeneric, GENERIC_Value , 2, 8, param_ServoNickRefresh_de, param_ServoNickRefresh_en },
{ param_ServoManualControlSpeed , &editGeneric, GENERIC_Value , 0, 247, param_ServoManualControlSpeed_de, param_ServoManualControlSpeed_en },
{ param_Servo3 , &editGeneric, GENERIC_ValueOutPoti , 0, 245, param_Servo3_de, param_Servo3_en },
{ param_Servo3Failsave , &editGeneric, GENERIC_Value , 0, 247, param_Servo3Fails_de, param_Servo3Fails_en },
{ param_Servo4 , &editGeneric, GENERIC_ValueOutPoti , 0, 245, param_Servo4_de, param_Servo4_en },
{ param_Servo4Failsave , &editGeneric, GENERIC_Value , 0, 247, param_Servo4Fails_de, param_Servo4Fails_en },
{ param_Servo5 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Servo5_de, param_Servo5_en },
{ param_Servo5Failsave , &editGeneric, GENERIC_Value , 0, 247, param_Servo5Fails_de, param_Servo5Fails_en },
 
{ param_Servo3OnValue , &editGeneric, GENERIC_Value , 0, 247, param_Servo3OnValue_de, param_Servo3OnValue_en },
{ param_Servo3OffValue , &editGeneric, GENERIC_Value , 0, 247, param_Servo3OffValue_de, param_Servo3OffValue_en },
{ param_Servo4OnValue , &editGeneric, GENERIC_Value , 0, 247, param_Servo4OnValue_de, param_Servo4OnValue_en },
{ param_Servo4OffValue , &editGeneric, GENERIC_Value , 0, 247, param_Servo4OffValue_de, param_Servo4OffValue_en },
//{ param_CamOrientation , &editNA , 0 , 0, 0, param_CamOrientation_de, param_CamOrientation_en }, // wird evtl. nicht mehr unterstuetzt
 
 
//-----------------------------------
// Menue: ID_MENU_NAVICTRL (NaviCtrl)
//-----------------------------------
{ param_GlobalConfig_GpsAktiv , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_GpsAktiv_de, param_GlobalConfig_GpsAktiv_en },
{ param_NaviGpsModeChannel , &editGeneric, GENERIC_DisChSerWpeFreeCHPH , 0, 0, param_NaviGpsModeChannel_de, param_NaviGpsModeChannel_en },
{ param_NaviGpsGain , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviGpsGain_de, param_NaviGpsGain_en },
{ param_NaviStickThreshold , &editGeneric, GENERIC_Value , 0, 247, param_NaviStickThreshold_de, param_NaviStickThreshold_en },
{ param_NaviGpsMinSat , &editGeneric, GENERIC_Value , 0, 247, param_NaviGpsMinSat_de, param_NaviGpsMinSat_en },
{ param_NaviGpsP , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviGpsP_de, param_NaviGpsP_en },
{ param_NaviGpsI , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviGpsI_de, param_NaviGpsI_en },
{ param_NaviGpsD , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviGpsD_de, param_NaviGpsD_en },
{ param_NaviGpsPLimit , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviGpsPLimit_de, param_NaviGpsPLimit_en },
{ param_NaviGpsILimit , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviGpsILimit_de, param_NaviGpsILimit_en },
{ param_NaviGpsDLimit , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviGpsDLimit_de, param_NaviGpsDLimit_en },
{ param_NaviGpsA , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviGpsA_de, param_NaviGpsA_en },
{ param_NaviWindCorrection , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviWindCorrection_de, param_NaviWindCorrection_en },
{ param_NaviAccCompensation , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviAccCompensation_de, param_NaviAccCompensation_en },
{ param_NaviMaxFlyingRange , &editGeneric, GENERIC_Value , 0, 250, param_NaviMaxFlyingRange_de, param_NaviMaxFlyingRange_en },
{ param_NaviOperatingRadius , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviOperatingRadius_de, param_NaviOperatingRadius_en },
{ param_NaviAngleLimitation , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviAngleLimitation_de, param_NaviAngleLimitation_en },
{ param_NaviPH_LoginTime , &editGeneric, GENERIC_Value , 0, 247, param_NaviPH_LoginTime_de, param_NaviPH_LoginTime_en },
{ param_ExtraConfig_GpsAid , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_GpsAid_de, param_ExtraConfig_GpsAid_en },
{ param_GlobalConfig3_DphMaxRadius , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig3_DphMaxRadius_de, param_GlobalConfig3_DphMaxRadius_en },
{ param_ComingHomeAltitude , &editGeneric, GENERIC_Value , 0, 247, param_ComingHomeAltitude_de, param_ComingHomeAltitude_en },
{ param_ComingHomeOrientation , &editGeneric, GENERIC_CH_Orientation , 0, 3, param_ComingHomeOrientation_de, param_ComingHomeOrientation_en },
{ param_SingleWpControlChannel , &editGeneric, GENERIC_InaChSerWpeMMM , 0, 0, param_SingleWpControlChannel_de, param_SingleWpControlChannel_en }, //ab Rev.106
{ param_MenuKeyChannel , &editGeneric, GENERIC_InaChSerWpeMMM , 0, 0, param_MenuKeyChannel_de, param_MenuKeyChannel_en },
{ param_SingleWpSpeed , &editGeneric, GENERIC_ValuePoti , 0, 247, param_SingleWpSpeed_de, param_SingleWpSpeed_en }, // ab Rev. 100
{ param_NaviDescendRange , &editGeneric, GENERIC_Value , 0, 250, param_NaviDescendRange_de, param_NaviDescendRange_en },
 
 
//-----------------------------------
// Menue: ID_MENU_AUSGAENGE (Ausgänge)
//-----------------------------------
{ param_J16Bitmask , &editBitmask, 0 , 0, 0, param_J16Bitmask_de, param_J16Bitmask_en },
{ param_J16Timing , &editGeneric, GENERIC_ValuePoti , 0, 247, param_J16Timing_de, param_J16Timing_en },
{ param_BitConfig_MotorBlink1 , &editGeneric, GENERIC_NoYes , 0, 0, param_BitConfig_MotorBlink1_de, param_BitConfig_MotorBlink1_en }, // "nur nach Start der Motoren aktiv"
{ param_BitConfig_MotorOffLed1 , &editGeneric, GENERIC_NoYes , 0, 0, param_BitConfig_MotorOffLed1_de, param_BitConfig_MotorOffLed1_en }, // nur wenn "nur nach Start der Motoren aktiv" = JA ist -> bestimmt ob LED's an oder aus sind wenn die Motoren aus sind
{ param_GlobalConfig3_UseNcForOut1 , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig3_UseNcForOut1_de, param_GlobalConfig3_UseNcForOut1_en }, // "mit WP-Event verknüpfen"
{ param_NaviOut1Parameter , &editGeneric, GENERIC_ValuePoti , 0, 247, param_NaviOut1Parameter_de, param_NaviOut1Parameter_en }, // "AutoTrigger alle...[meter]" (bis Rev.98)
{ param_AutoPhotoDistance , &editGeneric, GENERIC_ValuePoti , 0, 247, param_AutoPhotoDistance_de, param_AutoPhotoDistance_en }, // "AutoTrigger alle [meter] in Distance" (ab Rev.100)
{ param_AutoPhotoAtitudes , &editGeneric, GENERIC_ValuePoti , 0, 247, param_AutoPhotoAtitudes_de, param_AutoPhotoAtitudes_en }, // "AutoTrigger alle [meter] in Altitude" (ab Rev.100)
 
{ param_J17Bitmask , &editBitmask, 0 , 0, 0, param_J17Bitmask_de, param_J17Bitmask_en },
{ param_J17Timing , &editGeneric, GENERIC_ValuePoti , 0, 247, param_J17Timing_de, param_J17Timing_en },
{ param_BitConfig_MotorBlink2 , &editGeneric, GENERIC_NoYes , 0, 0, param_BitConfig_MotorBlink2_de, param_BitConfig_MotorBlink2_en }, // "nur nach Start der Motoren aktiv"
{ param_BitConfig_MotorOffLed2 , &editGeneric, GENERIC_NoYes , 0, 0, param_BitConfig_MotorOffLed2_de, param_BitConfig_MotorOffLed2_en }, // nur wenn "nur nach Start der Motoren aktiv" = JA ist -> bestimmt ob LED's an oder aus sind wenn die Motoren aus sind
 
{ param_WARN_J16_Bitmask , &editBitmask, 0 , 0, 0, param_WARN_J16_Bitmask_de, param_WARN_J16_Bitmask_en }, // Bitmaske fuer Unterspannungswarnung
{ param_WARN_J17_Bitmask , &editBitmask, 0 , 0, 0, param_WARN_J17_Bitmask_de, param_WARN_J17_Bitmask_en }, // Bitmaske fuer Unterspannungswarnung
 
 
//-----------------------------------
// Menue: ID_MENU_VERSCHIEDENES (Verschiedenes)
//-----------------------------------
{ param_Gas_Min , &editGeneric, GENERIC_Value , 0, 247, param_Gas_Min_de, param_Gas_Min_en },
{ param_Gas_Max , &editGeneric, GENERIC_Value , 0, 247, param_Gas_Max_de, param_Gas_Max_en },
{ param_KompassWirkung , &editGeneric, GENERIC_ValuePoti , 0, 247, param_KompassWirkung_de, param_KompassWirkung_en },
//{ param_CompassOffset , &editGeneric, GENERIC_Value , 0, 255, param_CompassOffset_de, param_CompassOffset_en }, // TODO: +/- Werte sind dort kodiert
{ param_CompassOffset , &editCompassOffset, 0 , 0, 0, param_CompassOffset_de, param_CompassOffset_en }, // TODO: +/- Werte sind dort kodiert
{ param_CompassOffset_DisableDeclCalc , &editGeneric, GENERIC_NoYes , 0, 0, param_CompassOffset_DisableDeclCalc_de, param_CompassOffset_DisableDeclCalc_en }, // TODO: +/- Werte sind dort kodiert
{ param_CareFreeChannel , &editGeneric, GENERIC_DisChSerWpeOffOn , 0, 0, param_CareFreeChannel_de, param_CareFreeChannel_en },
{ param_ExtraConfig_LearnableCarefree , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_LearnableCarefree_de, param_ExtraConfig_LearnableCarefree_en },
 
{ param_UnterspannungsWarnung , &editGeneric, GENERIC_Value , 0, 247, param_UnterspannungsWarnung_de, param_UnterspannungsWarnung_en },
{ param_ComingHomeVoltage , &editGeneric, GENERIC_Value , 0, 247, param_ComingHomeVoltage_de, param_ComingHomeVoltage_en },
{ param_AutoLandingVoltage , &editGeneric, GENERIC_Value , 0, 247, param_AutoLandingVoltage_de, param_AutoLandingVoltage_en },
 
//{ param_ExtraConfig_33vReference , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_33vReference_de, param_ExtraConfig_33vReference_en }, // nicht mehr unterstuetzt!
{ param_NotGasZeit , &editGeneric, GENERIC_Value , 0, 247, param_NotGasZeit_de, param_NotGasZeit_en },
{ param_GlobalConfig3_VarioFailsafe , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig3_VarioFailsafe_de, param_GlobalConfig3_VarioFailsafe_en },
{ param_NotGas , &editGeneric, GENERIC_Value , 0, 247, param_NotGas_de, param_NotGas_en },
{ param_FailSafeTime , &editGeneric, GENERIC_Value , 0, 247, param_FailSafeTime_de, param_FailSafeTime_en },
{ param_FailsafeChannel , &editGeneric, GENERIC_Value , 0, 16, param_FailsafeChannel_de, param_FailsafeChannel_en },
 
{ param_ExtraConfig_NoRcOffBeeping , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_NoRcOffBeeping_de, param_ExtraConfig_NoRcOffBeeping_en },
{ param_ExtraConfig_IgnoreMagErrAtStartup , &editGeneric, GENERIC_NoYes , 0, 0, param_ExtraConfig_IgnoreMagErrAtStartup_de, param_ExtraConfig_IgnoreMagErrAtStartup_en },
{ param_GlobalConfig3_NoSdCardNoStart , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig3_NoSdCardNoStart_de, param_GlobalConfig3_NoSdCardNoStart_en },
{ param_GlobalConfig3_NoGpsFixNoStart , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig3_NoGpsFixNoStart_de, param_GlobalConfig3_NoGpsFixNoStart_en },
 
 
//-----------------------------------
// Menue: ID_MENU_GYRO (Gyro)
//-----------------------------------
{ param_Gyro_P , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Gyro_P_de, param_Gyro_P_en },
{ param_Gyro_Gier_P , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Gyro_Gier_P_de, param_Gyro_Gier_P_en },
{ param_Gyro_I , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Gyro_I_de, param_Gyro_I_en },
{ param_Gyro_Gier_I , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Gyro_Gier_I_de, param_Gyro_Gier_I_en },
{ param_Gyro_D , &editGeneric, GENERIC_ValuePoti , 0, 247, param_Gyro_D_de, param_Gyro_D_en },
 
{ param_DynamicStability , &editGeneric, GENERIC_ValuePoti , 0, 247, param_DynamicStability_de, param_DynamicStability_en },
{ param_GlobalConfig_DrehratenBegrenzer , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_DrehratenBegrenzer_de, param_GlobalConfig_DrehratenBegrenzer_en },
 
{ param_GyroAccFaktor , &editGeneric, GENERIC_Value , 0, 247, param_GyroAccFaktor_de, param_GyroAccFaktor_en },
{ param_GyroAccAbgleich , &editGeneric, GENERIC_Value , 0, 247, param_GyroAccAbgleich_de, param_GyroAccAbgleich_en },
 
{ param_I_Faktor , &editGeneric, GENERIC_ValuePoti , 0, 247, param_I_Faktor_de, param_I_Faktor_en },
{ param_Driftkomp , &editGeneric, GENERIC_Value , 0, 247, param_Driftkomp_de, param_Driftkomp_en },
{ param_Gyro_Stability , &editGeneric, GENERIC_Value , 0, 247, param_Gyro_Stability_de, param_Gyro_Stability_en },
{ param_MotorSmooth , &editGeneric, GENERIC_Value , 0, 247, param_MotorSmooth_de, param_MotorSmooth_en },
 
 
//-----------------------------------
// Menue: ID_MENU_BENUTZER (Benutzer)
//-----------------------------------
{ param_UserParam1 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_UserParam1_de, param_UserParam1_en },
{ param_UserParam2 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_UserParam2_de, param_UserParam2_en },
{ param_UserParam3 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_UserParam3_de, param_UserParam3_en },
{ param_UserParam4 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_UserParam4_de, param_UserParam4_en },
{ param_UserParam5 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_UserParam5_de, param_UserParam5_en },
{ param_UserParam6 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_UserParam6_de, param_UserParam6_en },
{ param_UserParam7 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_UserParam7_de, param_UserParam7_en },
{ param_UserParam8 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_UserParam8_de, param_UserParam8_en },
 
 
//-----------------------------------
// Menue: ID_MENU_ACHSKOPPLUNG (Achskopplung)
//-----------------------------------
{ param_GlobalConfig_AchsenkopplungAktiv , &editGeneric, GENERIC_NoYes , 0, 0, param_GlobalConfig_AchsenkopplungAktiv_de, param_GlobalConfig_AchsenkopplungAktiv_en },
{ param_AchsKopplung1 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_AchsKopplung1_de, param_AchsKopplung1_en },
{ param_AchsKopplung2 , &editGeneric, GENERIC_ValuePoti , 0, 247, param_AchsKopplung2_de, param_AchsKopplung2_en },
{ param_CouplingYawCorrection , &editGeneric, GENERIC_ValuePoti , 0, 247, param_CouplingYawCorrection_de, param_CouplingYawCorrection_en },
 
 
//-----------------------------------
// ENDE
//-----------------------------------
{ param_EOF, NOFUNC, 0,0,0, 0,0 } // END OF LIST - MUST BE THE LAST!!
};
 
 
/************************************************************
NICHT MEHR UNTERSTUEZT:
param_Receiver (Empfänger Typ: Hott, Jeti, Spektrum,...)
************************************************************/
 
 
 
 
 
//#############################################################################################
//# Menue's und Menuezuordnung
//#############################################################################################
 
//-----------------------------------
// Menue ID's: Parameters Hauptmenue
//-----------------------------------
#define ID_MENU_FAVORITEN 1 // fuer spaeter reserviert....
#define ID_MENU_KANAELE 2
#define ID_MENU_KONFIGURATION 3
#define ID_MENU_STICK 4
#define ID_MENU_LOOPING 5
#define ID_MENU_HOEHE 6
#define ID_MENU_KAMERA 7
#define ID_MENU_NAVICTRL 8
#define ID_MENU_AUSGAENGE 9
#define ID_MENU_VERSCHIEDENES 10
#define ID_MENU_GYRO 11
#define ID_MENU_BENUTZER 12
#define ID_MENU_ACHSKOPPLUNG 13
#define ID_MENU_MIXERSETUP 14 // nicht verwendet / unterstuetzt
#define ID_MENU_EASYSETUP 15
 
#define ID_MENU_TEST 66 // TEST / DEBUG
 
 
//-----------------------------------
// Zuordnungen von paramID's zu den jeweiligen Menue's
//
// Eintrag "SEPARATOR" - damit wird eine Trennlinie
// im Menue dargestellt
//-----------------------------------
 
//-------------------------------
// Menue: ID_MENU_KANAELE
//-------------------------------
unsigned char const ID_MENU_KANAELE_Items[] =
{
param_Kanalbelegung_Gas,
param_Kanalbelegung_Gear,
param_Kanalbelegung_Nick,
param_Kanalbelegung_Roll,
param_Kanalbelegung_Poti1,
param_Kanalbelegung_Poti2,
param_Kanalbelegung_Poti3,
param_Kanalbelegung_Poti4,
param_Kanalbelegung_Poti5,
param_Kanalbelegung_Poti6,
param_Kanalbelegung_Poti7,
param_Kanalbelegung_Poti8,
SEPARATOR,
param_MotorSafetySwitch,
param_GlobalConfig3_MotorSwitchMode,
SEPARATOR,
param_ExtraConfig_SensitiveRc,
param_GlobalConfig3_SpeakAll,
 
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_KONFIGURATION
//-------------------------------
unsigned char const ID_MENU_KONFIGURATION_Items[] =
{
param_GlobalConfig_HoehenRegelung,
param_GlobalConfig_GpsAktiv,
param_GlobalConfig_KompassAktiv,
param_GlobalConfig_KompassFix,
param_ExtraConfig_SensitiveRc,
param_GlobalConfig_AchsenkopplungAktiv,
param_GlobalConfig_DrehratenBegrenzer,
param_GlobalConfig_HeadingHold,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_STICK
//-------------------------------
unsigned char const ID_MENU_STICK_Items[] =
{
param_Stick_P,
param_Stick_D,
param_StickGier_P,
SEPARATOR,
param_ExternalControl,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_LOOPING
//-------------------------------
unsigned char const ID_MENU_LOOPING_Items[] =
{
param_BitConfig_LoopOben,
param_BitConfig_LoopUnten,
param_BitConfig_LoopLinks,
param_BitConfig_LoopRechts,
SEPARATOR,
param_LoopGasLimit,
param_LoopThreshold,
param_LoopHysterese,
param_WinkelUmschlagNick,
param_WinkelUmschlagRoll,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_HOEHE
//-------------------------------
unsigned char const ID_MENU_HOEHE_Items[] =
{
param_GlobalConfig_HoehenRegelung,
param_ExtraConfig_HeightLimit,
param_ExtraConfig_HeightVario,
param_GlobalConfig_HoehenSchalter,
param_ExtraConfig_VarioBeep,
SEPARATOR,
param_HoeheChannel,
param_Hoehe_Verstaerkung,
param_Hoehe_MinGas,
param_Hoehe_HoverBand,
param_Hoehe_P,
param_Hoehe_GPS_Z,
param_Hoehe_TiltCompensation,
param_Luftdruck_D,
param_Hoehe_StickNeutralPoint,
param_Hoehe_ACC_Wirkung,
param_MaxAltitude,
SEPARATOR,
param_StartLandChannel,
param_LandingSpeed,
param_LandingPulse,
EOF // *** MUST BE THE LAST! ***
};
 
 
 
//-------------------------------
// Menue: ID_MENU_KAMERA
//-------------------------------
unsigned char const ID_MENU_KAMERA_Items[] =
{
param_ServoNickControl,
param_ServoNickComp,
param_ServoNickFailsave,
param_GlobalConfig3_ServoNickCompOff, // erst ab FC-Rev 96
param_ServoCompInvert_SERVO_NICK_INV,
param_ServoCompInvert_SERVO_RELATIVE,
param_ServoNickMin,
param_ServoNickMax,
param_ServoFilterNick,
SEPARATOR,
param_ServoRollControl,
param_ServoRollComp,
param_ServoRollFailsave,
param_ServoCompInvert_SERVO_ROLL_INV,
param_ServoRollMin,
param_ServoRollMax,
param_ServoFilterRoll,
SEPARATOR,
param_ServoNickRefresh,
param_ServoManualControlSpeed,
param_Servo3,
param_Servo3Failsave,
param_Servo4,
param_Servo4Failsave,
param_Servo5,
param_Servo5Failsave,
SEPARATOR,
param_Servo3OnValue,
param_Servo3OffValue,
param_Servo4OnValue,
param_Servo4OffValue,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
 
//-------------------------------
// Menue: ID_MENU_NAVICTRL
//-------------------------------
unsigned char const ID_MENU_NAVICTRL_Items[] =
{
param_GlobalConfig_GpsAktiv,
param_NaviGpsModeChannel,
param_NaviGpsGain,
param_NaviStickThreshold,
param_NaviGpsMinSat,
param_NaviGpsP,
param_NaviGpsPLimit,
param_NaviGpsI,
param_NaviGpsILimit,
param_NaviGpsD,
param_NaviGpsDLimit,
param_NaviGpsA,
SEPARATOR,
param_NaviWindCorrection,
param_NaviAccCompensation,
param_NaviMaxFlyingRange,
param_NaviOperatingRadius,
param_NaviAngleLimitation,
param_NaviPH_LoginTime,
param_ExtraConfig_GpsAid,
param_GlobalConfig3_DphMaxRadius,
SEPARATOR,
param_ComingHomeAltitude,
param_ComingHomeOrientation,
SEPARATOR,
param_SingleWpControlChannel,
param_MenuKeyChannel,
param_SingleWpSpeed,
SEPARATOR,
param_NaviDescendRange,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_AUSGAENGE
//-------------------------------
unsigned char const ID_MENU_AUSGAENGE_Items[] =
{
param_J16Bitmask, // LED 1 Bitmaske
param_J16Timing,
param_BitConfig_MotorBlink1,
param_BitConfig_MotorOffLed1,
param_GlobalConfig3_UseNcForOut1,
param_NaviOut1Parameter,
param_AutoPhotoDistance,
param_AutoPhotoAtitudes,
SEPARATOR,
param_J17Bitmask, // LED 2 Bitmaske
param_J17Timing,
param_BitConfig_MotorBlink2,
param_BitConfig_MotorOffLed2,
SEPARATOR,
param_WARN_J16_Bitmask,
param_WARN_J17_Bitmask,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_VERSCHIEDENES
//-------------------------------
unsigned char const ID_MENU_VERSCHIEDENES_Items[] =
{
param_Gas_Min,
param_Gas_Max,
param_KompassWirkung,
param_CompassOffset,
param_CompassOffset_DisableDeclCalc,
param_CareFreeChannel,
param_ExtraConfig_LearnableCarefree,
SEPARATOR,
param_UnterspannungsWarnung,
param_ComingHomeVoltage,
param_AutoLandingVoltage,
SEPARATOR,
param_NotGasZeit,
param_GlobalConfig3_VarioFailsafe, // Nutze "Vario-Höhe" für "Not-Gas" -> beeinflusst 'param_NotGas' bzgl. "%"
param_NotGas,
param_FailSafeTime,
param_FailsafeChannel,
param_ExtraConfig_NoRcOffBeeping,
SEPARATOR,
param_ExtraConfig_IgnoreMagErrAtStartup,
param_GlobalConfig3_NoSdCardNoStart,
param_GlobalConfig3_NoGpsFixNoStart,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_GYRO
//-------------------------------
unsigned char const ID_MENU_GYRO_Items[] =
{
param_Gyro_P,
param_Gyro_I,
param_Gyro_D,
param_Gyro_Gier_P,
param_Gyro_Gier_I,
SEPARATOR,
param_DynamicStability,
param_GlobalConfig_DrehratenBegrenzer,
SEPARATOR,
param_GyroAccFaktor,
param_GyroAccAbgleich,
SEPARATOR,
param_I_Faktor,
param_Driftkomp,
param_Gyro_Stability,
param_MotorSmooth,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_BENUTZER
//-------------------------------
unsigned char const ID_MENU_BENUTZER_Items[] =
{
param_UserParam1,
param_UserParam2,
param_UserParam3,
param_UserParam4,
param_UserParam5,
param_UserParam6,
param_UserParam7,
param_UserParam8,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_ACHSKOPPLUNG
//-------------------------------
unsigned char const ID_MENU_ACHSKOPPLUNG_Items[] =
{
param_GlobalConfig_AchsenkopplungAktiv,
param_AchsKopplung1,
param_AchsKopplung2,
param_CouplingYawCorrection,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
//-------------------------------
// Menue: ID_MENU_EASYSETUP
//-------------------------------
unsigned char const ID_MENU_EASYSETUP_Items[] =
{
param_GlobalConfig_HoehenRegelung,
param_HoeheChannel,
param_Hoehe_StickNeutralPoint,
param_StartLandChannel,
SEPARATOR,
param_GlobalConfig_GpsAktiv,
param_NaviGpsModeChannel,
param_ExtraConfig_GpsAid,
param_ComingHomeAltitude,
SEPARATOR,
param_CareFreeChannel,
param_ExtraConfig_LearnableCarefree,
 
EOF // *** MUST BE THE LAST! ***
};
 
 
 
 
//#############################################################################################
//# Error-Handling
//#############################################################################################
//# mittels des auf dem PKT angezeigten Errocodes (z.B. "E32") kann man hier schauen was bzw.
//# wo (in welcher Funktion) der Fehler aufgetreten ist.
//#
//# Im Menue wird der Fehlercode rechts bei den Values dargestellt (dabei ertönen immer wieder
//# Fehler-Beep's).
//# In der Vollbildanzeige wird zusaetzlich ein uebergebener Wert (value) angezeigt - im Code
//# kann man ermitteln was der Wert darstellt.
//#############################################################################################
 
#define E01_PARAMID_MENUEDITCATEGORY 1 // Menu_EditCategory() - FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden
 
#define E11_PARAMID_EDITGENERIC 11 // editGeneric() - FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden
#define E12_PARAMID_EDITBITMASK 12 // editBitmask() - FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden
 
#define E30_CODECHAR_NOT_FOUND 30 // find_genericCode() - FEHLER: Code-Zeichen nicht in Tabelle editGenericCode gefunden
#define E31_PARAMEDIT_ITEM_NOT_FOUND 31 // find_genericCodeByValue() - FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden
#define E32_CODECHAR_NOT_FOUND 32 // find_genericCodeByValue() - FEHLER: Code-Zeichen nicht in Tabelle editGenericCode gefunden
#define E33_VALUE_NOT_IN_FORMAT 33 // find_genericCodeByValue() - FEHLER: Ende des Format-Strings erreicht - fuer das gegebene value konnte kein passender Code im Format-String gefunden werden
 
#define E41_VALUE_MIN_MAX_RANGE 41 // strValueGeneric() - FEHLER: fuer die Range von 'v' (Value) wurde max < min angegeben bei Generic -> nicht unterstuetzt
 
 
 
 
//--------------------------------------------------------------
// _error( errorcode, value, showscreen)
//
// zeigt Fehlermeldungen an
//
// PARAMETER:
// errorcode : siehe Error-defines
// value : zusaetzlicher Anzeigeparameter (nur in Screen-Anzeige)
// showscreen: true = Fehlermeldung wird vollstaendig angezeigt.
// - er Screen wird dabei geloescht
// - Ende mit Taste 'Ende'
// - langer Fehler-Beep
//
// false = es wird nur der Buffer mkparam_strValueBuffer
// mit dem Fehlercode befuellt
// - Anzeige im Menue ganz recht als "Enn"
// - kurzer Fehler-Beep der jedoch bei jeder
// Aktion im Menue zu hoeren ist
// => dann auf Anzeige "Enn" achten!
//--------------------------------------------------------------
void _error( uint8_t errorcode, uint8_t value, uint8_t showscreen)
{
xsnprintf_P( mkparam_strValueBuffer, MKPARAM_STRBUFFER_LEN, PSTR("E%02u"), errorcode); // in mkparam_strValueBuffer ausgeben fuer das Menue
 
if( showscreen )
{
lcd_cls();
 
lcdx_printp_center( 1, PSTR(" ERROR "), MINVERS, 0,-3);
lcdx_printp_center( 2, PSTR("mkparameters.c"), MNORMAL, 0,0);
 
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("Code : E%02u"), errorcode );
lcd_printf_at_P( 0, 5, MNORMAL, PSTR("Value: %3u"), value );
 
lcd_printp_at(11, 7, strGet(ENDE), MNORMAL );
 
set_beep( 500, 0x000f, BeepNormal); // Beep Error
 
while( !get_key_press(1 << KEY_ESC) )
{
//--------------------------------
// Anmerkung: OG 25.03.2014
//
// Ohne diese Verzoegerung funkioniert die Update-Erkennung via PKT-UpdateTool
// meist nicht - ist das PKT zu schnell?
// Kann man evtl. das PKT-UpdateTool diesbezueglich mal ueberpruefen ob man
// Timings/Timeout's anpassen kann?
//
// Hinweis dazu: PKT_CtrlHook() bzw. die dort enthaltene Update-Anforderungspruefung
// ist in den letzten Wochen beschleunigt geworden da unnoetiger Code fuer nicht
// benoetigte Bildschirmausgaben entfernt wurde - das ist grundsaetzlich fuer das PKT
// besser.
//
// Um das nachzustellen:
// Unten das Delay auskommentieren und einen Fehler in Menu_EditCategory() provozieren
// indem "paramID = 0;" einkommentiert wird (ist dort beschrieben)
// Dann den Fehlerscreen im PKT anzeigen lassen und ein Update via PKT-UpdateTool initiieren,
//--------------------------------
_delay_ms(150);
 
PKT_CtrlHook();
}
}
else
{
// kurzer Fehler-Beep - der kann wiederholt im Menue auftreten bei jedem Refresh des Menues
set_beep( 160, 0x000f, BeepNormal); // Beep Error
}
}
 
 
 
 
//#############################################################################################
//# Edit-Funktionen
//#############################################################################################
 
 
//--------------------------------------------------------------
// ok = find_paramEditItem( paramID )
//
// sucht in paramEditItemTable (PROGMEM) eine paramID und
// kopiert den Eintrag in das RAM
//
// PARAMETER:
// paramID
//
// RUECKGABE:
// true = paramID gefunden
// false = nicht gefunden (Fehler)
//
// -- globale Modulvariablen --
// Ergebnisse in:
//
// paramEditItem : der gefundene Eintrag vom Typ paramEditItem_t (im RAM)
// paramEditFormat: der Format-String paramEditItem.format im RAM
//--------------------------------------------------------------
unsigned char find_paramEditItem( unsigned char paramID )
{
unsigned char id;
unsigned char *p;
 
p = (unsigned char *) paramEditItemTable;
 
while( true )
{
id = pgm_read_byte(p); // die aktuelle paramID aus paramEditDef
 
if( id == paramID || id == param_EOF )
break;
 
p += sizeof( paramEditItem_t );
}
 
//-----
// wenn die gesuchte paramID nicht gefunden wurde steht
// im RAM-Buffer paramEdit.paramID == param_EOF !!
//-----
memcpy_P ( &paramEditItem , p, sizeof(paramEditItem_t) ); // die Struktur -> in den RAM-Buffer kopieren (Zugriff: paramEditItem)
strncpy_P( paramEditFormat, paramEditItem.format, MKPARAM_STRBUFFER_LEN); // format String -> in den RAM-Buffer kopieren (Zugriff: paramEditFormat)
 
return( id!=param_EOF );
}
 
 
 
//--------------------------------------------------------------
// ptrP = paramEditItemTitle()
//
// gibt einen Zeiger in PROGMEM auf den Titel/Bezeichnung eines
// paramID's in der richtigen Sprache zurueck
//
// ACHTUNG! paramEditItem muss vorher initialisert worden sein!
//--------------------------------------------------------------
/*
const char * paramEditItemTitle( void )
{
if( Config.DisplayLanguage == 0 )
return( paramEditItem.title_de );
else
return( paramEditItem.title_en );
}
*/
 
 
 
//--------------------------------------------------------------
// print_paramEditItemTitle()
//
// gibt Titel/Bezeichnung auf den Bildschirm bei x=0, y=2 aus
//
// ACHTUNG! paramEditItem muss vorher initialisert worden sein!
//--------------------------------------------------------------
void print_paramEditItemTitle( void )
{
lcd_printp_at( 0, 2, (Config.DisplayLanguage == 0 ? paramEditItem.title_de : paramEditItem.title_en ), MNORMAL); // Bezeichnung des paramID's
}
 
 
 
//--------------------------------------------------------------
// ok = find_genericCode( code )
//
// Ergebnis steht in: (globale Modulvariablen)
// genericCode
//--------------------------------------------------------------
unsigned char find_genericCode( unsigned char code )
{
unsigned char codeIdx;
 
codeIdx = 0;
while( (editGenericCode[codeIdx].code != code ) && (editGenericCode[codeIdx].code != EOF) )
codeIdx++;
 
//-----------------------------
// find_genericCode() - FEHLER: Code-Zeichen nicht in Tabelle editGenericCode gefunden
//-----------------------------
if( editGenericCode[codeIdx].code == EOF )
{
_error( E30_CODECHAR_NOT_FOUND, code, false);
return false;
}
 
memcpy( &genericCode, &editGenericCode[codeIdx], sizeof(editGenericCode_t) ); // die gefundene Struktur in den RAM-Buffer kopieren
 
return true;
}
 
 
 
//--------------------------------------------------------------
// ok = find_genericCode( paramID, &v, &min, &max, pFormat)
//
// PARAMETER:
// paramID
// *v
// *min
// *max
// *pFormat
//
// Ergebnis steht in: (globale Modulvariablen)
// paramEditItem
// paramEditFormat: der zugehoerige Format-String
// genericCode
//--------------------------------------------------------------
unsigned char find_genericCodeByValue( unsigned char paramID, unsigned char *v, unsigned char *min, unsigned char *max )
{
unsigned char codeIdx;
char *pFormat;
 
 
//-------------------------------------------------
// 1. finde paramID in der paramEditItem-Tabelle
//
// sollte der RAM-Buffer paramEditItem bereits das
// gesuchte enthalten dann ok
//-------------------------------------------------
if( paramEditItem.paramID != paramID )
find_paramEditItem( paramID );
 
//---
// FEHLER: paramEditItem nicht in Tabelle paramEditItemTable gefunden
//---
if( paramEditItem.paramID == param_EOF )
{
_error( E31_PARAMEDIT_ITEM_NOT_FOUND, paramID, false);
return false;
}
 
pFormat = paramEditFormat; // Zeiger auf das erste Zeichen vom Format-String (z.B. "DCSWFHQ")
*v = paramGet( paramID ); // der aktuelle Wert des paraID
 
while( true )
{
//------
// suche editGenericCode mittels aktuelles Zeichens *pFormat
//------
codeIdx = 0;
while( (editGenericCode[codeIdx].code != *pFormat) && (editGenericCode[codeIdx].code != EOF) )
codeIdx++;
 
 
//------
// FEHLER: Code-Zeichen nicht in Tabelle editGenericCode gefunden
//------
if( editGenericCode[codeIdx].code == EOF )
{
_error( E32_CODECHAR_NOT_FOUND, *pFormat, false);
return false;
}
 
 
//------
// suche den Value-Bereich (min/max) fuer das Code-Zeichen
//------
if( editGenericCode[codeIdx].code == 'v' )
{
// bei code 'v' kommt min/max aus paramEditItem
*min = paramEditItem.min;
*max = paramEditItem.max;
}
else
{
// ansonsten kommt min/max aus dem Code selber
*min = editGenericCode[codeIdx].min;
*max = editGenericCode[codeIdx].max;
}
 
// value gefunden (innerhalb von min/max)?
// beruecksichtigt 'gedrehte' min/max (z.B. Poti1..8)
if( (*min <= *max && *v >= *min && *v <= *max) || (*min > *max && *v >= *max && *v <= *min) )
{
// gefunden - Schleife verlassen
break;
}
 
 
//------
// naechstes Code-Zeichen aus der Format-Maske
//------
pFormat++;
 
 
//------
// FEHLER: Ende des Format-Strings erreicht - fuer das gegebene value konnte kein passender Code im Format-String gefunden werden
//------
if( *pFormat == 0 ) // Ende des Format-Strings erreicht - Fehler...
{
_error( E33_VALUE_NOT_IN_FORMAT, *v, false);
return false;
}
}
 
memcpy( &genericCode, &editGenericCode[codeIdx], sizeof(editGenericCode_t) ); // die gefundene Struktur in den RAM-Buffer kopieren
 
genericCode.min = *min; // ggf. min/max ueberschreiben durch min/max von paramEditItem
genericCode.max = *max;
 
return true;
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
const char * get_genericCodeText( uint8_t cmd )
{
if( cmd == MKPARAM_LONGVALUE )
{
if( Config.DisplayLanguage == 0 ) return genericCode.longText_de;
else return genericCode.longText_en;
}
else
{
if( Config.DisplayLanguage == 0 ) return genericCode.shortText_de;
else return genericCode.shortText_en;
}
return 0;
}
 
 
 
//--------------------------------------------------------------
// ok = strValueGeneric( paramID, cmd )
//
// erstellt die String Representation des Wertes von paramID
// im Buffer mkparam_strValueBuffer.
//
// Mit 'cmd' wird gesteuert ob es der Lang-Text oder der
// Kurztext (3 Zeichen) ist.
//
// PARAMETER:
// paramID:
// cmd: MKPARAM_SHORTVALUE oder MKPARAM_LONGVALUE
//--------------------------------------------------------------
uint8_t strValueGeneric( unsigned char paramID, uint8_t cmd )
{
unsigned char v;
unsigned char min;
unsigned char max;
 
if( find_genericCodeByValue( paramID, &v, &min, &max) )
{
//-------------------
// value gefunden!
//-------------------
if( genericCode.code == 'v' ) // Code 'v' (Value) - keine Umrechnung von min/max
{
if( max < min )
{
// max < min bei 'v' (Value) wird aktuell nicht unterstuezt da
// kein Beispiel vorhanden ist was damit ggf. gemeint ist.
// Wenn das irgendwann benoetigt wird muss das hier gecoded werden.
// Bis dahin wird das als Fehler angesehen (ggf. vertippt beim coden).
_error( E41_VALUE_MIN_MAX_RANGE, v, false);
return false;
}
}
else // alles andere ausser 'v' - der Wert wird in die Range von min/max umgerechnet
{
if( min <= max )
v = v-min;
else
v = min-v; // OG Notiz: v = 248 = 8 # 248 = 8, 255 = 1 # min 255 max = 248
v++; // fuer Anzeige +1: statt '0' eine '1' anzeigen - Beispiel: statt "Poti0" zeige "Poti1"
}
 
 
//-------------------
// ertstelle String
//-------------------
xsnprintf_P( mkparam_strValueBuffer, MKPARAM_STRBUFFER_LEN, get_genericCodeText(cmd), v); // erzeuge den Ausgabestring in mkparam_strValueBuffer
 
return true;
}
 
return false;
}
 
 
 
 
//--------------------------------------------------------------
// ok = getGenericNextValue( paramID, vInc )
//
// PARAMETER:
//--------------------------------------------------------------
uint8_t getGenericNextValue( unsigned char paramID, int8_t vInc )
{
int v; // value von paramID - signed int: damit -1 und >255 ausgewertet werden kann
unsigned char value; // zum holen von v via find_genericCodeByValue()
unsigned char min;
unsigned char max;
unsigned char codeIdx;
char *pFormat;
 
 
if( find_genericCodeByValue( paramID, &value, &min, &max) )
{
v = (int)value; // value vom paramID wird gecastet auf int um -1 und >255 fuer edit zu erkennen
 
//------------------------------------------------------
// Pointer auf das Zeichen im Format-String ermitteln
//------------------------------------------------------
pFormat = paramEditFormat;
while( *pFormat != genericCode.code ) pFormat++;
 
 
if( min > max ) // 'umgedrehte' min/max Werte wie bei Poti1..8
vInc = vInc * -1;
 
 
v = v + vInc;
 
 
//------------------------------------------------------
// min/max Grenzen des Code-Zeichens ueberschritten?
//------------------------------------------------------
if( (min <= max && v < min) || (min > max && v > min) )
{
if( pFormat == paramEditFormat ) // Anfang vom Code-String? -> dann gehe zum Ende (letztes Zeichen)
{
while( *(pFormat+1) ) pFormat++;
}
else
{
pFormat--; // vorheriges Format-Zeichen = vorheriger Code
}
 
 
codeIdx = 0; // code-Zeichen suchen in Tabelle editGenericCode
while( (editGenericCode[codeIdx].code != *pFormat) && (editGenericCode[codeIdx].code != EOF) )
codeIdx++;
 
if( editGenericCode[codeIdx].code == EOF ) // Fehler? -> exit
{
return false;
}
 
if( editGenericCode[codeIdx].code == 'v' )
v = paramEditItem.max;
else
v = editGenericCode[codeIdx].max;
 
}
else if( (min <= max && v > max) || (min > max && v < max) )
{
pFormat++; // naechstes Format-Zeichen = naechster Code
if( *pFormat == 0 ) // Ende des Format-Strings?
pFormat = paramEditFormat;
 
codeIdx = 0; // code-Zeichen suchen in Tabelle editGenericCode
while( (editGenericCode[codeIdx].code != *pFormat) && (editGenericCode[codeIdx].code != EOF) )
codeIdx++;
 
if( editGenericCode[codeIdx].code == EOF ) // Fehler? -> exit
{
return false;
}
 
if( editGenericCode[codeIdx].code == 'v' )
v = paramEditItem.min;
else
v = editGenericCode[codeIdx].min;
}
 
 
//------------------------------------------------------
// neuen Wert setzen
//------------------------------------------------------
paramSet( paramID, (unsigned char)v );
 
return true;
 
} // end: if( find_genericCode( paramID, &v, &min, &max) )
 
 
return false;
}
 
 
 
//--------------------------------------------------------------
// editGeneric( paramID, cmd )
//
// PARAMETER:
// cmd: MKPARAM_EDIT oder MKPARAM_SHORTVALUE oder MKPARAM_LONGVALUE
//--------------------------------------------------------------
void editGeneric( unsigned char paramID, uint8_t cmd )
{
unsigned char v_org;
uint8_t redraw;
int8_t vInc;
 
if( cmd != MKPARAM_EDIT )
{
// wenn cmd = MKPARAM_SHORTVALUE oder MKPARAM_LONGVALUE
strValueGeneric( paramID, cmd); // Ergebnis in: mkparam_strValueBuffer
return;
}
 
find_paramEditItem( paramID );
 
//------------------------
// editGeneric() - FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden
//------------------------
if( paramEditItem.paramID == param_EOF )
{
_error( E11_PARAMID_EDITGENERIC, paramID, true);
return;
}
 
lcd_cls();
 
v_org = paramGet( paramID );
redraw = SCREEN_REDRAW;
vInc = 0; // 0, +1, -1 (inc/dec)
 
while( true )
{
//-----------------------
// Anzeige: Titel, usw..
//-----------------------
if( redraw == SCREEN_REDRAW )
{
lcd_frect( 0, 0, 127, 7, 1); // Headline: Box fill
lcdx_printp_at( 1, 0, PSTR("Ändern"), MINVERS, 0,0); // Titel
lcd_printp_at( 0, 7, strGet(KEYLINE2), MNORMAL); // Keyline: <- -> Ende OK
lcd_printp_at(11, 7, strGet(KEYCANCEL), MNORMAL); // Keyline: "Abbr." statt "Ende" einsetzen
 
print_paramEditItemTitle(); // Bezeichnung des paramID's anzeigen
 
redraw = SCREEN_REFRESH;
}
 
 
//---------------
// LiPo Anzeigen
//---------------
show_Lipo(); // LiPo anzeigen
 
 
//-----------------------
// Anzeige: nur Wert
//-----------------------
if( redraw == SCREEN_REFRESH )
{
strValueGeneric( paramID, MKPARAM_LONGVALUE); // Lang-Text des Values anzeigen
// nach strValueGeneric() ist auch genericCode initialisiert!
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("> %18s"), mkparam_strValueBuffer );
 
 
// DEBUG...
#ifdef DEBUG_PARAMEDIT
//lcd_printf_at_P( 16, 1, MNORMAL, PSTR("%c %3u"), genericCode.code, paramGet(paramID) );
#endif
 
//lcd_printf_at_P( 16, 4, MNORMAL, PSTR("= %03u"), v );
 
 
if( abs(genericCode.max-genericCode.min) <= 20 )
_delay_ms( 200 ); // Verzoegerung
 
vInc = 0;
redraw = 0;
}
 
 
//-----------------
// TASTEN
//-----------------
if( get_key_press(1 << KEY_ESC) ) // Key: Cancel
{
paramSet( paramID, v_org ); // org. Wert wieder herstellen
break;
}
 
if( get_key_press(1 << KEY_ENTER) ) // Key: OK
{
break;
}
 
if( get_key_press(1 << KEY_PLUS) || get_key_long_rpt_sp( (1 << KEY_PLUS),2) ) // Key: rechts / +1
{
vInc = +1;
}
 
 
if( get_key_press(1 << KEY_MINUS) || get_key_long_rpt_sp( (1 << KEY_MINUS),2) ) // Key: links / -1
{
vInc = -1;
}
 
if( vInc != 0 )
{
getGenericNextValue( paramID, vInc );
redraw = SCREEN_REFRESH;
}
 
 
//------------------------------------------
// Pruefe PKT-Update oder andere PKT-Aktion
//------------------------------------------
if( PKT_CtrlHook() ) // Update vom Updatetool angefordert?
{
lcd_cls();
redraw = SCREEN_REDRAW;
}
 
} // end: while( true )
 
}
 
 
 
//--------------------------------------------------------------
// editBitmask( paramID, cmd )
//
// PARAMETER:
// paramID: die paramID
// cmd: MKPARAM_EDIT oder MKPARAM_SHORTVALUE oder MKPARAM_LONGVALUE
//--------------------------------------------------------------
void editBitmask( unsigned char paramID, uint8_t cmd )
{
unsigned char v;
uint8_t redraw;
uint8_t i;
int8_t pos;
 
find_paramEditItem( paramID );
 
//-----------------------
// editBitmask() - FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden
//-----------------------
if( paramEditItem.paramID == param_EOF )
{
_error( E12_PARAMID_EDITBITMASK, paramID, (cmd==MKPARAM_EDIT) );
return;
}
 
 
//-----------------------
// nur Rueckgabe des Wertes in mkparam_strValueBuffer ?
//-----------------------
if( cmd != MKPARAM_EDIT )
{
v = paramGet( paramID );
xsnprintf_P( mkparam_strValueBuffer, MKPARAM_STRBUFFER_LEN, PSTR("%03u"), v); // erzeuge den Ausgabestring in mkparam_strValueBuffer
return;
}
 
 
lcd_cls();
 
v = paramGet( paramID );
redraw = SCREEN_REDRAW;
pos = 0;
 
while( true )
{
//-----------------------
// Anzeige: Titel, usw..
//-----------------------
if( redraw == SCREEN_REDRAW )
{
lcd_frect( 0, 0, 127, 7, 1); // Headline: Box fill
lcdx_printp_at( 1, 0, PSTR("Ändern"), MINVERS, 0,0); // Titel
lcd_printp_at( 1, 7, PSTR("0/1 \x19 OK"), MNORMAL); // Keyline: -> 0/1 OK
lcd_printp_at( 11, 7, strGet(KEYCANCEL), MNORMAL); // Keyline: "Abbr." bzw "Cancel"
lcdx_printp_at( 7, 6, PSTR("\x18"), MNORMAL, -2,2); // Keyline langer Tastendruck: -> 0/1 OK
 
if( (paramID == param_J16Bitmask) || (paramID == param_J17Bitmask) )
{
lcdx_printp_at( 10, 5, PSTR("(Bit1=Idle)"), MNORMAL, 0,2); //
}
 
print_paramEditItemTitle(); // Bezeichnung des paramID's (Stelle x=0, y=2)
 
redraw = SCREEN_REFRESH;
}
 
 
//---------------
// LiPo Anzeigen
//---------------
show_Lipo(); // LiPo anzeigen
 
 
//-----------------------
// Anzeige: nur Wert
//-----------------------
if( redraw == SCREEN_REFRESH )
{
for(i = 0; i < 8; i++)
{
lcd_putc( 8-i, 4, ( (v & (1 << i)) ? '1' : '0'), MNORMAL);
}
 
lcd_frect( 0, (8*5), 125-(11*6), 7, 0); // clear: Eingabemarkierung
lcd_printp_at (pos+1, 5,PSTR("\x12"), MNORMAL); // Eingabemarkierung (Pfeil nach oben)
 
lcd_printf_at_P( 15, 4, MNORMAL, PSTR("= %03u"), v ); // Anzeige des aktuellen Wertes Dezimal
 
// _delay_ms( 200 ); // Verzoegerung
redraw = 0;
}
 
 
//-----------------
// TASTEN
//-----------------
if( get_key_short(1 << KEY_ESC) ) // Key: Cancel
{
break; // verlassen
}
 
if (get_key_short(1 << KEY_ENTER)) // Key: OK
{
paramSet( paramID, v ); // Wert speichern
break; // und verlassen
}
 
if( get_key_short(1 << KEY_PLUS) )
{
if(pos == 7) pos = 0;
else pos++;
redraw = SCREEN_REFRESH;
}
 
if( get_key_long(1 << KEY_PLUS) )
{
if(pos == 0) pos = 7;
else pos--;
redraw = SCREEN_REFRESH;
}
 
 
if( get_key_short (1 << KEY_MINUS) )
{
v ^= (1<<(7-pos));
redraw = SCREEN_REFRESH;
}
 
 
//------------------------------------------
// evtl. weitere lange Tasten abfangen, da es
// ansonsten ggf. Nebeneffekte bzgl. dem Menue
// beim verlassen der Funktion gibt
//------------------------------------------
get_key_long_rpt_sp( KEY_ALL,2);
 
 
//------------------------------------------
// Pruefe PKT-Update oder andere PKT-Aktion
//------------------------------------------
if( PKT_CtrlHook() ) // Update vom Updatetool angefordert?
{
lcd_cls();
redraw = SCREEN_REDRAW;
}
 
} // end: while( true )
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
void editCompassOffset( unsigned char paramID, uint8_t cmd )
{
unsigned char vu; // unsigned byte
int v; // signed
uint8_t redraw;
uint8_t bit7;
uint8_t bit8;
uint8_t lDisDeclCalc;
 
find_paramEditItem( paramID );
 
//-----------------------
// editCompassOffset() - FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden
//-----------------------
if( paramEditItem.paramID == param_EOF )
{
// TODO: Fehlercode anpassen!
_error( E12_PARAMID_EDITBITMASK, paramID, (cmd==MKPARAM_EDIT) );
return;
}
 
 
//-----------------------
// Wert ermitteln (-60 bis 60)
//-----------------------
vu = paramGet( paramID );
 
bit7 = ((vu & 0x40) ? true : false); // Bit 7: 1 = negativ; 0 = positiv
bit8 = ((vu & 0x80) ? true : false); // Bit 8 in Kombination mit Bit 7 = "Disable dec. Calc"
 
// Bit 8 == Bit 7: "Disable dec. Calc" AUS
// Bit 8 != Bit 7: "Disable dec. Calc" AN
lDisDeclCalc = ((bit8 == bit7) ? 0 : 1); // merken um das spaeter wieder in den Wert einzubauen
 
vu = (vu & (0x80 ^ 0xff)); // Bit 8 loeschen
 
if( bit7 ) // Wert negativ?
{
vu = vu - 1; // Umrechnung: 7-Bit Zweierkomplement
vu = (vu ^ 0xff); // invertieren
vu = (vu & (0x80 ^ 0xff)); // Bit 8 loeschen
v = (int)vu;
v = v * -1;
}
else // Wert ist positiv
{
v = (int)vu;
}
 
 
//-----------------------
// nur Rueckgabe des Wertes in mkparam_strValueBuffer ?
//-----------------------
if( cmd != MKPARAM_EDIT )
{
xsnprintf_P( mkparam_strValueBuffer, MKPARAM_STRBUFFER_LEN, PSTR("%3d"), v ); // erzeuge den Ausgabestring in mkparam_strValueBuffer
return;
}
 
 
//-----------------------
// Wert Editieren
//-----------------------
lcd_cls();
 
redraw = SCREEN_REDRAW;
 
while( true )
{
//-----------------------
// Anzeige: Titel, usw..
//-----------------------
if( redraw == SCREEN_REDRAW )
{
lcd_frect( 0, 0, 127, 7, 1); // Headline: Box fill
lcdx_printp_at( 1, 0, PSTR("Ändern") , MINVERS, 0,0); // Titel
lcd_printp_at( 0, 7, strGet(KEYLINE2) , MNORMAL); // Keyline: <- -> Ende OK
lcd_printp_at( 11, 7, strGet(KEYCANCEL), MNORMAL); // Keyline: "Abbr." statt "Ende" einsetzen
 
print_paramEditItemTitle(); // Bezeichnung des paramID's anzeigen
 
redraw = SCREEN_REFRESH;
}
 
 
//---------------
// LiPo Anzeigen
//---------------
show_Lipo(); // LiPo anzeigen
 
 
//-----------------------
// Anzeige: Wert
//-----------------------
if( redraw == SCREEN_REFRESH )
{
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("> %3d"), v );
redraw = false;
}
 
 
//-----------------
// TASTEN
//-----------------
if( get_key_short(1 << KEY_ESC) ) // Key: Cancel
{
break; // verlassen
}
 
if( get_key_short(1 << KEY_ENTER) ) // Key: OK
{
//-------------------------------------
// signed int in unsigned byte wandeln
//-------------------------------------
if( v < 0 ) // Wert negativ?
{
// Umwandeln in 7-Bit Zweierkomplement
v = v * -1; // Wert positiv machen
vu = (unsigned char)v; // in unsigned Byte speichern
vu = (vu ^ 0xff); // invertieren
vu = vu + 1; // +1
}
else // Wert ist positiv
{
vu = (unsigned char)v; // in unsigned Byte speichern
}
 
//-------------------------------------
// "Disable declination calc" wieder einrechnen
//-------------------------------------
bit7 = ((vu & 0x40) ? true : false); // Bit 7: 1 = negativ; 0 = positiv
 
if( lDisDeclCalc ) bit8 = !bit7; // Bit 8 != Bit 7: "Disable dec. Calc" AN
else bit8 = bit7; // Bit 8 == Bit 7: "Disable dec. Calc" AUS
 
if( bit8 ) vu = (vu | 0x80); // Bit 8 setzen
else vu = (vu & (0x80 ^ 0xff)); // Bit 8 loeschen
 
//-------------------------------------
// Wert speichern
//-------------------------------------
paramSet( paramID, vu ); // Wert speichern
break; // und verlassen
} // end: KEY_ENTER
 
 
if( get_key_short(1 << KEY_MINUS) || get_key_long_rpt_sp( (1 << KEY_MINUS),2) )
{
if( v <= -60 ) v = 60;
else v = v - 1;
redraw = SCREEN_REFRESH;
}
 
 
if( get_key_short(1 << KEY_PLUS) || get_key_long_rpt_sp( (1 << KEY_PLUS),2) )
{
if( v >= 60 ) v = -60;
else v = v + 1;
redraw = SCREEN_REFRESH;
}
 
//------------------------------------------
// evtl. weitere lange Tasten abfangen, da es
// ansonsten ggf. Nebeneffekte bzgl. dem Menue
// beim verlassen der Funktion gibt
//------------------------------------------
get_key_long_rpt_sp( KEY_ALL,2);
 
 
//------------------------------------------
// Pruefe PKT-Update oder andere PKT-Aktion
//------------------------------------------
if( PKT_CtrlHook() ) // Update vom Updatetool angefordert?
{
lcd_cls();
redraw = SCREEN_REDRAW;
}
 
} // end: while( true )
}
 
//--------------------------------------------------------------
void editACCZLandingPulse( unsigned char paramID, uint8_t cmd )
{
unsigned char vu; // unsigned byte
// int v; // signed
uint8_t redraw;
// uint8_t bit7;
// uint8_t bit8;
// uint8_t lDisDeclCalc;
 
find_paramEditItem( paramID );
 
//-----------------------
// editACCZLandingPulse() - FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden
//-----------------------
if( paramEditItem.paramID == param_EOF )
{
// TODO: Fehlercode anpassen!
_error( E12_PARAMID_EDITBITMASK, paramID, (cmd==MKPARAM_EDIT) );
return;
}
 
vu = paramGet( paramID );
 
//-----------------------
// nur Rueckgabe des Wertes in mkparam_strValueBuffer ?
//-----------------------
if( cmd != MKPARAM_EDIT )
{
xsnprintf_P( mkparam_strValueBuffer, MKPARAM_STRBUFFER_LEN, PSTR("%4d"), vu*4 ); // erzeuge den Ausgabestring in mkparam_strValueBuffer
return;
}
 
 
//-----------------------
// Wert Editieren
//-----------------------
lcd_cls();
 
redraw = SCREEN_REDRAW;
 
while( true )
{
//-----------------------
// Anzeige: Titel, usw..
//-----------------------
if( redraw == SCREEN_REDRAW )
{
lcd_frect( 0, 0, 127, 7, 1); // Headline: Box fill
lcdx_printp_at( 1, 0, PSTR("Ändern") , MINVERS, 0,0); // Titel
lcd_printp_at( 0, 7, strGet(KEYLINE2) , MNORMAL); // Keyline: <- -> Ende OK
lcd_printp_at( 11, 7, strGet(KEYCANCEL), MNORMAL); // Keyline: "Abbr." statt "Ende" einsetzen
 
print_paramEditItemTitle(); // Bezeichnung des paramID's anzeigen
 
redraw = SCREEN_REFRESH;
}
 
 
//---------------
// LiPo Anzeigen
//---------------
show_Lipo(); // LiPo anzeigen
 
 
//-----------------------
// Anzeige: Wert
//-----------------------
if( redraw == SCREEN_REFRESH )
{
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("> %4d"), vu *4 );
redraw = false;
}
 
 
//-----------------
// TASTEN
//-----------------
if( get_key_short(1 << KEY_ESC) ) // Key: Cancel
{
break; // verlassen
}
 
if( get_key_short(1 << KEY_ENTER) ) // Key: OK
{
// //-------------------------------------
// // signed int in unsigned byte wandeln
// //-------------------------------------
// if( v < 0 ) // Wert negativ?
// {
// // Umwandeln in 7-Bit Zweierkomplement
// v = v * -1; // Wert positiv machen
// vu = (unsigned char)v; // in unsigned Byte speichern
// vu = (vu ^ 0xff); // invertieren
// vu = vu + 1; // +1
// }
// else // Wert ist positiv
// {
// vu = (unsigned char)v; // in unsigned Byte speichern
// }
//
// //-------------------------------------
// // "Disable declination calc" wieder einrechnen
// //-------------------------------------
// bit7 = ((vu & 0x40) ? true : false); // Bit 7: 1 = negativ; 0 = positiv
//
// if( lDisDeclCalc ) bit8 = !bit7; // Bit 8 != Bit 7: "Disable dec. Calc" AN
// else bit8 = bit7; // Bit 8 == Bit 7: "Disable dec. Calc" AUS
//
// if( bit8 ) vu = (vu | 0x80); // Bit 8 setzen
// else vu = (vu & (0x80 ^ 0xff)); // Bit 8 loeschen
 
//-------------------------------------
// Wert speichern
//-------------------------------------
paramSet( paramID, vu ); // Wert speichern
break; // und verlassen
} // end: KEY_ENTER
 
 
if( get_key_short(1 << KEY_MINUS) || get_key_long_rpt_sp( (1 << KEY_MINUS),2) )
{
// if( v <= -60 ) v = 60;
// else v = v - 1;
//
if( vu < 191 ) vu = 190;
else vu = vu -1;
 
redraw = SCREEN_REFRESH;
}
 
 
if( get_key_short(1 << KEY_PLUS) || get_key_long_rpt_sp( (1 << KEY_PLUS),2) )
{
// if( v >= 60 ) v = -60;
// else v = v + 1;
if( vu >= 255 ) vu = 255;
// if( vu == 1 ) vu = 191;
else vu = vu +1;
redraw = SCREEN_REFRESH;
}
 
//------------------------------------------
// evtl. weitere lange Tasten abfangen, da es
// ansonsten ggf. Nebeneffekte bzgl. dem Menue
// beim verlassen der Funktion gibt
//------------------------------------------
get_key_long_rpt_sp( KEY_ALL,2);
 
 
//------------------------------------------
// Pruefe PKT-Update oder andere PKT-Aktion
//------------------------------------------
if( PKT_CtrlHook() ) // Update vom Updatetool angefordert?
{
lcd_cls();
redraw = SCREEN_REDRAW;
}
 
} // end: while( true )
}
 
//--------------------------------------------------------------
 
 
//--------------------------------------------------------------
// editNA( paramID, cmd )
//
// Hilfsfunktion die nur "nicht verfügbar" anzeigt wenn die
// paramID noch nicht implementiert ist
//
// PARAMETER:
// paramID: die paramID
// cmd: MKPARAM_EDIT oder MKPARAM_SHORTVALUE oder MKPARAM_LONGVALUE
//--------------------------------------------------------------
void editNA( unsigned char paramID, uint8_t cmd )
{
if( cmd != MKPARAM_EDIT )
{
strncpy_P( mkparam_strValueBuffer, PSTR("NA!"), MKPARAM_STRBUFFER_LEN); // "NA!" bzw, "not available"
return;
}
 
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( PSTR("nicht verfügbar"), false, 2000, true, true ); // "nicht verfügbar"
}
 
 
 
 
//#############################################################################################
//# TEST / DEBUG
//#############################################################################################
 
//--------------------------------------------------------------
//--------------------------------------------------------------
void editGenericTEST( unsigned char paramID )
{
lcd_cls();
 
//lcdx_printp_at( 0, 0, PSTR("NEW PARAM TEST..."), MNORMAL, 0,0);
lcd_printp_at(12, 7, strGet(ENDE), MNORMAL); // Keyline
 
find_paramEditItem( paramID ); // Ergebnis in paramEditItem (RAM)
 
if( paramEditItem.paramID == paramID )
{
lcd_printf_at_P( 0, 1, MNORMAL, PSTR("%S"), paramEditItem.title_de );
 
lcd_printf_at_P( 0, 2, MNORMAL, PSTR("format: %s"), paramEditFormat );
 
lcd_printf_at_P( 0, 3, MNORMAL, PSTR("value:%u"), paramGet(paramID) );
 
strValueGeneric( paramID, MKPARAM_LONGVALUE);
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("vstr: %s"), mkparam_strValueBuffer );
 
strValueGeneric( paramID, MKPARAM_SHORTVALUE);
lcd_printf_at_P( 0, 5, MNORMAL, PSTR("vstr: %s"), mkparam_strValueBuffer );
}
 
 
if( paramEditItem.paramID == param_EOF )
{
lcd_printf_at_P( 0, 5, MNORMAL, PSTR("! ERROR !") );
}
 
 
//-----------------------------------------
// Tasten...
while( true )
{
PKT_CtrlHook();
if (get_key_press (1 << KEY_ESC))
{
break;
}
}
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
void TEST(void)
{
//editGeneric( param_Gyro_Gier_P, MKPARAM_EDIT );
editGeneric( param_Kanalbelegung_Gas, MKPARAM_EDIT );
}
 
 
 
 
//#############################################################################################
//# Menues & Favoriten
//#############################################################################################
 
 
//--------------------------------------------------------------
// fav_add()
//
// einen Favoriten hinzufuegen
//
// Aufruf durch: wird durch den Menu-Controller aufgerufen
//--------------------------------------------------------------
void fav_add( void )
{
uint8_t paramID;
uint8_t i;
 
 
//------------------------------
// welche paramID wurde gewaehlt?
//------------------------------
paramID = MenuCtrl_GetItemId(); // gewaehlter Menuepunkt bzw. paramID (0 = keine itemID)
 
 
//------------------------------
// ungueltige paramID?
//------------------------------
if( paramID==0 || paramID==EOF )
{
return; // keine gueltige paramID gewaehlt -> ZURUECK
}
 
 
//------------------------------
// Duplikatsuche bzgl. paramID
// (gilt nicht fuer SEPARATOR)
//------------------------------
if( paramID!=SEPARATOR )
{
//------------------------------
// suche Duplikate fuer paramID
//------------------------------
for( i=0; (i<MAX_MKPARAM_FAVORITES) && (Config.MKParam_Favs[i]!=paramID); i++);
 
//------------------------------
// Favoriten bereits vorhanden?
// -> exit
//------------------------------
if( Config.MKParam_Favs[i] == paramID )
{
set_beep( 300, 0x000f, BeepNormal); // Error Beep kurz
PKT_Popup_P( 400, strGet(STR_FAV_EXIST),0,0,0); // "* Fav vorhanden *" (ca. 4 sec max.)
return;
}
} // end: if( paramID!=SEPARATOR )
 
 
//------------------------------
// suche freien Speicherplatz fuer paramID
//------------------------------
for( i=0; (i<MAX_MKPARAM_FAVORITES) && (Config.MKParam_Favs[i]!=0); i++);
 
//------------------------------
// Favoriten voll?
// -> exit
//------------------------------
if( i >= MAX_MKPARAM_FAVORITES )
{
set_beep( 500, 0x000f, BeepNormal); // Error Beep lang
PKT_Popup_P( 400, strGet(STR_FAV_FULL),0,0,0); // "* Fav ist voll *" (ca. 4 sec max.)
return;
}
 
//------------------------------
// neuen Fav merken
//------------------------------
Config.MKParam_Favs[i] = paramID;
set_beep( 25, 0xffff, BeepNormal ); // kurzer Bestaetigungs-Beep
PKT_Popup_P( 400, strGet(STR_FAV_ADD),0,0,0); // "Fav hinzugefügt!" (ca. 4 sec max.)
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
void Menu_Favoriten( void )
{
uint8_t paramID;
uint8_t i;
 
//unsigned char MKParam_Favs[MAX_MKPARAM_FAVORITES]; // Array von MK-Parameter Favoriten des Benutzers
 
if( Config.MKParam_Favs[0] == 0 ) // Favoriten vorhanden
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(STR_FAV_NOTEXIST), false, 500, true, true ); // Anzeige "nicht verfügbar" (max. 2 Sekunden anzeigen)
return;
}
 
 
//---------------
// Create
//---------------
MenuCtrl_Create();
MenuCtrl_SetTitleFromParentItem(); // uebernimmt den Titel vom uebergeordneten Menuepunkt
MenuCtrl_ShowLevel( false );
MenuCtrl_SetDelete( true ); // Menueeintraege loeschen (langer Druck auf "OK")
MenuCtrl_SetMove( true ); // Menueeintraege verschieben (langer Druck auf hoch/runter)
//MenuCtrl_SetShowBatt( true );
//MenuCtrl_SetCycle( false );
//MenuCtrl_SetBeep( true );
 
 
//---------------
// Menu-Items
//---------------
i = 0;
while( (i<MAX_MKPARAM_FAVORITES) && (Config.MKParam_Favs[i]!=0) )
{
paramID = Config.MKParam_Favs[i];
 
if( paramID == SEPARATOR )
{
MenuCtrl_PushSeparatorID( SEPARATOR ); // Trennlinie im Menue hinzufuegen
}
else
{
find_paramEditItem( paramID );
 
//--------
// FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden - Menu_EditCategory()
//--------
if( paramEditItem.paramID == param_EOF )
{
_error( E01_PARAMID_MENUEDITCATEGORY, paramID, true);
MenuCtrl_Destroy();
return;
}
 
MenuCtrl_PushParamEdit( paramID );
 
// existiert die paramID in der Firmware des Kopters?
if( !paramExist(paramID) )
{
MenuCtrl_ItemActive( paramID, false ); // paramID deaktivieren
}
 
// DEBUG! (Simulation eines deaktivierten Fav's)
// if( i==2 ) MenuCtrl_ItemActive( paramID, false ); // paramID deaktivieren
 
} // end: else: if( paramID == SEPARATOR )
 
i++;
} // end: while(..)
 
 
 
//---------------
// Control
//---------------
while( true )
{
MenuCtrl_Control( MENUCTRL_EVENT );
if( MenuCtrl_GetKey() == KEY_ESC ) break; // KEY_ESC = Menue beenden
 
paramID = MenuCtrl_GetItemId(); // welcher Menu-Punkt (= paramID)
 
find_paramEditItem( paramID ); // Edit-Definitionen heraussuchen (initialisiert: paramEditItem)
 
paramEditItem.editfunc( paramID, MKPARAM_EDIT ); // zugeordnete Edit-Funktion aufrufen
}
 
 
//---------------
// ggf. neue Menuereihenfolge
// in der Config speichern
//---------------
for( i=0; (i<MAX_MKPARAM_FAVORITES); i++)
{
Config.MKParam_Favs[i] = MenuCtrl_GetItemIdByIndex( i );
}
 
 
//---------------
// Destroy
//---------------
MenuCtrl_Destroy();
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
void Menu_EditCategory( const unsigned char *menuitems )
{
unsigned char paramID;
unsigned char lastmenuitem = 0;
 
//---------------
// Create
//---------------
MenuCtrl_Create();
 
//---------------
// Einstellungen
//---------------
MenuCtrl_SetTitleFromParentItem(); // uebernimmt den Titel vom uebergeordneten Menuepunkt
MenuCtrl_ShowLevel( false );
//MenuCtrl_SetShowBatt( true );
//MenuCtrl_SetCycle( false );
//MenuCtrl_SetBeep( true );
 
//MenuCtrl_SetKey( uint8_t key, const char *keytext, void (*keyfunc)(void) )
MenuCtrl_SetKey( KEY_ENTER_LONG, 0, &fav_add );
 
 
//---------------
// Menuitems
//---------------
while( *menuitems != EOF )
{
paramID = *menuitems;
 
if( paramID == SEPARATOR )
{
// wenn der vorherige Menueeintrag bereits ein SEPARATOR war
// dann nicht erneut einen Separator anzeigen!
//
// Das kann ggf. passieren wenn z.B. aufgrund der FC-Revision
// alle Zwischeneintraege ausgeblendet wurden
if( lastmenuitem != SEPARATOR )
{
MenuCtrl_PushSeparatorID( SEPARATOR ); // Trennlinie im Menue hinzufuegen
lastmenuitem = paramID;
}
}
else
{
//------------------------------------------------------
// TEST / DEBUG fuer beschriebenes Problem in _error()
//
// Wenn man das dortige Problem nachstellen will kann
// man hier einen Fehlerscreen provozieren!
//------------------------------------------------------
//paramID = 0;
 
 
find_paramEditItem( paramID );
 
//--------
// FEHLER: paramEditItem (=paramID) nicht in Tabelle paramEditItemTable gefunden - Menu_EditCategory()
//--------
if( paramEditItem.paramID == param_EOF )
{
_error( E01_PARAMID_MENUEDITCATEGORY, paramID, true);
MenuCtrl_Destroy();
return;
}
 
// existiert die paramID in der Firmware des Kopters?
if( paramExist(paramEditItem.paramID) )
{
MenuCtrl_PushParamEdit( paramEditItem.paramID );
lastmenuitem = paramID;
}
}
 
menuitems++;
}
 
 
//---------------
// Control
//---------------
while( true )
{
MenuCtrl_Control( MENUCTRL_EVENT );
if( MenuCtrl_GetKey() == KEY_ESC ) break; // Menue beenden
 
paramID = MenuCtrl_GetItemId(); // welcher Menu-Punkt (= paramID)
 
find_paramEditItem( paramID ); // Edit-Definitionen heraussuchen (initialisiert: paramEditItem)
 
paramEditItem.editfunc( paramID, MKPARAM_EDIT ); // zugeordnete Edit-Funktion aufrufen
}
 
//---------------
// Destroy
//---------------
MenuCtrl_Destroy();
}
 
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
void MK_Parameters_MenuMain( uint8_t setting, char *settingname )
{
uint8_t itemid;
 
//---------------
// Create
//---------------
MenuCtrl_Create();
 
//---------------
// Einstellungen
//---------------
MenuCtrl_SetTitle( settingname );
MenuCtrl_ShowLevel( false );
//MenuCtrl_SetShowBatt( true );
//MenuCtrl_SetCycle( false );
//MenuCtrl_SetBeep( true );
 
//---------------
// Menuitems
//---------------
//MenuCtrl_PushML2_P( ID_MENU_TEST , MENU_ITEM, &TEST, ID_MENU_TEST_de , ID_MENU_TEST_en );
 
MenuCtrl_PushML2_P( ID_MENU_FAVORITEN , MENU_ITEM, NOFUNC, ID_MENU_FAVORITEN_de , ID_MENU_FAVORITEN_en ); // Favoriten: noch nicht implementiert...
 
MenuCtrl_PushSeparator(); // MENUE TRENNLINIE
 
MenuCtrl_PushML2_P( ID_MENU_KANAELE , MENU_ITEM, NOFUNC, ID_MENU_KANAELE_de , ID_MENU_KANAELE_en );
MenuCtrl_PushML2_P( ID_MENU_KONFIGURATION, MENU_ITEM, NOFUNC, ID_MENU_KONFIGURATION_de, ID_MENU_KONFIGURATION_en );
MenuCtrl_PushML2_P( ID_MENU_STICK , MENU_ITEM, NOFUNC, ID_MENU_STICK_de , ID_MENU_STICK_en );
MenuCtrl_PushML2_P( ID_MENU_LOOPING , MENU_ITEM, NOFUNC, ID_MENU_LOOPING_de , ID_MENU_LOOPING_en );
MenuCtrl_PushML2_P( ID_MENU_HOEHE , MENU_ITEM, NOFUNC, ID_MENU_HOEHE_de , ID_MENU_HOEHE_en );
MenuCtrl_PushML2_P( ID_MENU_KAMERA , MENU_ITEM, NOFUNC, ID_MENU_KAMERA_de , ID_MENU_KAMERA_en );
MenuCtrl_PushML2_P( ID_MENU_NAVICTRL , MENU_ITEM, NOFUNC, ID_MENU_NAVICTRL_de , ID_MENU_NAVICTRL_en );
MenuCtrl_PushML2_P( ID_MENU_AUSGAENGE , MENU_ITEM, NOFUNC, ID_MENU_AUSGAENGE_de , ID_MENU_AUSGAENGE_en );
MenuCtrl_PushML2_P( ID_MENU_VERSCHIEDENES, MENU_ITEM, NOFUNC, ID_MENU_VERSCHIEDENES_de, ID_MENU_VERSCHIEDENES_en );
MenuCtrl_PushML2_P( ID_MENU_GYRO , MENU_ITEM, NOFUNC, ID_MENU_GYRO_de , ID_MENU_GYRO_en );
MenuCtrl_PushML2_P( ID_MENU_BENUTZER , MENU_ITEM, NOFUNC, ID_MENU_BENUTZER_de , ID_MENU_BENUTZER_en );
MenuCtrl_PushML2_P( ID_MENU_ACHSKOPPLUNG , MENU_ITEM, NOFUNC, ID_MENU_ACHSKOPPLUNG_de , ID_MENU_ACHSKOPPLUNG_en );
//MenuCtrl_PushML2_P( ID_MENU_MIXERSETUP , MENU_ITEM, NOFUNC, ID_MENU_MIXERSETUP_de , ID_MENU_MIXERSETUP_en ); // nicht mehr unterstuetzt!
MenuCtrl_PushML2_P( ID_MENU_EASYSETUP , MENU_ITEM, NOFUNC, ID_MENU_EASYSETUP_de , ID_MENU_EASYSETUP_en );
 
 
//---------------
// Control
//---------------
while( true )
{
MenuCtrl_Control( MENUCTRL_EVENT );
if( MenuCtrl_GetKey() == KEY_ESC ) break;
 
itemid = MenuCtrl_GetItemId(); // welcher Menu-Punkt (ID)
 
switch( itemid )
{
case ID_MENU_FAVORITEN: Menu_Favoriten(); break;
 
case ID_MENU_KANAELE: Menu_EditCategory( ID_MENU_KANAELE_Items ); break;
case ID_MENU_KONFIGURATION: Menu_EditCategory( ID_MENU_KONFIGURATION_Items ); break;
case ID_MENU_STICK: Menu_EditCategory( ID_MENU_STICK_Items ); break;
case ID_MENU_LOOPING: Menu_EditCategory( ID_MENU_LOOPING_Items ); break;
case ID_MENU_HOEHE: Menu_EditCategory( ID_MENU_HOEHE_Items ); break;
case ID_MENU_KAMERA: Menu_EditCategory( ID_MENU_KAMERA_Items ); break;
case ID_MENU_NAVICTRL: Menu_EditCategory( ID_MENU_NAVICTRL_Items ); break;
case ID_MENU_AUSGAENGE: Menu_EditCategory( ID_MENU_AUSGAENGE_Items ); break;
case ID_MENU_VERSCHIEDENES: Menu_EditCategory( ID_MENU_VERSCHIEDENES_Items ); break;
case ID_MENU_GYRO: Menu_EditCategory( ID_MENU_GYRO_Items ); break;
case ID_MENU_BENUTZER: Menu_EditCategory( ID_MENU_BENUTZER_Items ); break;
case ID_MENU_ACHSKOPPLUNG: Menu_EditCategory( ID_MENU_ACHSKOPPLUNG_Items ); break;
case ID_MENU_EASYSETUP: Menu_EditCategory( ID_MENU_EASYSETUP_Items ); break;
 
default: //PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( PSTR("nicht verfügbar"), false, 200, true, true ); // Anzeige "nicht verfügbar" (max. 2 Sekunden anzeigen)
break;
}
}
 
 
//---------------
// Destroy
//---------------
MenuCtrl_Destroy();
}
 
 
 
 
 
//#############################################################################################
//# MK_Parameters() - Main-Function
//#############################################################################################
 
//--------------------------------------------------------------
// changed = MK_Parameters( setting, settingname )
//--------------------------------------------------------------
uint8_t MK_Parameters( uint8_t setting, char *settingname )
{
int changed;
unsigned char *org_parameters;
uint8_t size = paramsetSize();
 
//-----------------------------------------------------------------
// Erkennung ob Aenderungen durch den Benutzer vorgenommen wurde
// -> das aktuelle Paramset wird gespeichert um es spaeter mit
// der bearbeiteten Version via memcmp zu vergleichen
//-----------------------------------------------------------------
org_parameters = malloc( size+1 ); // +1 fuer das erste settings-byte
 
if( !org_parameters )
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( PSTR("NO RAM!"), true, 800, true, true ); // FEHLER! (NO RAM)
return false;
}
memcpy( org_parameters, (unsigned char *)(pRxData), size+1 ); // memcpy( dst, src, size))
 
 
//-----------------------------------------------------------------
// MK-Parameter bearbeiten
//-----------------------------------------------------------------
MK_Parameters_MenuMain( setting, settingname );
 
 
//-----------------------------------------------------------------
// Vergleich: Orginal-Daten <-> ggf. geaenderte Daten
//-----------------------------------------------------------------
changed = memcmp( org_parameters, (unsigned char *)(pRxData), size+1 );
 
free( org_parameters );
 
return( changed!=0 );
}
 
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/Transportables_Koptertool/PKT/trunk/mksettings/mkparameters.h
0,0 → 1,95
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* Copyright (C) 2012 Christian "Cebra" Brandtner, brandtner@brandtner.net *
* Copyright (C) 2012 Harald Bongartz *
* *
* 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. *
* *
* *
* Credits to: *
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN *
* http://www.mikrokopter.de *
* Gregor "killagreg" Stobrawa for his version of the MK code *
* Thomas Kaiser "thkais" for the original project. See *
* http://www.ft-fanpage.de/mikrokopter/ *
* http://forum.mikrokopter.de/topic-4061-1.html *
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
* http://www.mylifesucks.de/oss/c-osd/ *
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
*****************************************************************************/
 
//############################################################################
//# HISTORY mkparameters.h
//#
//# 27.03.2014 OG
//# etliche neue Funktionen / Strukturen
//#
//# 23.02.2014 OG
//# - chg: MK_Parameters_Menu() umbenannt zu MK_Parameters()
//#
//# 12.02.2014 OG - NEU
//############################################################################
 
#ifndef _MKPARAMETERS_H
#define _MKPARAMETERS_H
 
 
// fuer cmd-Parameter der Edit-Funktionen
#define MKPARAM_EDIT 1 // Wert bearbeiten
#define MKPARAM_SHORTVALUE 2 // erzeugt einen 3-Zeichen String der den Wert darstellt (z.B. "Dis"); Ergebnis in strValueBuffer
#define MKPARAM_LONGVALUE 3 // erzeugt einen String der den Wert in langer Form darstellt (z.B. "Disabled"); Ergebnis in strValueBuffer
 
 
#define MKPARAM_STRBUFFER_LEN 20
 
 
//--------------------------------------------
// paramEditItem_t
// deklariert die Edit-Daten einer paramID
//--------------------------------------------
typedef struct
{
unsigned char paramID; // paramID aus paramset.h
void (*editfunc)(unsigned char paramID, uint8_t cmd); // Edit-Funktion (z.B. editGeneric()); cmd = CMD_EDIT oder CMD_SHORTVALUE
const char *format; // Parameter: String (PROGMEM) (vorallem fuer editGeneric() )
unsigned char min; // Parameter: min (P1)
unsigned char max; // Parameter: max (P2)
const char *title_de; // Text in PROGMEM - Menuetext und Beschreibung im Edit-Screen
const char *title_en; // Text in PROGMEM
} paramEditItem_t;
 
 
 
extern paramEditItem_t paramEditItem; // RAM Buffer: fuer ein Element von paramEditDef
extern char paramEditFormat[MKPARAM_STRBUFFER_LEN]; // RAM Buffer: fuer 'str' von paramEdit (Format; editGeneric)
extern char mkparam_strValueBuffer[MKPARAM_STRBUFFER_LEN]; // Anzeige eines Values als Klartext; Kurz (fuer das Menue) oder Lang (in der Edit-Funktion)
 
 
//---------------------------
// exportierte Funktionen
//---------------------------
unsigned char find_paramEditItem( unsigned char paramID );
void editGeneric( unsigned char paramID, uint8_t cmd );
void editBitmask( unsigned char paramID, uint8_t cmd );
void editDisableDeclCalc( unsigned char paramID, uint8_t cmd );
void editCompassOffset( unsigned char paramID, uint8_t cmd );
void editACCZLandingPulse( unsigned char paramID, uint8_t cmd );
void editNA( unsigned char paramID, uint8_t cmd );
 
uint8_t MK_Parameters( uint8_t setting, char *settingname );
 
 
#endif // _MKPARAMETERS_H
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/Transportables_Koptertool/PKT/trunk/mksettings/mkparameters_messages.h
0,0 → 1,618
/*****************************************************************************
*****************************************************************************/
 
//############################################################################
//# HISTORY mkparameters_messages.h
//#
//# 16.07.2015 Cebra
//# - add: Texte für neue Parameter in FC 2.11a inkl. der ID's
//# const char param_singleWpControlChannel_de
//# const char param_MenuKeyChannel_de
//#
//# 09.04.2015 Cebra
//# - add: Texte für neue Parameter in FC 2.09j
//# const char param_ServoNickFails_de[],const char param_ServoRollFails_de[], const char param_Servo3Fails_de[],
//# const char param_Servo4Fails_de[], const char param_Servo5Fails_de[]
//#
//# 26.09.2014 Cebra
//# - add: Text Höhe Tilt Compensation (FC207f)
//#
//# 04.06.2014 OG
//# - chg: Text von ID_MENU_FAVORITEN etwas gekuerzt
//#
//# 07.05.2014 OG
//# - chg: ID_MENU_FAVORITEN_en
//#
//# 18.04.2014 OG
//# - chg: Textanpassung: param_NaviGpsMinSat_de, param_NaviStickThreshold_de
//#
//# 17.04.2014 OG
//# - add: param_Servo3OnValue, param_Servo3OffValue, param_Servo4OnValue
//# param_Servo4OffValue
//# - add: param_NaviMaxFlyingRange, param_NaviDescendRange
//# - chg: Textanpassung: param_WARN_J16_Bitmask_de, param_WARN_J17_Bitmask_de
//# - chg: Textanpassung: param_J16Bitmask, param_J16Timing
//# - chg: Textanpassung: param_J17Bitmask, param_J17Timing
//# - chg: Textanpassung: param_SingleWpSpeed_de
//# - chg: Textanpassung: param_ServoNickRefresh_de, param_ServoManualControlSpeed_de
//# - chg: Textanpassung: param_ServoRollControl_de
//#
//# 07.04.2014 OG
//# - chg: kleine Aenderungen an englischen Texten
//#
//# 06.04.2014 CB
//# - add: englische Menütexte ergänzt
//#
//# 30.03.2014 OG
//# - chg: Sprache Hollaendisch vollstaendig entfernt
//#
//# 28.03.2014 OG
//# - add: paramID-Texte fuer Rev. 100
//# (param_AutoPhotoDistance, param_AutoPhotoAtitudes, param_SingleWpSpeed)
//#
//# 16.03.2014 OG
//# erste groesstenteils fertige Version
//#
//# 23.02.2014 OG - NEU
//############################################################################
 
#ifndef _MKPARAMETERS_MESSAGES_H
#define _MKPARAMETERS_MESSAGES_H
 
 
//#############################################################################################
//# Texte: Menues von mkparameters
//#############################################################################################
 
static const char ID_MENU_TEST_de[] PROGMEM = "TEST/DEBUG";
#define ID_MENU_TEST_en ID_MENU_TEST_de
 
static const char ID_MENU_FAVORITEN_de[] PROGMEM = "Favoriten";
static const char ID_MENU_FAVORITEN_en[] PROGMEM = "Favorites";
 
static const char ID_MENU_KANAELE_de[] PROGMEM = "Kanäle";
static const char ID_MENU_KANAELE_en[] PROGMEM = "Channel";
 
static const char ID_MENU_KONFIGURATION_de[] PROGMEM = "Konfiguration";
static const char ID_MENU_KONFIGURATION_en[] PROGMEM = "Configuration";
 
static const char ID_MENU_STICK_de[] PROGMEM = "Stick";
#define ID_MENU_STICK_en ID_MENU_STICK_de
 
static const char ID_MENU_LOOPING_de[] PROGMEM = "Looping";
#define ID_MENU_LOOPING_en ID_MENU_LOOPING_de
 
static const char ID_MENU_HOEHE_de[] PROGMEM = "Höhe";
static const char ID_MENU_HOEHE_en[] PROGMEM = "Altitude";
 
static const char ID_MENU_KAMERA_de[] PROGMEM = "Kamera";
static const char ID_MENU_KAMERA_en[] PROGMEM = "Camera";
 
static const char ID_MENU_NAVICTRL_de[] PROGMEM = "Navi-Ctrl";
#define ID_MENU_NAVICTRL_en ID_MENU_NAVICTRL_de
 
static const char ID_MENU_AUSGAENGE_de[] PROGMEM = "Ausgänge";
static const char ID_MENU_AUSGAENGE_en[] PROGMEM = "Outputs";
 
static const char ID_MENU_VERSCHIEDENES_de[] PROGMEM = "Verschiedenes";
static const char ID_MENU_VERSCHIEDENES_en[] PROGMEM = "Miscellaneous";
 
static const char ID_MENU_GYRO_de[] PROGMEM = "Gyro";
#define ID_MENU_GYRO_en ID_MENU_GYRO_de
 
static const char ID_MENU_BENUTZER_de[] PROGMEM = "Benutzer";
static const char ID_MENU_BENUTZER_en[] PROGMEM = "User";
 
static const char ID_MENU_ACHSKOPPLUNG_de[] PROGMEM = "Achskopplung";
static const char ID_MENU_ACHSKOPPLUNG_en[] PROGMEM = "Coupl Axes";
 
/*
static const char ID_MENU_MIXERSETUP_de[] PROGMEM = "Mixer-Setup";
static const char ID_MENU_MIXERSETUP_en[] PROGMEM = "Config Mix";
*/
 
static const char ID_MENU_EASYSETUP_de[] PROGMEM = "Easy Setup";
#define ID_MENU_EASYSETUP_en ID_MENU_EASYSETUP_de
 
 
 
//#############################################################################################
//# Bezeichnungen der paramID's
//#############################################################################################
 
// Hier ist erstmal alles deklariert was auch in paramset.h vorhanden ist.
// Wenn der Compiler richtig eingestellt ist, dann wird alles nicht benoetigte wegoptimiert!
 
static const char param_Hoehe_MinGas_de[] PROGMEM = "Min. Gas";
static const char param_Hoehe_MinGas_en[] PROGMEM = "min. throttle";
 
static const char param_Luftdruck_D_de[] PROGMEM = "Luftdruck D";
static const char param_Luftdruck_D_en[] PROGMEM = "barometric D";
 
static const char param_HoeheChannel_de[] PROGMEM = "Höhe Sollwert";
static const char param_HoeheChannel_en[] PROGMEM = "hight setpoint";
 
static const char param_Hoehe_P_de[] PROGMEM = "Höhe P";
static const char param_Hoehe_P_en[] PROGMEM = "altitude P";
 
static const char param_Hoehe_Verstaerkung_de[] PROGMEM = "Verstärk./Rate";
static const char param_Hoehe_Verstaerkung_en[] PROGMEM = "gain rate";
 
static const char param_Hoehe_ACC_Wirkung_de[] PROGMEM = "Z-ACC";
#define param_Hoehe_ACC_Wirkung_en param_Hoehe_ACC_Wirkung_de
 
static const char param_Hoehe_HoverBand_de[] PROGMEM = "Schwebe-Gas";
static const char param_Hoehe_HoverBand_en[] PROGMEM = "hoover throttle";
 
static const char param_Hoehe_GPS_Z_de[] PROGMEM = "GPS Z";
#define param_Hoehe_GPS_Z_en param_Hoehe_GPS_Z_de
 
static const char param_Hoehe_Tilt_Comp_de[] PROGMEM = "Tilt Compensation";
#define param_Hoehe_Tilt_Comp_en param_Hoehe_Tilt_Comp_de
 
static const char param_Hoehe_StickNeutralPoint_de[] PROGMEM = "Stick Neutr.Punkt";
static const char param_Hoehe_StickNeutralPoint_en[] PROGMEM = "stick neutr.point";
 
static const char param_Stick_P_de[] PROGMEM = "Nick/Roll P";
static const char param_Stick_D_de[] PROGMEM = "Nick/Roll D";
static const char param_StickGier_P_de[] PROGMEM = "Gier P";
#define param_Stick_P_en param_Stick_P_de
#define param_Stick_D_en param_Stick_D_de
#define param_StickGier_P_en param_StickGier_P_de
 
 
static const char param_Gas_Min_de[] PROGMEM = "Min. Gas";
static const char param_Gas_Min_en[] PROGMEM = "min. throttle";
 
static const char param_Gas_Max_de[] PROGMEM = "Max. Gas";
static const char param_Gas_Max_en[] PROGMEM = "max. throttle";
 
static const char param_GyroAccFaktor_de[] PROGMEM = "ACC/Gyro Faktor";
#define param_GyroAccFaktor_en param_GyroAccFaktor_de
 
static const char param_KompassWirkung_de[] PROGMEM = "Kompasswirkung";
static const char param_KompassWirkung_en[] PROGMEM = "compass effect";
 
static const char param_Gyro_P_de[] PROGMEM = "Gyro P";
static const char param_Gyro_I_de[] PROGMEM = "Gyro I";
static const char param_Gyro_D_de[] PROGMEM = "Gyro D";
static const char param_Gyro_Gier_P_de[] PROGMEM = "Gier P";
static const char param_Gyro_Gier_I_de[] PROGMEM = "Gier I";
static const char param_Gyro_Stability_de[] PROGMEM = "Gyro stab.";
#define param_Gyro_P_en param_Gyro_P_de
#define param_Gyro_I_en param_Gyro_I_de
#define param_Gyro_D_en param_Gyro_D_de
#define param_Gyro_Gier_P_en param_Gyro_Gier_P_de
#define param_Gyro_Gier_I_en param_Gyro_Gier_I_de
#define param_Gyro_Stability_en param_Gyro_Stability_de
 
static const char param_UnterspannungsWarnung_de[] PROGMEM = "Unterspannung [0.1V]";
static const char param_UnterspannungsWarnung_en[] PROGMEM = "undervoltage [0.1V]";
 
static const char param_NotGas_de[] PROGMEM = "NOT-Gas";
static const char param_NotGas_en[] PROGMEM = "Emerg.Throttle";
 
static const char param_NotGasZeit_de[] PROGMEM = "NOT-Gas Zeit [0.1s]";
static const char param_NotGasZeit_en[] PROGMEM = "Emerg.Thro.Time[0.1s]";
 
static const char param_Receiver_de[] PROGMEM = "Receiver";
#define param_Receiver_en param_Receiver_de
 
static const char param_I_Faktor_de[] PROGMEM = "Hauptregler I";
static const char param_I_Faktor_en[] PROGMEM = "main I";
 
static const char param_UserParam1_de[] PROGMEM = "Parameter 1";
static const char param_UserParam2_de[] PROGMEM = "Parameter 2";
static const char param_UserParam3_de[] PROGMEM = "Parameter 3";
static const char param_UserParam4_de[] PROGMEM = "Parameter 4";
#define param_UserParam1_en param_UserParam1_de
#define param_UserParam2_en param_UserParam2_de
#define param_UserParam3_en param_UserParam3_de
#define param_UserParam4_en param_UserParam4_de
 
static const char param_ServoNickControl_de[] PROGMEM = "Nick Ansteuerung";
static const char param_ServoNickControl_en[] PROGMEM = "nick servo ctrl";
 
static const char param_ServoNickComp_de[] PROGMEM = "Nick Kompensation";
static const char param_ServoNickComp_en[] PROGMEM = "nick servo comp.";
 
static const char param_ServoNickFails_de[] PROGMEM = "Nick Failsave Wert";
static const char param_ServoNickFails_en[] PROGMEM = "nick failsave value";
 
 
static const char param_ServoNickMin_de[] PROGMEM = "Nick Servo Minimum";
static const char param_ServoNickMax_de[] PROGMEM = "Nick Servo Maximum";
#define param_ServoNickMin_en param_ServoNickMin_de
#define param_ServoNickMax_en param_ServoNickMax_de
 
static const char param_ServoRollControl_de[] PROGMEM = "Roll Ansteuerung";
static const char param_ServoRollControl_en[] PROGMEM = "roll servo ctrl.";
 
static const char param_ServoRollComp_de[] PROGMEM = "Roll Kompensation";
static const char param_ServoRollComp_en[] PROGMEM = "roll compensation";
 
static const char param_ServoRollFails_de[] PROGMEM = "Roll Failsave Wert";
static const char param_ServoRollFails_en[] PROGMEM = "roll failsave value";
 
static const char param_ServoRollMin_de[] PROGMEM = "Roll Minimum";
static const char param_ServoRollMax_de[] PROGMEM = "Roll Maximum";
#define param_ServoRollMin_en param_ServoRollMin_de
#define param_ServoRollMax_en param_ServoRollMax_de
 
//static const char param_ServoNickRefresh_de[] PROGMEM = "Anst. Geschw."; // ALT
static const char param_ServoNickRefresh_de[] PROGMEM = "Anst. Geschwindigkeit";
static const char param_ServoNickRefresh_en[] PROGMEM = "servo refresh";
 
static const char param_ServoManualControlSpeed_de[] PROGMEM = "Manu. Geschwindigkeit.";
static const char param_ServoManualControlSpeed_en[] PROGMEM = "manuell Speed";
 
static const char param_CamOrientation_de[] PROGMEM = "Cam Richtung";
static const char param_CamOrientation_en[] PROGMEM = "cam orientation";
 
static const char param_Servo3_de[] PROGMEM = "Servo 3";
#define param_Servo3_en param_Servo3_de
 
static const char param_Servo3Fails_de[] PROGMEM = "Servo 3 Failsave Wert";
static const char param_Servo3Fails_en[] PROGMEM = "Servo 3 failsave value";
 
static const char param_Servo4_de[] PROGMEM = "Servo 4";
#define param_Servo4_en param_Servo4_de
 
static const char param_Servo4Fails_de[] PROGMEM = "Servo 4 Failsave Wert";
static const char param_Servo4Fails_en[] PROGMEM = "Servo 4 failsave value";
 
static const char param_Servo5_de[] PROGMEM = "Servo 5";
#define param_Servo5_en param_Servo5_de
 
static const char param_Servo5Fails_de[] PROGMEM = "Servo 5 Failsave Wert";
static const char param_Servo5Fails_en[] PROGMEM = "Servo 5 failsave value";
 
 
static const char param_Servo3OnValue_de[] PROGMEM = "Servo 3 On Out1/2";
static const char param_Servo3OffValue_de[] PROGMEM = "Servo 3 Off Out1/2";
static const char param_Servo4OnValue_de[] PROGMEM = "Servo 4 On Out1/2";
static const char param_Servo4OffValue_de[] PROGMEM = "Servo 4 Off Out1/2";
#define param_Servo3OnValue_en param_Servo3OnValue_de
#define param_Servo3OffValue_en param_Servo3OffValue_de
#define param_Servo4OnValue_en param_Servo4OnValue_de
#define param_Servo4OffValue_en param_Servo4OffValue_de
 
 
static const char param_LoopGasLimit_de[] PROGMEM = "Looping Gas Limit";
static const char param_LoopGasLimit_en[] PROGMEM = "loop throttle limit";
 
static const char param_LoopThreshold_de[] PROGMEM = "Ansprechschwelle";
static const char param_LoopThreshold_en[] PROGMEM = "response threshold";
 
static const char param_LoopHysterese_de[] PROGMEM = "Hysterese";
static const char param_LoopHysterese_en[] PROGMEM = "hysteresis";
 
static const char param_AchsKopplung1_de[] PROGMEM = "Gier pos. Kopplung";
static const char param_AchsKopplung1_en[] PROGMEM = "gier pos. coupling";
 
static const char param_AchsKopplung2_de[] PROGMEM = "Nick/Roll Kopplung";
static const char param_AchsKopplung2_en[] PROGMEM = "nick/roll coupling";
 
static const char param_CouplingYawCorrection_de[] PROGMEM = "Gier Korrektur";
static const char param_CouplingYawCorrection_en[] PROGMEM = "gier correction";
 
static const char param_WinkelUmschlagNick_de[] PROGMEM = "Nick Umkehrpunkt";
static const char param_WinkelUmschlagNick_en[] PROGMEM = "nick turnover";
 
static const char param_WinkelUmschlagRoll_de[] PROGMEM = "Roll Umkehrpunkt";
static const char param_WinkelUmschlagRoll_en[] PROGMEM = "roll turnover";
 
static const char param_GyroAccAbgleich_de[] PROGMEM = "ACC/Gyro Komp. [1/x]";
static const char param_GyroAccAbgleich_en[] PROGMEM = "ACC/Gyro Comp. [1/x]";
 
static const char param_Driftkomp_de[] PROGMEM = "Drift-Kompensation";
static const char param_Driftkomp_en[] PROGMEM = "drift compensation";
 
static const char param_DynamicStability_de[] PROGMEM = "Dynamische Stabilität";
static const char param_DynamicStability_en[] PROGMEM = "dynamic stabiliy";
 
static const char param_UserParam5_de[] PROGMEM = "Parameter 5";
static const char param_UserParam6_de[] PROGMEM = "Parameter 6";
static const char param_UserParam7_de[] PROGMEM = "Parameter 7";
static const char param_UserParam8_de[] PROGMEM = "Parameter 8";
#define param_UserParam5_en param_UserParam5_de
#define param_UserParam6_en param_UserParam6_de
#define param_UserParam7_en param_UserParam7_de
#define param_UserParam8_en param_UserParam8_de
 
 
static const char param_J16Bitmask_de[] PROGMEM = "Out1: Bitmaske";
static const char param_J16Bitmask_en[] PROGMEM = "Out1: bitmask";
 
static const char param_J16Timing_de[] PROGMEM = "Out1: Timing [10ms]";
#define param_J16Timing_en param_J16Timing_de
 
static const char param_J17Bitmask_de[] PROGMEM = "Out2: Bitmaske";
static const char param_J17Bitmask_en[] PROGMEM = "Out2: bitmask";
 
static const char param_J17Timing_de[] PROGMEM = "Out2: Timing [10ms]";
#define param_J17Timing_en param_J17Timing_de
 
static const char param_WARN_J16_Bitmask_de[] PROGMEM = "Out1 Warn UBat";
static const char param_WARN_J16_Bitmask_en[] PROGMEM = "Out1 undervolt warn";
 
static const char param_WARN_J17_Bitmask_de[] PROGMEM = "Out2 Warn UBat";
static const char param_WARN_J17_Bitmask_en[] PROGMEM = "Out2 undervolt warn";
 
static const char param_AutoPhotoDistance_de[] PROGMEM = "Auto Trigger Dist.[m]"; // ab Rev. 100 (z.B. FC 2.05e)
#define param_AutoPhotoDistance_en param_AutoPhotoDistance_de // ab Rev. 100 (z.B. FC 2.05e)
 
static const char param_AutoPhotoAtitudes_de[] PROGMEM = "Auto Trigger Alt. [m]"; // ab Rev. 100 (z.B. FC 2.05e)
#define param_AutoPhotoAtitudes_en param_AutoPhotoAtitudes_de // ab Rev. 100 (z.B. FC 2.05e)
 
#define param_NaviOut1Parameter_de param_AutoPhotoDistance_de // bis Rev. 98
#define param_NaviOut1Parameter_en param_AutoPhotoDistance_de // bis Rev. 98
 
static const char param_SingleWpSpeed_de[] PROGMEM = "SingleWP Speed 0.1m/s"; // ab Rev. 100 (z.B. FC 2.05e)
#define param_SingleWpSpeed_en param_SingleWpSpeed_de // ab Rev. 100 (z.B. FC 2.05e)
 
static const char param_LandingPulse_de[] PROGMEM = "ACC Z Landing Pulse"; // ab Rev. 104 (FC 2.09d)
#define param_LandingPulse_en param_LandingPulse_de // ab Rev. 104 (FC 2.09d)
 
static const char param_NaviGpsModeChannel_de[] PROGMEM = "GPS Modus Steuerung";
static const char param_NaviGpsModeChannel_en[] PROGMEM = "GPS mode control";
 
static const char param_NaviGpsGain_de[] PROGMEM = "GPS Verstärkung [%]";
static const char param_NaviGpsGain_en[] PROGMEM = "GPS gain [%]";
 
static const char param_NaviGpsP_de[] PROGMEM = "GPS-P";
static const char param_NaviGpsI_de[] PROGMEM = "GPS-I";
static const char param_NaviGpsD_de[] PROGMEM = "GPS-D";
static const char param_NaviGpsPLimit_de[] PROGMEM = "GPS-P Limit";
static const char param_NaviGpsILimit_de[] PROGMEM = "GPS-I Limit";
static const char param_NaviGpsDLimit_de[] PROGMEM = "GPS-D Limit";
static const char param_NaviGpsA_de[] PROGMEM = "GPS Acc";
#define param_NaviGpsP_en param_NaviGpsP_de
#define param_NaviGpsI_en param_NaviGpsI_de
#define param_NaviGpsD_en param_NaviGpsD_de
#define param_NaviGpsPLimit_en param_NaviGpsPLimit_de
#define param_NaviGpsILimit_en param_NaviGpsILimit_de
#define param_NaviGpsDLimit_en param_NaviGpsDLimit_de
#define param_NaviGpsA_en param_NaviGpsA_de
 
static const char param_NaviGpsMinSat_de[] PROGMEM = "Min. Satelliten";
static const char param_NaviGpsMinSat_en[] PROGMEM = "minimum satelite";
 
static const char param_NaviStickThreshold_de[] PROGMEM = "GPS Stick-Schwelle";
static const char param_NaviStickThreshold_en[] PROGMEM = "GPS stick threshold";
 
static const char param_NaviWindCorrection_de[] PROGMEM = "GPS Windkorrektur [%]";
static const char param_NaviWindCorrection_en[] PROGMEM = "GPS wind correct. [%]";
 
static const char param_NaviAccCompensation_de[] PROGMEM = "ACC Kompensation";
static const char param_NaviAccCompensation_en[] PROGMEM = "ACC compensation";
 
static const char param_NaviOperatingRadius_de[] PROGMEM = "max. Radius";
static const char param_NaviOperatingRadius_en[] PROGMEM = "max. radius";
 
static const char param_NaviAngleLimitation_de[] PROGMEM = "Winkel Limit";
static const char param_NaviAngleLimitation_en[] PROGMEM = "angle limit";
 
static const char param_NaviPH_LoginTime_de[] PROGMEM = "PH Login Zeit [s]";
static const char param_NaviPH_LoginTime_en[] PROGMEM = "PH login time [s]";
 
static const char param_ExternalControl_de[] PROGMEM = "Ext. Kontrolle";
static const char param_ExternalControl_en[] PROGMEM = "ext. control";
 
static const char param_OrientationAngle_de[] PROGMEM = "OrientationAngle";
#define param_OrientationAngle_en param_OrientationAngle_de
 
static const char param_CareFreeChannel_de[] PROGMEM = "CareFree Steuerung";
static const char param_CareFreeChannel_en[] PROGMEM = "careFree control";
 
static const char param_MotorSafetySwitch_de[] PROGMEM = "Motor Sicherh.Schalt.";
static const char param_MotorSafetySwitch_en[] PROGMEM = "motor safety switch";
 
static const char param_MotorSmooth_de[] PROGMEM = "Motor Glättung";
static const char param_MotorSmooth_en[] PROGMEM = "motor smooth";
 
static const char param_ComingHomeAltitude_de[] PROGMEM = "Com.Home Höhe [m]";
static const char param_ComingHomeAltitude_en[] PROGMEM = "coming home alti. [m]";
 
static const char param_FailSafeTime_de[] PROGMEM = "Fails. CH Zeit [s]";
static const char param_FailSafeTime_en[] PROGMEM = "fails. CH time [s]";
 
static const char param_MaxAltitude_de[] PROGMEM = "Max. Höhe [m]";
static const char param_MaxAltitude_en[] PROGMEM = "max. altitude [m]";
 
static const char param_FailsafeChannel_de[] PROGMEM = "Fails. Channel 0=Aus";
static const char param_FailsafeChannel_en[] PROGMEM = "fails. channel 0=off";
 
static const char param_ServoFilterNick_de[] PROGMEM = "Nick Filter";
static const char param_ServoFilterNick_en[] PROGMEM = "nick filter";
 
static const char param_ServoFilterRoll_de[] PROGMEM = "Roll Filter";
static const char param_ServoFilterRoll_en[] PROGMEM = "roll filter";
 
static const char param_StartLandChannel_de[] PROGMEM = "Auto StartLand Kanal";
static const char param_StartLandChannel_en[] PROGMEM = "auto start/land chan.";
 
static const char param_LandingSpeed_de[] PROGMEM = "Landing Speed 0.1m/s";
#define param_LandingSpeed_en param_LandingSpeed_de
 
static const char param_CompassOffset_de[] PROGMEM = "Compass Offset [\x0B]";
#define param_CompassOffset_en param_CompassOffset_de
 
static const char param_AutoLandingVoltage_de[] PROGMEM = "Autoland. Volt [0.1V]";
#define param_AutoLandingVoltage_en param_AutoLandingVoltage_de
 
static const char param_ComingHomeVoltage_de[] PROGMEM = "Coming H. Volt [0.1V]";
#define param_ComingHomeVoltage_en param_ComingHomeVoltage_de
 
static const char param_BitConfig_de[] PROGMEM = "BitConfig";
static const char param_ServoCompInvert_de[] PROGMEM = "ServoCompInvert";
static const char param_ExtraConfig_de[] PROGMEM = "ExtraConfig";
static const char param_GlobalConfig3_de[] PROGMEM = "GlobalConfig3";
static const char param_Name_de[] PROGMEM = "Setting Name";
#define param_BitConfig_en param_BitConfig_de
#define param_ServoCompInvert_en param_ServoCompInvert_de
#define param_ExtraConfig_en param_ExtraConfig_de
#define param_GlobalConfig3_en param_GlobalConfig3_de
#define param_Name_en param_Name_de
 
 
static const char param_ComingHomeOrientation_de[] PROGMEM = "CH Ausrichtung";
static const char param_ComingHomeOrientation_en[] PROGMEM = "CH orientation";
 
static const char param_SingleWpControlChannel_de[] PROGMEM = "Single WP Ctrl Chan.";
#define param_SingleWpControlChannel_en param_SingleWpControlChannel_de
 
static const char param_MenuKeyChannel_de[] PROGMEM = "Next WP Channel";
#define param_MenuKeyChannel_en param_MenuKeyChannel_de
 
// subitems (Bit / Byte-Felder)
static const char param_ServoCompInvert_SVNick_de[] PROGMEM = "Nick Umkehren";
static const char param_ServoCompInvert_SVNick_en[] PROGMEM = "nick inv. direction";
 
static const char param_ServoCompInvert_SVRoll_de[] PROGMEM = "Roll Umkehren";
static const char param_ServoCompInvert_SVRoll_en[] PROGMEM = "Roll inv. direction";
 
static const char param_ServoCompInvert_SVRelMov_de[] PROGMEM = "Nick Relativ";
static const char param_ServoCompInvert_SVRelMov_en[] PROGMEM = "nick relativ";
 
static const char param_ExtraConfig_HeightLimit_de[] PROGMEM = "Höhenbegrenzung";
static const char param_ExtraConfig_HeightLimit_en[] PROGMEM = "heigth limitation";
 
static const char param_ExtraConfig_HeightVario_de[] PROGMEM = "Vario-Höhe"; // negiert param_ExtraConfig_HeightLimit
static const char param_ExtraConfig_HeightVario_en[] PROGMEM = "vario heigth"; // negiert param_ExtraConfig_HeightLimit
 
static const char param_ExtraConfig_VarioBeep_de[] PROGMEM = "akust. Vario";
#define param_ExtraConfig_VarioBeep_en param_ExtraConfig_VarioBeep_de
 
static const char param_ExtraConfig_SensitiveRc_de[] PROGMEM = "Erw. Empf.Sig.Prüfung";
static const char param_ExtraConfig_SensitiveRc_en[] PROGMEM = "enh. rec. sign. check";
 
static const char param_ExtraConfig_33vReference_de[] PROGMEM = "33vReference";
#define param_ExtraConfig_33vReference_en param_ExtraConfig_33vReference_de
 
static const char param_ExtraConfig_NoRcOffBeeping_de[] PROGMEM = "k.Summer o.Sender";
static const char param_ExtraConfig_NoRcOffBeeping_en[] PROGMEM = "no beep without TX";
 
static const char param_ExtraConfig_GpsAid_de[] PROGMEM = "Dynamic PH";
#define param_ExtraConfig_GpsAid_en param_ExtraConfig_GpsAid_de
 
static const char param_ExtraConfig_LearnableCarefree_de[] PROGMEM = "Teachable CF";
#define param_ExtraConfig_LearnableCarefree_en param_ExtraConfig_LearnableCarefree_de
 
static const char param_ExtraConfig_IgnoreMagErrAtStartup_de[] PROGMEM = "Kompass Fehler ignor.";
static const char param_ExtraConfig_IgnoreMagErrAtStartup_en[] PROGMEM = "ignore compass error";
 
static const char param_BitConfig_LoopOben_de[] PROGMEM = "Looping Oben";
static const char param_BitConfig_LoopOben_en[] PROGMEM = "looping up";
 
static const char param_BitConfig_LoopUnten_de[] PROGMEM = "Looping Unten";
static const char param_BitConfig_LoopUnten_en[] PROGMEM = "looping down";
 
static const char param_BitConfig_LoopLinks_de[] PROGMEM = "Looping Links";
static const char param_BitConfig_LoopLinks_en[] PROGMEM = "looping left";
 
static const char param_BitConfig_LoopRechts_de[] PROGMEM = "Looping Rechts";
static const char param_BitConfig_LoopRechts_en[] PROGMEM = "looping right";
 
static const char param_BitConfig_MotorBlink1_de[] PROGMEM = "nur wenn Motor An";
static const char param_BitConfig_MotorBlink1_en[] PROGMEM = "only with motor on";
 
static const char param_BitConfig_MotorOffLed1_de[] PROGMEM = " \x19 sofort an";
static const char param_BitConfig_MotorOffLed1_en[] PROGMEM = " \x19 immediately on";
 
#define param_BitConfig_MotorOffLed2_de param_BitConfig_MotorOffLed1_de
#define param_BitConfig_MotorBlink2_de param_BitConfig_MotorBlink1_de
 
#define param_BitConfig_MotorOffLed2_en param_BitConfig_MotorOffLed1_en
#define param_BitConfig_MotorBlink2_en param_BitConfig_MotorBlink1_en
 
 
static const char param_GlobalConfig3_NoSdCardNoStart_de[] PROGMEM = "k.Start o.SD-Karte";
static const char param_GlobalConfig3_NoSdCardNoStart_en[] PROGMEM = "no start w/o SD-card";
 
static const char param_GlobalConfig3_DphMaxRadius_de[] PROGMEM = "Max.Radius dPH";
#define param_GlobalConfig3_DphMaxRadius_en param_GlobalConfig3_DphMaxRadius_de
 
static const char param_GlobalConfig3_VarioFailsafe_de[] PROGMEM = "NOT-Gas Vario Höhe";
static const char param_GlobalConfig3_VarioFailsafe_en[] PROGMEM = "Emerg.thr.vario h.";
 
static const char param_GlobalConfig3_MotorSwitchMode_de[] PROGMEM = "Motor Swi.Mode";
#define param_GlobalConfig3_MotorSwitchMode_en param_GlobalConfig3_MotorSwitchMode_de
 
static const char param_GlobalConfig3_NoGpsFixNoStart_de[] PROGMEM = "k.Start o.GPS Fix";
static const char param_GlobalConfig3_NoGpsFixNoStart_en[] PROGMEM = "no start w/o GPS Fix";
 
static const char param_GlobalConfig3_UseNcForOut1_de[] PROGMEM = "mit WP-Event verkn.";
static const char param_GlobalConfig3_UseNcForOut1_en[] PROGMEM = "combine with WP-Event";
 
static const char param_GlobalConfig3_SpeakAll_de[] PROGMEM = "Alles Ansagen";
static const char param_GlobalConfig3_SpeakAll_en[] PROGMEM = "speak all";
 
static const char param_GlobalConfig3_ServoNickCompOff_de[] PROGMEM = "Nick Komp. Aus";
static const char param_GlobalConfig3_ServoNickCompOff_en[] PROGMEM = "nick compensation off";
 
static const char param_GlobalConfig_HoehenRegelung_de[] PROGMEM = "Höhenregelung";
static const char param_GlobalConfig_HoehenRegelung_en[] PROGMEM = "height control";
 
static const char param_GlobalConfig_HoehenSchalter_de[] PROGMEM = "Schalter Höhe";
static const char param_GlobalConfig_HoehenSchalter_en[] PROGMEM = "height switch";
 
static const char param_GlobalConfig_HeadingHold_de[] PROGMEM = "Heading Hold";
#define param_GlobalConfig_HeadingHold_en param_GlobalConfig_HeadingHold_de
 
static const char param_GlobalConfig_KompassAktiv_de[] PROGMEM = "Kompass Aktiv";
static const char param_GlobalConfig_KompassAktiv_en[] PROGMEM = "compass aktiv";
 
static const char param_GlobalConfig_KompassFix_de[] PROGMEM = "Kompass Fix";
static const char param_GlobalConfig_KompassFix_en[] PROGMEM = "compass fix";
 
static const char param_GlobalConfig_GpsAktiv_de[] PROGMEM = "GPS Aktiv";
#define param_GlobalConfig_GpsAktiv_en param_GlobalConfig_GpsAktiv_de
 
static const char param_GlobalConfig_AchsenkopplungAktiv_de[] PROGMEM = "Achs(ent)kopplung";
static const char param_GlobalConfig_AchsenkopplungAktiv_en[] PROGMEM = "(De)Coupl Axes";
 
static const char param_GlobalConfig_DrehratenBegrenzer_de[] PROGMEM = "Drehratenbegrenzung";
static const char param_GlobalConfig_DrehratenBegrenzer_en[] PROGMEM = "rotary rate limit.";
 
static const char param_Kanalbelegung_Nick_de[] PROGMEM = "Nick";
static const char param_Kanalbelegung_Roll_de[] PROGMEM = "Roll";
#define param_Kanalbelegung_Nick_en param_Kanalbelegung_Nick_de
#define param_Kanalbelegung_Roll_en param_Kanalbelegung_Roll_de
 
static const char param_Kanalbelegung_Gas_de[] PROGMEM = "Gas";
static const char param_Kanalbelegung_Gas_en[] PROGMEM = "throttle";
 
static const char param_Kanalbelegung_Gear_de[] PROGMEM = "Gear";
#define param_Kanalbelegung_Gear_en param_Kanalbelegung_Gear_de
 
static const char param_Kanalbelegung_Poti1_de[] PROGMEM = "Poti 1";
static const char param_Kanalbelegung_Poti2_de[] PROGMEM = "Poti 2";
static const char param_Kanalbelegung_Poti3_de[] PROGMEM = "Poti 3";
static const char param_Kanalbelegung_Poti4_de[] PROGMEM = "Poti 4";
static const char param_Kanalbelegung_Poti5_de[] PROGMEM = "Poti 5";
static const char param_Kanalbelegung_Poti6_de[] PROGMEM = "Poti 6";
static const char param_Kanalbelegung_Poti7_de[] PROGMEM = "Poti 7";
static const char param_Kanalbelegung_Poti8_de[] PROGMEM = "Poti 8";
#define param_Kanalbelegung_Poti1_en param_Kanalbelegung_Poti1_de
#define param_Kanalbelegung_Poti2_en param_Kanalbelegung_Poti2_de
#define param_Kanalbelegung_Poti3_en param_Kanalbelegung_Poti3_de
#define param_Kanalbelegung_Poti4_en param_Kanalbelegung_Poti4_de
#define param_Kanalbelegung_Poti5_en param_Kanalbelegung_Poti5_de
#define param_Kanalbelegung_Poti6_en param_Kanalbelegung_Poti6_de
#define param_Kanalbelegung_Poti7_en param_Kanalbelegung_Poti7_de
#define param_Kanalbelegung_Poti8_en param_Kanalbelegung_Poti8_de
 
static const char param_CompassOffset_DisableDeclCalc_de[] PROGMEM = "Disable Decl. Calc";
#define param_CompassOffset_DisableDeclCalc_en param_CompassOffset_DisableDeclCalc_de
 
 
static const char param_NaviMaxFlyingRange_de[] PROGMEM = "Max. Flugradius [10m]";
static const char param_NaviMaxFlyingRange_en[] PROGMEM = "Max. Flightrad. [10m]";
 
static const char param_NaviDescendRange_de[] PROGMEM = "Fail SinkRadius [10m]";
#define param_NaviDescendRange_en param_NaviDescendRange_de
 
 
 
#endif // _MKPARAMETERS_H
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/Transportables_Koptertool/PKT/trunk/mksettings/mksettings.c
0,0 → 1,707
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net *
* Copyright (C) 2011 Harald Bongartz *
* *
* 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. *
* *
* *
* Credits to: *
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN *
* http://www.mikrokopter.de *
* Gregor "killagreg" Stobrawa for his version of the MK code *
* Thomas Kaiser "thkais" for the original project. See *
* http://www.ft-fanpage.de/mikrokopter/ *
* http://forum.mikrokopter.de/topic-4061-1.html *
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
* http://www.mylifesucks.de/oss/c-osd/ *
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
*****************************************************************************/
 
//############################################################################
//# HISTORY mksettings.c
//#
//# 14.05.2014 OG
//# - chg: include "mkbase.h" geaendert auf "../mk/mkbase.h"
//#
//# 11.05.2014 OG
//# - chg: MKSettings_Menu() umgestellt auf MenuCtrl_SetTitleFromParentItem()
//# -> die Menues 'erben' damit ihren Titel vom aufrufenden Menuepunkt
//#
//# 29.03.2014 OG
//# - chg: versch. Funktionen: del: MenuCtrl_SetShowBatt() wegen Aenderung
//# des Defaults auf true
//#
//# 26.03.2014 OG
//# - add: etliche Aenderungen in allen Bereichen fuer das erste Release
//# der neuen MK-Settings
//#
//# 27.02.2014 OG
//# - chg: MKSettings_AskAction() Unterstuetzung von param_DUMMY
//#
//# 26.02.2014 OG
//# - chg: MKSettings_Copy() auf KEYLINE2 geaendert
//#
//# 23.02.2014 OG
//# - chg: MKSettings_Menu() Aufruf von MK_Parameters() geaendert
//#
//# 18.02.2014 OG - NEU
//############################################################################
 
 
#include "../cpu.h"
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <string.h>
#include <util/atomic.h>
 
//#include "../lipo/lipo.h"
#include "../main.h"
#include "../lipo/lipo.h"
#include "../lcd/lcd.h"
#include "../uart/usart.h"
#include "../utils/menuctrl.h"
#include "../utils/xutils.h"
 
#include "../uart/uart1.h"
#include "../mk-data-structs.h"
//#include "../menu.h"
#include "../timer/timer.h"
#include "../eeprom/eeprom.h"
#include "../messages.h"
#include "../pkt/pkt.h"
#include "../mk/mkbase.h"
#include "paramset.h"
#include "mkparameters.h"
#include "mksettings.h"
 
//---------------------------------------------------------------------------------------------
 
#define F_EXIT 0
#define F_REFRESH 1
 
char mksettings_menu_names[6][18]; // befuellt von: MKSettings_read_Names()
 
 
//-------------------------------------
//-------------------------------------
typedef struct
{
unsigned char paramsetRevision; // Revision FC-Parameterset fuer die das Temp-Setting gueltig ist
unsigned char *paramset; // malloc: Pointer auf kopierte Parameter-Daten
} MKSetting_TMP_t;
 
 
MKSetting_TMP_t MKSetting_TMP;
 
 
#define ID_SETTING_COPY 10 // fuer MKSettings_Menu()
#define ID_EDIT 20 // fuer MKSettings_AskAction()
#define ID_ACTIVATE 21 // fuer MKSettings_AskAction()
#define ID_COPY 22 // fuer MKSettings_AskAction()
 
#define ID_SAVE 30 // fuer MKSettings_AskSaveSetting()
#define ID_DISCARD 31 // fuer MKSettings_AskSaveSetting()
 
 
//#############################################################################################
//#
//#############################################################################################
 
 
//--------------------------------------------------------------
// MKSettings_TMP_Init0()
//
// nur fuer main.c
//--------------------------------------------------------------
void MKSettings_TMP_Init0( void )
{
memset( &MKSetting_TMP, 0, sizeof(MKSetting_TMP_t) );
strcpy( mksettings_menu_names[5], "PKT: --empty--");
}
 
 
 
//--------------------------------------------------------------
// MKSettings_TMP_Init()
//
// loeschen / initialisieren vom PKT Temp-Setting
//--------------------------------------------------------------
void MKSettings_TMP_Init( void )
{
if( MKSetting_TMP.paramset != NULL )
{
free( MKSetting_TMP.paramset );
}
MKSettings_TMP_Init0();
}
 
 
 
//--------------------------------------------------------------
// from_setting = 6 : von TMP zu einem MK-Setting
// from_setting <= 5: von MK-Setting zu TMP
//--------------------------------------------------------------
uint8_t MKSettings_TMP_copy( uint8_t to_setting, uint8_t timeout )
{
uint8_t written;
uint8_t size = paramsetSize();
 
if( MKSetting_TMP.paramset == NULL )
{
MKSetting_TMP.paramset = malloc( size+1 ); // +1 fuer das erste settings-byte
}
 
if( !MKSetting_TMP.paramset )
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( PSTR("NO RAM!"), true, 800, true, true ); // FEHLER! (NO RAM)
return 0; // -> EXIT
}
 
// von MK-Setting 1..5 zu TMP
if( to_setting == 6 )
{
MKSetting_TMP.paramsetRevision = MKVersion.paramsetRevision;
memcpy( MKSetting_TMP.paramset, (unsigned char *)(pRxData), size+1 ); // memcpy( dst, src, size))
return 6;
}
 
// von TMP zu MK-Setting 1..5
memcpy( (unsigned char *)(pRxData), MKSetting_TMP.paramset , size+1 ); // memcpy( dst, src, size))
written = MK_Setting_write( to_setting, timeout);
return written;
}
 
 
 
//#############################################################################################
//#
//#############################################################################################
 
//--------------------------------------------------------------
//--------------------------------------------------------------
uint8_t MKSettings_read_Names( void )
{
uint8_t setting;
 
// die 5 Settings vom Kopter laden um die
// Setting-Namen zu speichern
for( setting=1; setting <= 5; setting++ )
{
if( !MK_Setting_load( setting, 20 ) )
return(0); // Fehler - setting konnte nicht geladen werden (timeout = 20)
xsnprintf( mksettings_menu_names[setting-1], 16, "%1d: %s", setting, paramGet_p(param_Name) );
}
 
// TMP-Setting
if( MKSetting_TMP.paramset != NULL )
{
if( MKSetting_TMP.paramsetRevision != MKVersion.paramsetRevision )
{
// wenn die FC-Revision vom TMP-Setting abweicht vom zuletzt geladenen
// dann wurde ggf. der Kopter gewechselt -> TMP-Setting verwerfen
MKSettings_TMP_Init();
}
else
{
// den Namen aus dem TMP-Setting holen
paramsetInit( MKSetting_TMP.paramset );
xsnprintf( mksettings_menu_names[5], 16, "PKT: %s", paramGet_p(param_Name) );
}
}
 
setting = MK_Setting_load( 0xff, 20); // aktuelles MK Setting ermitteln
 
return setting;
}
 
 
 
//--------------------------------------------------------------
// wahl = MKSettings_AskAction( setting)
//
// Rueckgabe:
// 0 (==Ende), ID_EDIT, ID_ACTIVATE, ID_COPY
//--------------------------------------------------------------
uint8_t MKSettings_AskAction( uint8_t setting )
{
uint8_t wahl = 0;
 
//-----------------
// Menue erstellen
//-----------------
MenuCtrl_Create();
MenuCtrl_SetTitle( mksettings_menu_names[setting-1] ); // Menuetitel ist der Settingname
MenuCtrl_ShowLevel(false);
MenuCtrl_SetTopSpace(1); // oben beim Menue eine Leerzeile einfuegen
 
//-----------------
// Menueeintraege
//-----------------
if( !paramExist(param_DUMMY) ) // param_DUMMY -> das Parameterset wird nicht zum bearbeiten unterstuetzt
MenuCtrl_Push_P( ID_EDIT , MENU_ITEM, NOFUNC, strGet(EDIT_SETTING) ); // "Setting ändern"
 
if( setting != 6)
MenuCtrl_Push_P( ID_ACTIVATE, MENU_ITEM, NOFUNC, strGet(PARA_AKTIVI) ); // "aktivieren"
 
MenuCtrl_Push_P( ID_COPY , MENU_ITEM, NOFUNC, strGet(STR_COPY) ); // "kopieren"
 
//-----------------
// Menue Control
//-----------------
MenuCtrl_Control( MENUCTRL_EVENT );
 
if( MenuCtrl_GetKey() != KEY_ESC )
wahl = MenuCtrl_GetItemId(); // welcher Menu-Punkt (ID_CHANGE, ID_ACTIVATE)
 
MenuCtrl_Destroy();
MenuCtrl_ShowLevel(true);
 
return wahl; // 0=Ende; ID_EDIT; ID_ACTIVATE, ID_COPY
}
 
 
 
//--------------------------------------------------------------
// wahl = MKSettings_AskSaveSetting( setting)
//
// Rueckgabe:
// 0 (==Ende), ID_SAVE, ID_DISCARD
//--------------------------------------------------------------
uint8_t MKSettings_AskSaveSetting( uint8_t setting )
{
uint8_t wahl = 0;
 
//-----------------
// Menue erstellen
//-----------------
MenuCtrl_Create();
MenuCtrl_SetTitle( mksettings_menu_names[setting-1] ); // Menuetitel ist der Settingname
MenuCtrl_ShowLevel(false);
MenuCtrl_SetTopSpace(1); // oben beim Menue eine Leerzeile einfuegen
 
//-----------------
// Menueeintraege
//-----------------
MenuCtrl_Push_P( ID_SAVE , MENU_ITEM, NOFUNC, strGet(STR_SAVE) ); // "speichern"
MenuCtrl_Push_P( ID_DISCARD , MENU_ITEM, NOFUNC, strGet(STR_DISCARD) ); // "verwerfen"
 
 
//-----------------
// Menue Control
//-----------------
MenuCtrl_Control( MENUCTRL_EVENT );
 
if( MenuCtrl_GetKey() != KEY_ESC )
wahl = MenuCtrl_GetItemId(); // welcher Menu-Punkt (ID_CHANGE, ID_ACTIVATE)
 
MenuCtrl_Destroy();
MenuCtrl_ShowLevel(true);
 
return wahl; // 0=Ende; ID_EDIT; ID_ACTIVATE, ID_COPY
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
uint8_t MKSettings_Copy( uint8_t from_setting )
{
const char *mask = PSTR("%15s");
uint8_t redraw = true;
uint8_t loaded = 0;
uint8_t to_setting;
uint8_t written;
uint8_t key;
int8_t yoffs;
 
 
lcd_cls();
 
to_setting = from_setting;
 
while( true )
{
//------------------------
// anzeigen
//------------------------
if( redraw )
{
lcd_frect( 0, 0, 127, 7, 1); // Titel: Invers
lcd_printp_at( 1, 0, strGet(PARA_COPY), MINVERS);
 
yoffs = -1;
lcdx_printp_at( 0, 2, strGet(STR_VON), MNORMAL, 0,yoffs); // "von"
lcdx_printf_at_P( 5, 2, MNORMAL, 3,yoffs, mask, mksettings_menu_names[from_setting-1] );
 
yoffs = -7;
lcd_frect( 5*6, 4*8+yoffs, 15*6, 7, 0);
lcdx_printp_at( 0, 4, strGet(STR_NACH), MNORMAL, 0,yoffs); // "nach"
lcdx_printf_at_P( 5, 4, MNORMAL, 3,yoffs, mask, mksettings_menu_names[to_setting-1] );
 
lcd_printp_at(0, 7, strGet(KEYLINE2), MNORMAL); // Keyline: <- -> Ende OK
 
redraw = false;
}
 
//------------------------
// Tasten abfragen
//------------------------
if( get_key_press(1 << KEY_ESC) )
{
return 99; // nur "ENDE"
}
 
if( get_key_press(1 << KEY_PLUS) )
{
if( to_setting == 6 ) to_setting = 1;
else to_setting++;
redraw = true;
}
 
if( get_key_press(1 << KEY_MINUS) )
{
if( to_setting == 1 ) to_setting = 6;
else to_setting--;
redraw = true;
}
 
//-------------------------------
// Taste: OK = Setting kopieren?
//-------------------------------
if( get_key_press(1 << KEY_ENTER) )
{
lcdx_printp_center( 5, strGet(PARA_COPYQ), MNORMAL, 0,1); // "Wirklich kopieren?" (zentriert)
lcd_rect_round( 0, 5*8-3, 127, 7+7, 1, R2); // Rahmen um die Frage
 
lcd_frect( 0, 7*8, 127, 7, 0); // Keyline loeschen
lcd_printp_at(12, 7, strGet(NOYES), MNORMAL); // neue Keyline: "Nein Ja"
 
set_beep( 25, 0xffff, BeepNormal ); // kurzer Beep
 
key = 0;
while( !key ) // Abfrage: Ja / Nein
{
key = get_key_press(1 << KEY_ENTER) ? KEY_ENTER : key; // => "Ja" (=Setting kopieren)
key = get_key_press(1 << KEY_ESC) ? KEY_ESC : key; // => "Nein"
PKT_CtrlHook();
}
 
//---------------------------
// "Ja" -> Setting kopieren!
//---------------------------
if( key == KEY_ENTER ) // => "Ja" -> Setting kopieren!
{
if( from_setting != 6 ) // kein PKT TMP-Setting
{
loaded = MK_Setting_load( from_setting, 20 ); // timeout = 20
 
if( loaded != from_setting ) // Fehler beim laden - Datenverlust?
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(ERROR_NODATA), true, 800, true, true ); // "Datenverlust!" (max. 8 Sekunden anzeigen)
return 0; // 0 = Ende/Abbruch
}
}
 
if( to_setting == 6 ) // von Setting 1..5 nach TMP speichern
{
MKSettings_TMP_copy( 6, 10 );
return loaded;
}
 
// Anzeige "speichern..."
lcd_frect( 0, (8*4), 128, (8*4), 0); // Anzeigebereich löschen
lcdx_printp_center( 4, strGet(STR_SAVING), MNORMAL, 0,9); // Text zentriert; String in PROGMEM
lcd_rect_round( 0, 37, 127, 14, 1, R2); // Rahmen
 
 
if( from_setting == 6 ) // von TMP nach Setting 1..5
{
written = MKSettings_TMP_copy( to_setting, 30 );
return written;
}
 
 
if( to_setting <= 5 ) // 'echtes' MK Setting speichern
{
written = MK_Setting_write( to_setting, 30 ); // Timeout = 40
return written;
}
}
 
if( key == KEY_ESC ) // => "Nein" -> nicht kopieren
{
lcd_cls();
redraw = true;
}
 
} //end: if( get_key_press(1 << KEY_ENTER) )
 
 
//------------------------------------------
// Pruefe PKT-Update oder andere PKT-Aktion
//------------------------------------------
if( PKT_CtrlHook() ) // Update vom Updatetool angefordert?
{
lcd_cls();
redraw = true;
}
 
} // end: while( true )
 
return 0;
}
 
 
 
//--------------------------------------------------------------
// ret = MKSettings_Menu()
//
// Rueckgabe:
// 0 = Ende/Fehler/Abbruch
// 1 = Refresh
//--------------------------------------------------------------
uint8_t MKSettings_Menu( void )
{
uint8_t i;
uint8_t active_setting;
uint8_t setting;
uint8_t wahl;
uint8_t wahl2;
uint8_t changed;
 
 
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(MSG_LOADSETTINGS), false, 0, true, true ); // "lade Settings..."
 
 
active_setting = MKSettings_read_Names();
 
if( !active_setting ) // Fehler: settings konnten nicht geladen werden...
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(ERROR_NODATA), true, 800, true, true ); // "Datenverlust!" (max. 8 Sekunden anzeigen)
return F_EXIT; // F_EXIT = Ende/Abbruch
}
 
 
//---------------
// Create
//---------------
MenuCtrl_Create();
 
//---------------
// Einstellungen
//---------------
MenuCtrl_SetTitleFromParentItem(); // "MK Settings"
//MenuCtrl_SetTitle_P( PSTR("MK Settings") );
//MenuCtrl_SetCycle( false );
//MenuCtrl_SetShowBatt( true );
 
 
//---------------
// Menue-Punkte
//---------------
for( i=0; i< ( MKSetting_TMP.paramset!=NULL ? 6 : 5); i++ )
{
MenuCtrl_Push( i+1, MENU_SUB, NOFUNC, mksettings_menu_names[i] ); // Setting 1..5
}
 
MenuCtrl_ItemSelect( active_setting ); // Menucursor auf aktives Setting setzen
MenuCtrl_ItemMark( active_setting, true); // aktives Setting markieren
 
 
//---------------
// Control
//---------------
while( true )
{
MenuCtrl_Control( MENUCTRL_EVENT );
 
if( MenuCtrl_GetKey() == KEY_ESC ) // Ende?
{
break; // Ende
}
 
setting = MenuCtrl_GetItemId(); // welcher Menu-Punkt (ID)
 
if( setting >=1 && setting <= 6 )
{
wahl = MKSettings_AskAction( setting );
 
//--------------
// bearbeiten
//--------------
if( wahl == ID_EDIT )
{
// TODO: Fehler abfangen!
MK_Setting_load( setting, 25 ); // timeout = 25
changed = MK_Parameters( setting, mksettings_menu_names[setting-1] );
 
if( changed && (setting!=6) )
{
wahl2 = MKSettings_AskSaveSetting( setting );
if( wahl2 == ID_SAVE )
{
lcd_frect( 0, (8*7), 128, 7, 0); // Keyline löschen
lcdx_printp_center( 4, strGet(STR_SAVING), MNORMAL, 0,9); // Text zentriert; String in PROGMEM
lcd_rect_round( 0, 37, 127, 14, 1, R2); // Rahmen
 
setting = MK_Setting_write( setting, 50);
 
if( !setting )
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(ERROR_NODATA), true, 800, true, true ); // FEHLER! nodata (max. 8 Sekunden anzeigen)
//MenuCtrl_Destroy();
//return F_EXIT; // F_EXIT = Ende/Abbruch
}
}
}
}
 
 
//--------------
// aktivieren
//--------------
if( wahl == ID_ACTIVATE )
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(MSG_ACTIVATESETTING), false, 0, true, true ); // "aktiviere Setting..."
 
active_setting = MK_Setting_change( setting );
 
if( !active_setting )
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(ERROR_NODATA), true, 800, true, true ); // FEHLER! nodata (max. 8 Sekunden anzeigen)
//MenuCtrl_Destroy();
//return F_EXIT; // F_EXIT = Ende/Abbruch
}
else
{
// neues Setting markieren
for( i=1; i<=5; i++ ) MenuCtrl_ItemMark( i, false); // Markierungen loeschen
MenuCtrl_ItemMark( active_setting, true); // aktives Setting markieren
}
 
} // end: if( wahl == ID_ACTIVATE )
 
 
//--------------
// kopieren
//--------------
if( wahl == ID_COPY )
{
active_setting = MKSettings_Copy( setting );
 
if( !active_setting )
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(ERROR_NODATA), true, 800, true, true ); // FEHLER! nodata (max. 8 Sekunden anzeigen)
//MenuCtrl_Destroy();
//return F_EXIT; // F_EXIT = Ende/Abbruch
}
 
if( active_setting != 99 ) // =99 bedeutet: User hat die Funktion abgebrochen...
{
MenuCtrl_Destroy(); // ok, kein Abbruch durch den User -> Menue neu aufbauen
return F_REFRESH; // da sich ggf. Settings-Namen geaendert haben
}
} // end: if( wahl == ID_COPY )
 
}
 
} // end: while( true )
 
 
//---------------
// Destroy
//---------------
MenuCtrl_Destroy();
 
return F_EXIT;
}
 
 
 
//#############################################################################################
//#
//#############################################################################################
 
 
//--------------------------------------------------------------
// das muss ueberarbeitet werden....
//--------------------------------------------------------------
static uint8_t check_motorOff(void)
{
NaviData_t *naviData;
 
if( hardware == NC ) // Prüfung funktioniert nur mit NC
{
SwitchToNC();
SendOutData( 'o', ADDRESS_NC, 1, 10, 1);
mode = 'O';
rxd_buffer_locked = FALSE;
timer = 200;
 
while( !rxd_buffer_locked && timer>0 );
 
if( rxd_buffer_locked ) // naviData Ok?
{
// timer = MK_TIMEOUT;
Decode64();
naviData = (NaviData_t *) pRxData;
 
if( naviData->FCStatusFlags & FC_STATUS_MOTOR_RUN )
return false;
else
return true;
}
 
return false;
}
 
return true; // hmm, wenn man nur eine FC hat dann wird hier immer gemeldet "Motoren sind aus" ?
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
void MK_Settings( void )
{
//MKSettings_TMP_Init();
 
//if( true )
if( !check_motorOff() )
{
//PKT_Message_P( *text, error, timeout, beep, clearscreen )
PKT_Message_P( strGet(STR_SWITCHMOTOROFF), false, 400, true, true ); // "Motoren ausschalten!"
return;
}
 
while( MKSettings_Menu() == F_REFRESH );
}
 
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/Transportables_Koptertool/PKT/trunk/mksettings/mksettings.h
0,0 → 1,55
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* Copyright (C) 2012 Christian "Cebra" Brandtner, brandtner@brandtner.net *
* Copyright (C) 2012 Harald Bongartz *
* *
* 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. *
* *
* *
* Credits to: *
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN *
* http://www.mikrokopter.de *
* Gregor "killagreg" Stobrawa for his version of the MK code *
* Thomas Kaiser "thkais" for the original project. See *
* http://www.ft-fanpage.de/mikrokopter/ *
* http://forum.mikrokopter.de/topic-4061-1.html *
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
* http://www.mylifesucks.de/oss/c-osd/ *
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
*****************************************************************************/
 
//############################################################################
//# HISTORY mksettings.h
//#
//# 19.02.2014 OG - NEU
//# - add: MKSettings_TMP_Init(), MKSettings_TMP_Init0()
//#
//# 18.02.2014 OG - NEU
//############################################################################
 
#ifndef _MKPARAMETERS_H
#define _MKPARAMETERS_H
 
 
//---------------------------
// exportierte Funktionen
//---------------------------
void MK_Settings( void );
 
void MKSettings_TMP_Init0( void );
void MKSettings_TMP_Init( void );
 
#endif // _MKPARAMETERS_H
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/Transportables_Koptertool/PKT/trunk/mksettings/paramset.c
0,0 → 1,2583
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net *
* Copyright (C) 2011 Harald Bongartz *
* *
* 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. *
* *
* *
* Credits to: *
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN *
* http://www.mikrokopter.de *
* Gregor "killagreg" Stobrawa for his version of the MK code *
* Thomas Kaiser "thkais" for the original project. See *
* http://www.ft-fanpage.de/mikrokopter/ *
* http://forum.mikrokopter.de/topic-4061-1.html *
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
* http://www.mylifesucks.de/oss/c-osd/ *
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
*****************************************************************************/
 
//############################################################################
//# HISTORY paramset.c
//#
//# 16.07.2015 Cebra (PKT385a)
//# - add: unsigned char SingleWpControlChannel; (FC2.11a)
//# unsigned char MenuKeyChannel; (FC2.11a)
//# - add: paramset_106 (FC2.11a)
//#
//# 09.04.2015 Cebra (PKT384a)
//# - add: unsigned char ServoFS_Pos[5] (FC 2.09i)
//# - add: paramset_105 (FC2.09j)
//#
//# 19.03.2015 Cebra (PKT383a)
//# - add: param_LandingPulse (FC 2.09d)
//#
//# 26.01.2015 Cebra
//# - add: Function transform_ComingHomeOrientation
//# Ändert die Bits 4+5 für ServoCompInvert
//# in Konfigurationstabelle der paramSubID: param_ComingHomeOrientation neu
//#
//# 26.09.2014 Cebra
//# - add: Parameterset Rev. 103 (FC 2.07f)
//# - chg: param_Hoehe_GPS_Z zu param_Hoehe_Verstaerkung im Paramset 103
//#
//# 14.05.2014 OG
//# - chg: include "mkbase.h" geaendert auf "../mk/mkbase.h"
//#
//# 10.05.2014 OG
//# - add: transform_CompassOffset_DisableDeclCalc() - transformiert true/false
//# in das Byte von param_CompassOffset
//#
//# 09.05.2014 OG
//# - chg: paramSet() - angepasst auf Transform-Funktionen
//# - chg: paramGet() - angepasst auf Transform-Funktionen
//# - add: eine neue Transformations-Zwischenschicht implementiert - abgebildet
//# ueber die neue Tabelle paramTransform.
//# Hier koennen Transform-Funktionen hinterlegt werden die einen
//# ubyte8 Wert veraendern.
//# Die Transformation wird von paramSet()/paramGet() aufgerufen.
//#
//# 17.04.2014 OG
//# - FIX: _paramset_getsubitemid(): Pruefung von_Revision/bis_Revision
//# korrigiert - fuehrte vorher ggf. zu falschen Anzeigen von SubItems!
//# - chg: param_BitConfig_MotorOffLed1 auf bis_Revision 101 begrenzt
//# - chg: param_BitConfig_MotorOffLed2 auf bis_Revision 101 begrenzt
//#
//# 09.04.2014 OG
//# - chg: Rev. 101 auf param_DUMMY umgestellt um Platz zu sparen
//#
//# 08.04.2014 OG
//# - add: Parameterset Rev. 102 (FC 2.05g)
//# - fix: _paramset_getsubitemid() - Vergleich bzgl. von/bis_Revision umgedreht
//# und equal zugefuegt
//#
//# 06.04.2014 OG
//# - add: Parameterset Rev. 101 (FC 2.05f)
//# -> param_Servo3OnValue, param_Servo3OffValue
//# -> param_Servo4OnValue, param_Servo4OffValue
//#
//# 28.03.2014 OG
//# - add: Parameterset Rev. 100 (FC 2.05e)
//# (param_AutoPhotoDistance, param_AutoPhotoAtitudes, param_SingleWpSpeed)
//#
//# 26.03.2014 OG
//# - add: param_CompassOffset_DisableDeclCalc (Sub-Item)
//#
//# 24.03.2014 OG
//# - chg: _paramset_getsubitemid() erweitert Unterstuetzung von/bis FC-Revisionen
//# - add: paramSubItem_t mit Unterstuetzung fuer von/bis FC-Revisionen
//#
//# 27.02.2014 OG
//# - chg: die Revisions-Tabellen 90 bis 94 mittels param_DUMMY gekuerzt
//# -> keine Parameter-Bearbeitung bei denen moeglich
//# - add: vollstaendige Unterstuetzung von paramSubID's via paramGet(), paramSet()
//#
//# 26.02.2014 OG
//# - add: paramSubItem[] - Zugriffstabelle auf Bit- und Bytefelder innerhalb
//# einer paramID
//# - chg: bei den paramset_nnn[] Tabellen 'const' ergaenzt
//# - chg: paramsetTest() umbenannt zu paramsetDEBUG()
//#
//# 19.02.2014 OG
//# - fix: paramsetInit() Parameter pData wurde nicht konsequent verwendet
//#
//# 14.02.2014 OG
//# - add: diverse Zugriffsfunktionen fuer paramID's und paramSet's
//# - add: Rev-Tabellen von FC v0.88e bis FC v2.03d
//#
//# 05.02.2014 OG - NEU
//############################################################################
 
 
//############################################################################
//# INHALT
//#
//# 1a. Konfigurationtabellen fuer verschiedene FC-Revisionen
//# 1b. Zuweisungstabelle: Revision -> paramset_xxx
//# 2. Konfigurationstabelle der paramSubID's (Bit- und Bytefelder)
//# 3a. interne Zugriffsfunktionen
//# 3b. oeffentliche Zugriffsfunktionen fuer paramID / paramSubID Elemente
//# 3c. oeffentliche Zugriffsfunktionen fuer das gesamte Paramset (Int usw.)
//# x. TEST / DEBUG
//############################################################################
 
 
#include "../cpu.h"
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <string.h>
#include <util/atomic.h>
 
#include "../main.h"
#include "../lipo/lipo.h"
#include "../lcd/lcd.h"
#include "../uart/usart.h"
 
#include "../uart/uart1.h"
#include "../mk-data-structs.h"
#include "../timer/timer.h"
#include "../eeprom/eeprom.h"
#include "../messages.h"
#include "../utils/scrollbox.h"
#include "../pkt/pkt.h"
#include "../mk/mkbase.h"
#include "paramset.h"
 
 
 
//---------------------------
// fuer transform_...
//---------------------------
#define GETVALUE 1 // Wert setzen
#define SETVALUE 2 // Wert lesen
 
 
 
paramRevItem_t *paramsetRevTable; // Zeiger auf aktive Revision-Table oder 0 wenn nicht gesetzt -> wird gesetzt druch paramsetInit() / paramset.c
unsigned char *mkparamset; // nur temp. gueltig solange der PKT-RX-Buffer (pRxData) noch nicht wieder ueberschrieben -> wird gesetzt druch paramsetInit() / paramset.c
 
 
 
//#############################################################################################
//# 1a. Konfigurationtabellen fuer verschiedene FC-Revisionen
//#############################################################################################
 
 
//---------------------------------------------------------------------------------------
// die nachfolgenden Tabellen entsprechen der Struktur von paramRevItem_t aus paramset.h
//---------------------------------------------------------------------------------------
 
 
//-----------------------------------------------
// FC-Parameter Revision: 90
//
// ab FC-Version: ab ??? bis ???
// gefunden in : 0.88e
//
// Tabelle ist definiert in der
// nachfolgenden paramset_091
//
// STRUKTUR-DIFF zu 0:
//
// DEFINE-DIFF zu 0:
//-----------------------------------------------
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 91
//
// ab FC-Version: ab ??? bis ???
// gefunden in : 0.88m, 0.88n
//
// STRUKTUR-DIFF zu 090:
// - keine Aenderung der internen Datenstruktur erkennbar!
//
// DEFINE-DIFF zu 090:
// - add: #define PID_SPEAK_HOTT_CFG
// - add: #define CFG3_MOTOR_SWITCH_MODE
// - add: #define CFG3_NO_GPSFIX_NO_START
//-----------------------------------------------
//
//
// + paramID (paramRevItem_t -> paramID)
// |
// | + size in Bytes (paramRevItem_t -> size)
// | |
// | |
// | |
paramRevItem_t const paramset_091[] PROGMEM =
{
{ param_DUMMY , 111 }, // n-Bytes Fueller... keine Unterstuetzung fuer paramEdit
{ param_Name , 12 }, // char Name[12];
{ param_DUMMY , 1 }, // n-Bytes Fueller... keine Unterstuetzung fuer paramEdit
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_091[]
 
 
 
//############################################################################################################################################################
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 92
//
// ab FC-Version: ab ??? bis ???
// gefunden in : 0.90d
//
// Tabelle ist definiert in der
// nachfolgenden paramset_093
//
// STRUKTUR-DIFF zu 091:
// -add: param_NaviOut1Parameter
//#
// DEFINE-DIFF zu 091:
// -add: #define CFG3_USE_NC_FOR_OUT1 0x20
// -add: #define CFG3_SPEAK_ALL
// -add: #define SERVO_NICK_INV 0x01
// -add: #define SERVO_ROLL_INV 0x02
// -add: #define SERVO_RELATIVE 0x04
//-----------------------------------------------
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 93
//
// ab FC-Version: ab ??? bis ???
// gefunden in : 0.90e, 0.90g, 0.90j
//
// STRUKTUR-DIFF zu 092:
// - keine Aenderung der internen Datenstruktur erkennbar!
//
// DEFINE-DIFF zu 092:
// - keine Aenderung erkennbar!
//-----------------------------------------------
paramRevItem_t const paramset_093[] PROGMEM =
{
{ param_DUMMY , 112 }, // n-Bytes Fueller... keine Unterstuetzung fuer paramEdit
{ param_Name , 12 }, // char Name[12];
{ param_DUMMY , 1 }, // n-Bytes Fueller... keine Unterstuetzung fuer paramEdit
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_093[]
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 94
//
// ab FC-Version: ab ??? bis ???
// gefunden in : 0.91a
//
// STRUKTUR-DIFF zu 093:
// - add: param_StartLandChannel
// - add: param_LandingSpeed
//
// DEFINE-DIFF zu 093:
// etwas undurchsichtig...
// - add: #define EE_DUMMY
// - add: #define PID_HARDWARE_VERSION
//-----------------------------------------------
paramRevItem_t const paramset_094[] PROGMEM =
{
{ param_DUMMY , 114 }, // n-Bytes Fueller... keine Unterstuetzung fuer paramEdit
{ param_Name , 12 }, // char Name[12];
{ param_DUMMY , 1 }, // n-Bytes Fueller... keine Unterstuetzung fuer paramEdit
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_094[]
 
 
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 95
//
// ab FC-Version: ab ??? bis ???
// gefunden in : 0.90L, 2.00a, , 2.00e
//
// STRUKTUR-DIFF zu 094:
// - rename: param_MaxHoehe -> param_HoeheChannel
// - rename: param_NaviGpsModeControl -> param_NaviGpsModeChannel
// - rename: param_NaviGpsACC -> param_NaviGpsA
// - rename: param_CareFreeModeControl -> param_CareFreeChannel
//
// DEFINE-DIFF zu 094:
// - keine Aenderung
//-----------------------------------------------
paramRevItem_t const paramset_095[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_GPS_Z , 1 }, // unsigned char Hoehe_GPS_Z; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char ServoManualControlSpeed;//
{ param_CamOrientation , 1 }, // unsigned char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char WARN_J17_Bitmask; // for the J17 Output
{ param_NaviOut1Parameter , 1 }, // unsigned char NaviOut1Parameter; // for the J16 Output
{ param_NaviGpsModeChannel , 1 }, // unsigned char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviOperatingRadius , 1 }, // unsigned char NaviOperatingRadius;
{ param_NaviAngleLimitation , 1 }, // unsigned char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char NaviPH_LoginTime;
{ param_ExternalControl , 1 }, // unsigned char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char ServoFilterRoll;
{ param_StartLandChannel , 1 }, // unsigned char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char LandingSpeed;
{ param_BitConfig , 1 }, // unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_095[]
 
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 96
//
// ab FC-Version: ab ??? bis ???
// gefunden in: ???
//
// STRUKTUR-DIFF zu 095:
// - KEINE AENDERUNG der INTERNEN DATEN-STRUKTUR!
//
// DEFINE-DIFF zu 095:
// GlobalConfig3
// - add: #define CFG3_SERVO_NICK_COMP_OFF 0x80
//-----------------------------------------------
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 97
//
// ab FC-Version: ab ??? bis ???
// gefunden in: 2.02b
//
// STRUKTUR-DIFF zu 096:
// - add: param_CompassOffset
// - add: param_AutoLandingVoltage
//
// DEFINE-DIFF zu 096:
// - keine Aenderung
//-----------------------------------------------
paramRevItem_t const paramset_097[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_GPS_Z , 1 }, // unsigned char Hoehe_GPS_Z; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char ServoManualControlSpeed;//
{ param_CamOrientation , 1 }, // unsigned char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char WARN_J17_Bitmask; // for the J17 Output
{ param_NaviOut1Parameter , 1 }, // unsigned char NaviOut1Parameter; // for the J16 Output
{ param_NaviGpsModeChannel , 1 }, // unsigned char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviOperatingRadius , 1 }, // unsigned char NaviOperatingRadius;
{ param_NaviAngleLimitation , 1 }, // unsigned char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char NaviPH_LoginTime;
{ param_ExternalControl , 1 }, // unsigned char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char ServoFilterRoll;
{ param_StartLandChannel , 1 }, // unsigned char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char LandingSpeed;
{ param_CompassOffset , 1 }, // unsigned char CompassOffset;
{ param_AutoLandingVoltage , 1 }, // unsigned char AutoLandingVoltage; // in 0,1V 0 -> disabled
{ param_BitConfig , 1 }, // unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_097[]
 
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 98
//
// ab FC-Version: ab ??? bis ???
// gefunden in: 2.03d
//
// STRUKTUR-DIFF zu 097:
// - add: param_ComingHomeVoltage
//
// DEFINE-DIFF zu 097:
// - keine Aenderung
//-----------------------------------------------
paramRevItem_t const paramset_098[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_GPS_Z , 1 }, // unsigned char Hoehe_GPS_Z; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char ServoManualControlSpeed;//
{ param_CamOrientation , 1 }, // unsigned char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char WARN_J17_Bitmask; // for the J17 Output
{ param_NaviOut1Parameter , 1 }, // unsigned char NaviOut1Parameter; // for the J16 Output
{ param_NaviGpsModeChannel , 1 }, // unsigned char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviOperatingRadius , 1 }, // unsigned char NaviOperatingRadius;
{ param_NaviAngleLimitation , 1 }, // unsigned char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char NaviPH_LoginTime;
{ param_ExternalControl , 1 }, // unsigned char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char ServoFilterRoll;
{ param_StartLandChannel , 1 }, // unsigned char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char LandingSpeed;
{ param_CompassOffset , 1 }, // unsigned char CompassOffset;
{ param_AutoLandingVoltage , 1 }, // unsigned char AutoLandingVoltage; // in 0,1V 0 -> disabled
{ param_ComingHomeVoltage , 1 }, // unsigned char ComingHomeVoltage; // in 0,1V 0 -> disabled
{ param_BitConfig , 1 }, // unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_098[]
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 99
// keine Inormationen zu Rev. 99 vorhanden.
//
// Kommentar dazu von Holger Buss:
// "Die Revision 0.99 kannst Du ignorieren."
//-----------------------------------------------
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 100
//
// ab FC-Version: ab ??? bis 2.05e
// gefunden in: 2.05e
//
// STRUKTUR-DIFF zu 098:
// - del: NaviOut1Parameter
// - add: AutoPhotoDistance (ersetzt NaviOut1Parameter)
// - add: AutoPhotoAtitudes
// - add: SingleWpSpeed
//
// DEFINE-DIFF zu 098:
// - keine Aenderung
//
// ANMERKUNG OG 06.04.2014:
// Die Tabelle kann ggf. demnaechst geloescht werden
// da sie nur fuer eine kurze Zeit in Betaversionen
// vorhanden war!
//-----------------------------------------------
paramRevItem_t const paramset_100[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_GPS_Z , 1 }, // unsigned char char Hoehe_GPS_Z; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char char Hoehe_StickNeutralPoint; // Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char char ServoManualControlSpeed; //
{ param_CamOrientation , 1 }, // unsigned char char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char char WARN_J17_Bitmask; // for the J17 Output
{ param_AutoPhotoDistance , 1 }, // unsigned char char AutoPhotoDistance; // Auto Photo // ab Rev. 100 (ehemals NaviOut1Parameter)
{ param_NaviGpsModeChannel , 1 }, // unsigned char char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviOperatingRadius , 1 }, // unsigned char char NaviOperatingRadius;
{ param_NaviAngleLimitation , 1 }, // unsigned char char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char char NaviPH_LoginTime;
{ param_ExternalControl , 1 }, // unsigned char char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char char ServoFilterRoll;
{ param_StartLandChannel , 1 }, // unsigned char char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char char LandingSpeed;
{ param_CompassOffset , 1 }, // unsigned char char CompassOffset;
{ param_AutoLandingVoltage , 1 }, // unsigned char char AutoLandingVoltage; // in 0,1V 0 -> disabled
{ param_ComingHomeVoltage , 1 }, // unsigned char char ComingHomeVoltage; // in 0,1V 0 -> disabled
{ param_AutoPhotoAtitudes , 1 }, // unsigned char char AutoPhotoAtitudes; // ab Rev. 100
{ param_SingleWpSpeed , 1 }, // unsigned char char SingleWpSpeed; // ab Rev. 100
{ param_BitConfig , 1 }, // unsigned char char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_100[]
 
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 101
//
// ab FC-Version: ab 2.05f bis 2.05f
// gefunden in: 2.05f
//
// STRUKTUR-DIFF zu 100:
// - add: Servo3OnValue
// - add: Servo3OffValue
// - add: Servo4OnValue
// - add: Servo4OffValue
//
// DEFINE-DIFF zu 100:
// - keine Aenderung
//
// ANMERKUNG OG 06.04.2014:
// Die Tabelle kann ggf. demnaechst geloescht werden
// da sie nur fuer eine einzige Betaversion
// vorhanden war!
//-----------------------------------------------
paramRevItem_t const paramset_101[] PROGMEM =
{
{ param_DUMMY , 123 }, // n-Bytes Fueller... keine Unterstuetzung fuer paramEdit
{ param_Name , 12 }, // char Name[12];
{ param_DUMMY , 1 }, // n-Bytes Fueller... keine Unterstuetzung fuer paramEdit
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_101[]
 
 
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 102
//
// ab FC-Version: ab 2.05g bis ??? (min. 2.06b)
// gefunden in: 2.05g, 2.06a
//
// STRUKTUR-DIFF zu 101:
// - add: NaviMaxFlyingRange (ersetzt NaviOperatingRadius)
// - add: NaviDescendRange
// - del: NaviOperatingRadius
//
// DEFINE-DIFF zu 101:
// - del: CFG3_DPH_MAX_RADIUS
//-----------------------------------------------
paramRevItem_t const paramset_102[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_GPS_Z , 1 }, // unsigned char char Hoehe_GPS_Z; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char char Hoehe_StickNeutralPoint; // Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char char ServoManualControlSpeed; //
{ param_CamOrientation , 1 }, // unsigned char char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char char WARN_J17_Bitmask; // for the J17 Output
{ param_AutoPhotoDistance , 1 }, // unsigned char char AutoPhotoDistance; // Auto Photo // ab Rev. 100 (ehemals NaviOut1Parameter)
{ param_NaviGpsModeChannel , 1 }, // unsigned char char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviMaxFlyingRange , 1 }, // unsigned char char NaviMaxFlyingRange; // in 10m
{ param_NaviAngleLimitation , 1 }, // unsigned char char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char char NaviPH_LoginTime;
{ param_NaviDescendRange , 1 }, // unsigned char char NaviDescendRange;
{ param_ExternalControl , 1 }, // unsigned char char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char char ServoFilterRoll;
{ param_Servo3OnValue , 1 }, // unsigned char char Servo3OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo3OffValue , 1 }, // unsigned char char Servo3OffValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OnValue , 1 }, // unsigned char char Servo4OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OffValue , 1 }, // unsigned char char Servo4OffValue; // ab Rev. 101 (FC 2.05f)
{ param_StartLandChannel , 1 }, // unsigned char char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char char LandingSpeed;
{ param_CompassOffset , 1 }, // unsigned char char CompassOffset;
{ param_AutoLandingVoltage , 1 }, // unsigned char char AutoLandingVoltage; // in 0,1V 0 -> disabled
{ param_ComingHomeVoltage , 1 }, // unsigned char char ComingHomeVoltage; // in 0,1V 0 -> disabled
{ param_AutoPhotoAtitudes , 1 }, // unsigned char char AutoPhotoAtitudes; // ab Rev. 100
{ param_SingleWpSpeed , 1 }, // unsigned char char SingleWpSpeed; // ab Rev. 100
{ param_BitConfig , 1 }, // unsigned char char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_102[]
 
 
 
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 103
//
// ab FC-Version: ab 2.07f bis ???
// gefunden in: 2.07f
//
// STRUKTUR-DIFF zu 102:
// keine
//
// DEFINE-DIFF zu 102:
// - chg: Hoehe_GPS_Z zu Hoehe_TiltCompensation
//-----------------------------------------------
paramRevItem_t const paramset_103[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_TiltCompensation , 1 }, // unsigned char char Hoehe_TiltCompensation; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char char Hoehe_StickNeutralPoint; // Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char char ServoManualControlSpeed; //
{ param_CamOrientation , 1 }, // unsigned char char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char char WARN_J17_Bitmask; // for the J17 Output
{ param_AutoPhotoDistance , 1 }, // unsigned char char AutoPhotoDistance; // Auto Photo // ab Rev. 100 (ehemals NaviOut1Parameter)
{ param_NaviGpsModeChannel , 1 }, // unsigned char char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviMaxFlyingRange , 1 }, // unsigned char char NaviMaxFlyingRange; // in 10m
{ param_NaviAngleLimitation , 1 }, // unsigned char char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char char NaviPH_LoginTime;
{ param_NaviDescendRange , 1 }, // unsigned char char NaviDescendRange;
{ param_ExternalControl , 1 }, // unsigned char char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char char ServoFilterRoll;
{ param_Servo3OnValue , 1 }, // unsigned char char Servo3OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo3OffValue , 1 }, // unsigned char char Servo3OffValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OnValue , 1 }, // unsigned char char Servo4OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OffValue , 1 }, // unsigned char char Servo4OffValue; // ab Rev. 101 (FC 2.05f)
{ param_StartLandChannel , 1 }, // unsigned char char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char char LandingSpeed;
{ param_CompassOffset , 1 }, // unsigned char char CompassOffset;
{ param_AutoLandingVoltage , 1 }, // unsigned char char AutoLandingVoltage; // in 0,1V 0 -> disabled
{ param_ComingHomeVoltage , 1 }, // unsigned char char ComingHomeVoltage; // in 0,1V 0 -> disabled
{ param_AutoPhotoAtitudes , 1 }, // unsigned char char AutoPhotoAtitudes; // ab Rev. 100
{ param_SingleWpSpeed , 1 }, // unsigned char char SingleWpSpeed; // ab Rev. 100
{ param_BitConfig , 1 }, // unsigned char char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_103[]
 
 
 
//-----------------------------------------------
// FC-Parameter Revision: 104
//
// ab FC-Version: ab 2.09d bis ???
// gefunden in: 2.09d
//
// STRUKTUR-DIFF zu 103:
// add: LandingPulse
//
 
//-----------------------------------------------
paramRevItem_t const paramset_104[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_TiltCompensation , 1 }, // unsigned char char Hoehe_TiltCompensation; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char char Hoehe_StickNeutralPoint; // Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char char ServoManualControlSpeed; //
{ param_CamOrientation , 1 }, // unsigned char char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char char WARN_J17_Bitmask; // for the J17 Output
{ param_AutoPhotoDistance , 1 }, // unsigned char char AutoPhotoDistance; // Auto Photo // ab Rev. 100 (ehemals NaviOut1Parameter)
{ param_NaviGpsModeChannel , 1 }, // unsigned char char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviMaxFlyingRange , 1 }, // unsigned char char NaviMaxFlyingRange; // in 10m
{ param_NaviAngleLimitation , 1 }, // unsigned char char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char char NaviPH_LoginTime;
{ param_NaviDescendRange , 1 }, // unsigned char char NaviDescendRange;
{ param_ExternalControl , 1 }, // unsigned char char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char char ServoFilterRoll;
{ param_Servo3OnValue , 1 }, // unsigned char char Servo3OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo3OffValue , 1 }, // unsigned char char Servo3OffValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OnValue , 1 }, // unsigned char char Servo4OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OffValue , 1 }, // unsigned char char Servo4OffValue; // ab Rev. 101 (FC 2.05f)
{ param_StartLandChannel , 1 }, // unsigned char char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char char LandingSpeed;
{ param_CompassOffset , 1 }, // unsigned char char CompassOffset;
{ param_AutoLandingVoltage , 1 }, // unsigned char char AutoLandingVoltage; // in 0,1V 0 -> disabled
{ param_ComingHomeVoltage , 1 }, // unsigned char char ComingHomeVoltage; // in 0,1V 0 -> disabled
{ param_AutoPhotoAtitudes , 1 }, // unsigned char char AutoPhotoAtitudes; // ab Rev. 100
{ param_SingleWpSpeed , 1 }, // unsigned char char SingleWpSpeed; // ab Rev. 100
{ param_LandingPulse , 1 }, // unsigned char char LandingPulse; // ab Rev. 104 (FC 2.09d)
{ param_BitConfig , 1 }, // unsigned char char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_104[]
 
//-----------------------------------------------
// FC-Parameter Revision: 105
//
// ab FC-Version: ab 2.09j bis ???
// gefunden in: 2.09j
//
// STRUKTUR-DIFF zu 104:
// add: unsigned char ServoFS_Pos[5];
//
 
//-----------------------------------------------
paramRevItem_t const paramset_105[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_TiltCompensation , 1 }, // unsigned char char Hoehe_TiltCompensation; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char char Hoehe_StickNeutralPoint; // Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char char ServoManualControlSpeed; //
{ param_CamOrientation , 1 }, // unsigned char char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char char WARN_J17_Bitmask; // for the J17 Output
{ param_AutoPhotoDistance , 1 }, // unsigned char char AutoPhotoDistance; // Auto Photo // ab Rev. 100 (ehemals NaviOut1Parameter)
{ param_NaviGpsModeChannel , 1 }, // unsigned char char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviMaxFlyingRange , 1 }, // unsigned char char NaviMaxFlyingRange; // in 10m
{ param_NaviAngleLimitation , 1 }, // unsigned char char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char char NaviPH_LoginTime;
{ param_NaviDescendRange , 1 }, // unsigned char char NaviDescendRange;
{ param_ExternalControl , 1 }, // unsigned char char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char char ServoFilterRoll;
{ param_Servo3OnValue , 1 }, // unsigned char char Servo3OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo3OffValue , 1 }, // unsigned char char Servo3OffValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OnValue , 1 }, // unsigned char char Servo4OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OffValue , 1 }, // unsigned char char Servo4OffValue; // ab Rev. 101 (FC 2.05f)
{ param_ServoFS_Pos , 5 }, // unsigned char ServoFS_Pos[5]; // ab Rev. 105 (FC 2.09i)
{ param_StartLandChannel , 1 }, // unsigned char char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char char LandingSpeed;
{ param_CompassOffset , 1 }, // unsigned char char CompassOffset;
{ param_AutoLandingVoltage , 1 }, // unsigned char char AutoLandingVoltage; // in 0,1V 0 -> disabled
{ param_ComingHomeVoltage , 1 }, // unsigned char char ComingHomeVoltage; // in 0,1V 0 -> disabled
{ param_AutoPhotoAtitudes , 1 }, // unsigned char char AutoPhotoAtitudes; // ab Rev. 100
{ param_SingleWpSpeed , 1 }, // unsigned char char SingleWpSpeed; // ab Rev. 100
{ param_LandingPulse , 1 }, // unsigned char char LandingPulse; // ab Rev. 104 (FC 2.09d)
{ param_BitConfig , 1 }, // unsigned char char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_105[]
 
 
//-----------------------------------------------
// FC-Parameter Revision: 106
//
// ab FC-Version: ab 2.11a bis ???
// gefunden in: 2.11a
//
// STRUKTUR-DIFF zu 105:
// add: unsigned char SingleWpControlChannel;
// unsigned char MenuKeyChannel;
 
//
 
//-----------------------------------------------
paramRevItem_t const paramset_106[] PROGMEM =
{
{ param_Revision , 1 }, // unsigned char Revision;
{ param_Kanalbelegung , 12 }, // unsigned char char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
{ param_GlobalConfig , 1 }, // unsigned char char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
{ param_Hoehe_MinGas , 1 }, // unsigned char char Hoehe_MinGas; // Wert : 0-100
{ param_Luftdruck_D , 1 }, // unsigned char char Luftdruck_D; // Wert : 0-250
{ param_HoeheChannel , 1 }, // unsigned char char HoeheChannel; // Wert : 0-32
{ param_Hoehe_P , 1 }, // unsigned char char Hoehe_P; // Wert : 0-32
{ param_Hoehe_Verstaerkung , 1 }, // unsigned char char Hoehe_Verstaerkung; // Wert : 0-50
{ param_Hoehe_ACC_Wirkung , 1 }, // unsigned char char Hoehe_ACC_Wirkung; // Wert : 0-250
{ param_Hoehe_HoverBand , 1 }, // unsigned char char Hoehe_HoverBand; // Wert : 0-250
{ param_Hoehe_TiltCompensation , 1 }, // unsigned char char Hoehe_TiltCompensation; // Wert : 0-250
{ param_Hoehe_StickNeutralPoint , 1 }, // unsigned char char Hoehe_StickNeutralPoint; // Wert : 0-250
{ param_Stick_P , 1 }, // unsigned char char Stick_P; // Wert : 1-6
{ param_Stick_D , 1 }, // unsigned char char Stick_D; // Wert : 0-64
{ param_StickGier_P , 1 }, // unsigned char char StickGier_P; // Wert : 1-20
{ param_Gas_Min , 1 }, // unsigned char char Gas_Min; // Wert : 0-32
{ param_Gas_Max , 1 }, // unsigned char char Gas_Max; // Wert : 33-250
{ param_GyroAccFaktor , 1 }, // unsigned char char GyroAccFaktor; // Wert : 1-64
{ param_KompassWirkung , 1 }, // unsigned char char KompassWirkung; // Wert : 0-32
{ param_Gyro_P , 1 }, // unsigned char char Gyro_P; // Wert : 10-250
{ param_Gyro_I , 1 }, // unsigned char char Gyro_I; // Wert : 0-250
{ param_Gyro_D , 1 }, // unsigned char char Gyro_D; // Wert : 0-250
{ param_Gyro_Gier_P , 1 }, // unsigned char char Gyro_Gier_P; // Wert : 10-250
{ param_Gyro_Gier_I , 1 }, // unsigned char char Gyro_Gier_I; // Wert : 0-250
{ param_Gyro_Stability , 1 }, // unsigned char char Gyro_Stability; // Wert : 0-16
{ param_UnterspannungsWarnung , 1 }, // unsigned char char UnterspannungsWarnung; // Wert : 0-250
{ param_NotGas , 1 }, // unsigned char char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
{ param_NotGasZeit , 1 }, // unsigned char char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
{ param_Receiver , 1 }, // unsigned char char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
{ param_I_Faktor , 1 }, // unsigned char char I_Faktor; // Wert : 0-250
{ param_UserParam1 , 1 }, // unsigned char char UserParam1; // Wert : 0-250
{ param_UserParam2 , 1 }, // unsigned char char UserParam2; // Wert : 0-250
{ param_UserParam3 , 1 }, // unsigned char char UserParam3; // Wert : 0-250
{ param_UserParam4 , 1 }, // unsigned char char UserParam4; // Wert : 0-250
{ param_ServoNickControl , 1 }, // unsigned char char ServoNickControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoNickComp , 1 }, // unsigned char char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
{ param_ServoNickMin , 1 }, // unsigned char char ServoNickMin; // Wert : 0-250 // Anschlag
{ param_ServoNickMax , 1 }, // unsigned char char ServoNickMax; // Wert : 0-250 // Anschlag
{ param_ServoRollControl , 1 }, // unsigned char char ServoRollControl; // Wert : 0-250 // Stellung des Servos
{ param_ServoRollComp , 1 }, // unsigned char char ServoRollComp; // Wert : 0-250
{ param_ServoRollMin , 1 }, // unsigned char char ServoRollMin; // Wert : 0-250
{ param_ServoRollMax , 1 }, // unsigned char char ServoRollMax; // Wert : 0-250
{ param_ServoNickRefresh , 1 }, // unsigned char char ServoNickRefresh; // Speed of the Servo
{ param_ServoManualControlSpeed , 1 }, // unsigned char char ServoManualControlSpeed; //
{ param_CamOrientation , 1 }, // unsigned char char CamOrientation; //
{ param_Servo3 , 1 }, // unsigned char char Servo3; // Value or mapping of the Servo Output
{ param_Servo4 , 1 }, // unsigned char char Servo4; // Value or mapping of the Servo Output
{ param_Servo5 , 1 }, // unsigned char char Servo5; // Value or mapping of the Servo Output
{ param_LoopGasLimit , 1 }, // unsigned char char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
{ param_LoopThreshold , 1 }, // unsigned char char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
{ param_LoopHysterese , 1 }, // unsigned char char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
{ param_AchsKopplung1 , 1 }, // unsigned char char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
{ param_AchsKopplung2 , 1 }, // unsigned char char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_CouplingYawCorrection , 1 }, // unsigned char char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
{ param_WinkelUmschlagNick , 1 }, // unsigned char char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
{ param_WinkelUmschlagRoll , 1 }, // unsigned char char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
{ param_GyroAccAbgleich , 1 }, // unsigned char char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
{ param_Driftkomp , 1 }, // unsigned char char Driftkomp;
{ param_DynamicStability , 1 }, // unsigned char char DynamicStability;
{ param_UserParam5 , 1 }, // unsigned char char UserParam5; // Wert : 0-250
{ param_UserParam6 , 1 }, // unsigned char char UserParam6; // Wert : 0-250
{ param_UserParam7 , 1 }, // unsigned char char UserParam7; // Wert : 0-250
{ param_UserParam8 , 1 }, // unsigned char char UserParam8; // Wert : 0-250
{ param_J16Bitmask , 1 }, // unsigned char char J16Bitmask; // for the J16 Output
{ param_J16Timing , 1 }, // unsigned char char J16Timing; // for the J16 Output
{ param_J17Bitmask , 1 }, // unsigned char char J17Bitmask; // for the J17 Output
{ param_J17Timing , 1 }, // unsigned char char J17Timing; // for the J17 Output
{ param_WARN_J16_Bitmask , 1 }, // unsigned char char WARN_J16_Bitmask; // for the J16 Output
{ param_WARN_J17_Bitmask , 1 }, // unsigned char char WARN_J17_Bitmask; // for the J17 Output
{ param_AutoPhotoDistance , 1 }, // unsigned char char AutoPhotoDistance; // Auto Photo // ab Rev. 100 (ehemals NaviOut1Parameter)
{ param_NaviGpsModeChannel , 1 }, // unsigned char char NaviGpsModeChannel; // Parameters for the Naviboard
{ param_NaviGpsGain , 1 }, // unsigned char char NaviGpsGain;
{ param_NaviGpsP , 1 }, // unsigned char char NaviGpsP;
{ param_NaviGpsI , 1 }, // unsigned char char NaviGpsI;
{ param_NaviGpsD , 1 }, // unsigned char char NaviGpsD;
{ param_NaviGpsPLimit , 1 }, // unsigned char char NaviGpsPLimit;
{ param_NaviGpsILimit , 1 }, // unsigned char char NaviGpsILimit;
{ param_NaviGpsDLimit , 1 }, // unsigned char char NaviGpsDLimit;
{ param_NaviGpsA , 1 }, // unsigned char char NaviGpsA;
{ param_NaviGpsMinSat , 1 }, // unsigned char char NaviGpsMinSat;
{ param_NaviStickThreshold , 1 }, // unsigned char char NaviStickThreshold;
{ param_NaviWindCorrection , 1 }, // unsigned char char NaviWindCorrection;
{ param_NaviAccCompensation , 1 }, // unsigned char char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
{ param_NaviMaxFlyingRange , 1 }, // unsigned char char NaviMaxFlyingRange; // in 10m
{ param_NaviAngleLimitation , 1 }, // unsigned char char NaviAngleLimitation;
{ param_NaviPH_LoginTime , 1 }, // unsigned char char NaviPH_LoginTime;
{ param_NaviDescendRange , 1 }, // unsigned char char NaviDescendRange;
{ param_ExternalControl , 1 }, // unsigned char char ExternalControl; // for serial Control
{ param_OrientationAngle , 1 }, // unsigned char char OrientationAngle; // Where is the front-direction?
{ param_CareFreeChannel , 1 }, // unsigned char char CareFreeChannel; // switch for CareFree
{ param_MotorSafetySwitch , 1 }, // unsigned char char MotorSafetySwitch;
{ param_MotorSmooth , 1 }, // unsigned char char MotorSmooth;
{ param_ComingHomeAltitude , 1 }, // unsigned char char ComingHomeAltitude;
{ param_FailSafeTime , 1 }, // unsigned char char FailSafeTime;
{ param_MaxAltitude , 1 }, // unsigned char char MaxAltitude;
{ param_FailsafeChannel , 1 }, // unsigned char char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
{ param_ServoFilterNick , 1 }, // unsigned char char ServoFilterNick;
{ param_ServoFilterRoll , 1 }, // unsigned char char ServoFilterRoll;
{ param_Servo3OnValue , 1 }, // unsigned char char Servo3OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo3OffValue , 1 }, // unsigned char char Servo3OffValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OnValue , 1 }, // unsigned char char Servo4OnValue; // ab Rev. 101 (FC 2.05f)
{ param_Servo4OffValue , 1 }, // unsigned char char Servo4OffValue; // ab Rev. 101 (FC 2.05f)
{ param_ServoFS_Pos , 5 }, // unsigned char ServoFS_Pos[5]; // ab Rev. 105 (FC 2.09i)
{ param_StartLandChannel , 1 }, // unsigned char char StartLandChannel;
{ param_LandingSpeed , 1 }, // unsigned char char LandingSpeed;
{ param_CompassOffset , 1 }, // unsigned char char CompassOffset;
{ param_AutoLandingVoltage , 1 }, // unsigned char char AutoLandingVoltage; // in 0,1V 0 -> disabled
{ param_ComingHomeVoltage , 1 }, // unsigned char char ComingHomeVoltage; // in 0,1V 0 -> disabled
{ param_AutoPhotoAtitudes , 1 }, // unsigned char char AutoPhotoAtitudes; // ab Rev. 100
{ param_SingleWpSpeed , 1 }, // unsigned char char SingleWpSpeed; // ab Rev. 100
{ param_LandingPulse , 1 }, // unsigned char char LandingPulse; // ab Rev. 104 (FC 2.09d)
{ param_SingleWpControlChannel , 1 }, // unsigned char SingleWpControlChannel; // ab Rev. 106 (FC2.11a)
{ param_MenuKeyChannel , 1 }, // unsigned char MenuKeyChannel; // ab Rev. 106 (FC2.11a)
{ param_BitConfig , 1 }, // unsigned char char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
{ param_ServoCompInvert , 1 }, // unsigned char char ServoCompInvert; // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
{ param_ExtraConfig , 1 }, // unsigned char char ExtraConfig; // bitcodiert
{ param_GlobalConfig3 , 1 }, // unsigned char char GlobalConfig3; // bitcodiert
{ param_Name , 12 }, // char Name[12];
{ param_crc , 1 }, // unsigned char char crc; // must be the last byte!
 
{ param_EOF , 0 } // END OF PARAM-LIST - MUST BE THE LAST!!
 
}; // end: paramset_106[]
 
 
 
 
//#############################################################################################
//# 1b. Zuweisungstabelle: Revision -> paramset_xxx
//#############################################################################################
 
typedef struct
{
unsigned char Revision;
const paramRevItem_t *RevisionTable;
} paramsetRevMap_t;
 
#define MAPEOF 255
 
 
//----------------------------------------------------------------
// Mappingtabelle zwischen FC-Revision und Paramset-Tabelle
//
// Anmerkung bzgl. Groesse:
// Angenommen man wuerde die Rev 97 bis 90 weglassen, dann
// wuerde man ca. 1 KByte sparen
//----------------------------------------------------------------
paramsetRevMap_t paramsetRevMap[] =
{
{ 106 , paramset_106 }, // 2.11a
{ 105 , paramset_105 }, // 2.09j
{ 104 , paramset_104 }, // 2.09d
{ 103 , paramset_103 }, // 2.07f
{ 102 , paramset_102 }, // 2.05g (bis min. 2.06b)
{ 101 , paramset_101 }, // 2.05f (eingeschraenkte Unterstuetzung - ) nur in einer einzigen Betaversion vorhanden!)
{ 100 , paramset_100 }, // 2.05e (Anmerkung OG 06.04.2014: ggf. spaeter loeschen um Platz zu sparen da diese Version nur in einigen wenigen Betaversionen vorhanden ist)
// Rev. 99: nicht vorhanden; ignorieren
{ 98 , paramset_098 }, // 2.03d
{ 97 , paramset_097 }, // 2.02b
{ 96 , paramset_095 }, // ??? (keine Struktur-Aenderung zu 095)
{ 95 , paramset_095 }, // 0.90L, 2.00a, 2.00e
{ 94 , paramset_094 }, // eingeschraenkte Unterstuetzung; 0.91a
{ 93 , paramset_093 }, // eingeschraenkte Unterstuetzung; 0.90e, 0.90g, 0.90j
{ 92 , paramset_093 }, // eingeschraenkte Unterstuetzung; 0.90d (keine Struktur-Aenderung zu 093)
{ 91 , paramset_091 }, // eingeschraenkte Unterstuetzung; 0.88m, 0.88n
{ 90 , paramset_091 }, // eingeschraenkte Unterstuetzung; 0.88e (keine Struktur-Aenderung zu 091)
 
{ MAPEOF, 0 } // END OF LIST - MUST BE THE LAST!!
};
 
 
 
 
//#############################################################################################
//# 2. Konfigurationstabelle der paramSubID's (Bit- und Bytefelder)
//#############################################################################################
 
//---------------------------------------
// struct: einzelnes Parameter-SubItem
//---------------------------------------
typedef struct
{
unsigned char paramSubID; // groesser/gleich PARAMSUBITEMS
unsigned char paramID; // -> mapping auf entsprechende paramID
unsigned char subType; // SUBTYPE_BIT oder SUBTYPE_BYTE
unsigned char subIndex; // bei SUBTYPE_BIT: Bitmask z.b. 0x02
// bei SUBTYPE_BYTE: index des Bytes (siehe param_Kanalbelegung)
unsigned char von_Revision; // ab welcher FC-Revision ist das SubItem vorhanden (0=immer)
unsigned char bis_Revision; // bis zu welcher FC-Revision ist das SubItem vorhanden (0=immer)
} paramSubItem_t;
 
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
// +- von_Revision
// |
// +- paramSubID +- gehoert zu? +- Bit/Byte? +- Bit/Byte der paramID | +- bis_Revision
// | | | | | |
//--|-----------------------------------------|----------------------|--------------|----------------------------------|--|----------------------------------------------
paramSubItem_t const paramSubItem[] PROGMEM =
{
{ param_ServoCompInvert_SERVO_NICK_INV , param_ServoCompInvert, SUBTYPE_BIT, SERVO_NICK_INV , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: SVNick 0x01
{ param_ServoCompInvert_SERVO_ROLL_INV , param_ServoCompInvert, SUBTYPE_BIT, SERVO_ROLL_INV , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: SVRoll 0x02
{ param_ServoCompInvert_SERVO_RELATIVE , param_ServoCompInvert, SUBTYPE_BIT, SERVO_RELATIVE , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: SVRelMov 0x04
 
{ param_ExtraConfig_HeightLimit , param_ExtraConfig, SUBTYPE_BIT, CFG2_HEIGHT_LIMIT , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG2_HEIGHT_LIMIT 0x01
{ param_ExtraConfig_HeightVario , param_ExtraConfig, SUBTYPE_BITN, CFG2_HEIGHT_LIMIT , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG2_HEIGHT_LIMIT 0x01 negiert zu param_ExtraConfig_HeightLimit
{ param_ExtraConfig_VarioBeep , param_ExtraConfig, SUBTYPE_BIT, CFG2_VARIO_BEEP , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG2_VARIO_BEEP 0x02
{ param_ExtraConfig_SensitiveRc , param_ExtraConfig, SUBTYPE_BIT, CFG_SENSITIVE_RC , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_SENSITIVE_RC 0x04
{ param_ExtraConfig_33vReference , param_ExtraConfig, SUBTYPE_BIT, CFG_3_3V_REFERENCE , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_3_3V_REFERENCE 0x08
{ param_ExtraConfig_NoRcOffBeeping , param_ExtraConfig, SUBTYPE_BIT, CFG_NO_RCOFF_BEEPING , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_NO_RCOFF_BEEPING 0x10
{ param_ExtraConfig_GpsAid , param_ExtraConfig, SUBTYPE_BIT, CFG_GPS_AID , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_GPS_AID 0x20
{ param_ExtraConfig_LearnableCarefree , param_ExtraConfig, SUBTYPE_BIT, CFG_LEARNABLE_CAREFREE , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_LEARNABLE_CAREFREE 0x40
{ param_ExtraConfig_IgnoreMagErrAtStartup , param_ExtraConfig, SUBTYPE_BIT, CFG_IGNORE_MAG_ERR_AT_STARTUP , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80
 
{ param_BitConfig_LoopOben , param_BitConfig, SUBTYPE_BIT, CFG_LOOP_OBEN , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_LOOP_OBEN 0x01
{ param_BitConfig_LoopUnten , param_BitConfig, SUBTYPE_BIT, CFG_LOOP_UNTEN , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_LOOP_UNTEN 0x02
{ param_BitConfig_LoopLinks , param_BitConfig, SUBTYPE_BIT, CFG_LOOP_LINKS , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_LOOP_LINKS 0x04
{ param_BitConfig_LoopRechts , param_BitConfig, SUBTYPE_BIT, CFG_LOOP_RECHTS , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_LOOP_RECHTS 0x08
{ param_BitConfig_MotorBlink1 , param_BitConfig, SUBTYPE_BIT, CFG_MOTOR_BLINK1 , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_MOTOR_BLINK1 0x10
{ param_BitConfig_MotorOffLed1 , param_BitConfig, SUBTYPE_BIT, CFG_MOTOR_OFF_LED1 , 0,101}, // SUBTYPE_BIT - mk-data-structs.h: CFG_MOTOR_OFF_LED1 0x20
{ param_BitConfig_MotorOffLed2 , param_BitConfig, SUBTYPE_BIT, CFG_MOTOR_OFF_LED2 , 0,101}, // SUBTYPE_BIT - mk-data-structs.h: CFG_MOTOR_OFF_LED2 0x40
{ param_BitConfig_MotorBlink2 , param_BitConfig, SUBTYPE_BIT, CFG_MOTOR_BLINK2 , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_MOTOR_BLINK2 0x80
 
{ param_GlobalConfig3_NoSdCardNoStart , param_GlobalConfig3, SUBTYPE_BIT, CFG3_NO_SDCARD_NO_START , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG3_NO_SDCARD_NO_START 0x01
{ param_GlobalConfig3_DphMaxRadius , param_GlobalConfig3, SUBTYPE_BIT, CFG3_DPH_MAX_RADIUS , 0,100}, // SUBTYPE_BIT - mk-data-structs.h: CFG3_DPH_MAX_RADIUS 0x02
{ param_GlobalConfig3_VarioFailsafe , param_GlobalConfig3, SUBTYPE_BIT, CFG3_VARIO_FAILSAFE , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG3_VARIO_FAILSAFE 0x04
{ param_GlobalConfig3_MotorSwitchMode , param_GlobalConfig3, SUBTYPE_BIT, CFG3_MOTOR_SWITCH_MODE , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG3_MOTOR_SWITCH_MODE 0x08
{ param_GlobalConfig3_NoGpsFixNoStart , param_GlobalConfig3, SUBTYPE_BIT, CFG3_NO_GPSFIX_NO_START , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG3_NO_GPSFIX_NO_START 0x10
{ param_GlobalConfig3_UseNcForOut1 , param_GlobalConfig3, SUBTYPE_BIT, CFG3_USE_NC_FOR_OUT1 , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG3_USE_NC_FOR_OUT1 0x20
{ param_GlobalConfig3_SpeakAll , param_GlobalConfig3, SUBTYPE_BIT, CFG3_SPEAK_ALL , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG3_SPEAK_ALL 0x40
{ param_GlobalConfig3_ServoNickCompOff , param_GlobalConfig3, SUBTYPE_BIT, CFG3_SERVO_NICK_COMP_OFF , 96, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG3_SERVO_NICK_COMP_OFF 0x80
 
{ param_GlobalConfig_HoehenRegelung , param_GlobalConfig, SUBTYPE_BIT, CFG_HOEHENREGELUNG , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_HOEHENREGELUNG 0x01
{ param_GlobalConfig_HoehenSchalter , param_GlobalConfig, SUBTYPE_BIT, CFG_HOEHEN_SCHALTER , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_HOEHEN_SCHALTER 0x02
{ param_GlobalConfig_HeadingHold , param_GlobalConfig, SUBTYPE_BIT, CFG_HEADING_HOLD , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_HEADING_HOLD 0x04
{ param_GlobalConfig_KompassAktiv , param_GlobalConfig, SUBTYPE_BIT, CFG_KOMPASS_AKTIV , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_KOMPASS_AKTIV 0x08
{ param_GlobalConfig_KompassFix , param_GlobalConfig, SUBTYPE_BIT, CFG_KOMPASS_FIX , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_KOMPASS_FIX 0x10
{ param_GlobalConfig_GpsAktiv , param_GlobalConfig, SUBTYPE_BIT, CFG_GPS_AKTIV , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_GPS_AKTIV 0x20
{ param_GlobalConfig_AchsenkopplungAktiv , param_GlobalConfig, SUBTYPE_BIT, CFG_ACHSENKOPPLUNG_AKTIV , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_ACHSENKOPPLUNG_AKTIV 0x40
{ param_GlobalConfig_DrehratenBegrenzer , param_GlobalConfig, SUBTYPE_BIT, CFG_DREHRATEN_BEGRENZER , 0, 0}, // SUBTYPE_BIT - mk-data-structs.h: CFG_DREHRATEN_BEGRENZER 0x80
 
{ param_Kanalbelegung_Nick , param_Kanalbelegung, SUBTYPE_BYTE, 0 , 0, 0}, // -> Kanalbelegung[12]
{ param_Kanalbelegung_Roll , param_Kanalbelegung, SUBTYPE_BYTE, 1 , 0, 0},
{ param_Kanalbelegung_Gas , param_Kanalbelegung, SUBTYPE_BYTE, 2 , 0, 0},
{ param_Kanalbelegung_Gear , param_Kanalbelegung, SUBTYPE_BYTE, 3 , 0, 0},
{ param_Kanalbelegung_Poti1 , param_Kanalbelegung, SUBTYPE_BYTE, 4 , 0, 0},
{ param_Kanalbelegung_Poti2 , param_Kanalbelegung, SUBTYPE_BYTE, 5 , 0, 0},
{ param_Kanalbelegung_Poti3 , param_Kanalbelegung, SUBTYPE_BYTE, 6 , 0, 0},
{ param_Kanalbelegung_Poti4 , param_Kanalbelegung, SUBTYPE_BYTE, 7 , 0, 0},
{ param_Kanalbelegung_Poti5 , param_Kanalbelegung, SUBTYPE_BYTE, 8 , 0, 0},
{ param_Kanalbelegung_Poti6 , param_Kanalbelegung, SUBTYPE_BYTE, 9 , 0, 0},
{ param_Kanalbelegung_Poti7 , param_Kanalbelegung, SUBTYPE_BYTE, 10 , 0, 0},
{ param_Kanalbelegung_Poti8 , param_Kanalbelegung, SUBTYPE_BYTE, 11 , 0, 0},
 
{ param_CompassOffset_DisableDeclCalc , param_CompassOffset, SUBTYPE_BYTE, 0 , 0, 0}, // ist in Bit 8 und 7 von CompassOffset kodiert
{ param_ComingHomeOrientation , param_ServoCompInvert, SUBTYPE_BYTE, 0 , 0, 0}, // ist in Bit 5 und 4 von CervoCompInvert
 
{ param_ServoNickFailsave , param_ServoFS_Pos, SUBTYPE_BYTE, 0 , 0, 0},
{ param_ServoRollFailsave , param_ServoFS_Pos, SUBTYPE_BYTE, 1 , 0, 0},
{ param_Servo3Failsave , param_ServoFS_Pos, SUBTYPE_BYTE, 2 , 0, 0},
{ param_Servo4Failsave , param_ServoFS_Pos, SUBTYPE_BYTE, 3 , 0, 0},
{ param_Servo5Failsave , param_ServoFS_Pos, SUBTYPE_BYTE, 4 , 0, 0},
 
{ param_EOF , 0,0,0,0,0 } // END - MUST BE THE LAST!!
}; // end: paramSubItem[]
 
 
 
//#############################################################################################
//# 3a. Transformations-Tabelle
//#############################################################################################
 
//---------------------------------------
// struct: einzelnes Parameter-SubItem
//---------------------------------------
typedef struct
{
unsigned char paramID; // paramID oder paramSubID
unsigned char (*transformfunc)( uint8_t cmd, unsigned char value, unsigned char newvalue ); // Edit-Funktion (z.B. editGeneric()); cmd = CMD_EDIT oder CMD_SHORTVALUE
} paramTransform_t;
 
 
 
//---------------------------------------
// forward Deklarationen fuer transform
//---------------------------------------
unsigned char transform_CompassOffset_DisableDeclCalc( uint8_t cmd, unsigned char value, unsigned char newvalue );
unsigned char transform_ComingHomeOrientation( uint8_t cmd, unsigned char value, unsigned char newvalue );
//unsigned char transform_ValueACCZ( uint16_t cmd, uint16_t value, uint16_t newvalue );
 
//---------------------------------------
//---------------------------------------
paramTransform_t const paramTransform[] =
{
{ param_CompassOffset_DisableDeclCalc , &transform_CompassOffset_DisableDeclCalc },
{ param_ComingHomeOrientation , &transform_ComingHomeOrientation },
// { param_LandingPulse, &transform_ValueACCZ},
 
{ param_EOF , NULL } // END - MUST BE THE LAST!!
};
 
 
 
 
//#############################################################################################
//# 3b. Transformations-Funktionen
//#############################################################################################
 
//---------------------------------------
// transform_CompassOffset_DisableDeclCalc()
//
// PARAMETER:
// cmd : GETVALUE || SETVALUE
// value :
// newvalue: nur wenn cmd == SETVALUE
//
// Der true/false (Ja/Nein) Wert von param_CompassOffset_DisableDeclCalc
// ist in dem Byte von param_CompassOffset in den Bits 7 & 8 einkodiert.
//---------------------------------------
unsigned char transform_CompassOffset_DisableDeclCalc( uint8_t cmd, unsigned char value, unsigned char newvalue )
{
uint8_t bit7;
uint8_t bit8;
 
bit7 = ((value & 0x40) ? true : false);
bit8 = ((value & 0x80) ? true : false);
 
if( cmd == GETVALUE )
{
// Bit 8 == Bit 7: Disable dec. Calc AUS
// Bit 8 != Bit 7: Disable dec. Calc AN
value = ((bit8 == bit7) ? 0 : 1);
}
 
if( cmd == SETVALUE )
{
if( newvalue ) bit8 = !bit7; // Bit 8 != Bit 7: Disable dec. Calc AN
else bit8 = bit7; // Bit 8 == Bit 7: Disable dec. Calc AUS
 
if( bit8 ) value = (value | 0x80); // Bit 8 setzen
else value = (value & (0x80 ^ 0xff)); // Bit 8 loeschen
}
 
 
//lcdx_printf_at_P( 0, 7, MINVERS, 0,0 , PSTR(" %d => %d "), value, newvalue );
 
return value;
}
 
//---------------------------------------
// transform_ComingHomeOrientation()
//
// PARAMETER:
// cmd : GETVALUE || SETVALUE
// value :
// newvalue: nur wenn cmd == SETVALUE
//
//
// ist in dem Byte von param_ServoCompInvert in den Bits 4 & 5 einkodiert, Bits 1-3 bleiben unverändert
//---------------------------------------
 
uint8_t save =0; // globale Variable zum Sichern des alten Byte ServoCompInvert Wertes
 
unsigned char transform_ComingHomeOrientation( uint8_t cmd, unsigned char value, unsigned char newvalue )
{
 
if( cmd == GETVALUE )
{
save = value; // altes "gemeinsames" Byte ServoCompInvert sichern
value =((value & 0x18) >> 3); // CominghomeOrientation Bits nach rechts verschieben
}
 
if( cmd == SETVALUE )
{
value = ((newvalue << 3)|(save & 0x07)); // CominghomeOrientation Bits nach links verschieben und "alte" Bits 1-3 wieder dazufügen
}
 
 
//lcdx_printf_at_P( 0, 7, MINVERS, 0,0 , PSTR(" %d => %d "), value, newvalue );
 
return value;
}
 
//
//
////---------------------------------------
//// transform_ValueACCZ()
////
//// PARAMETER:
//// cmd : GETVALUE || SETVALUE
//// value :
//// newvalue: nur wenn cmd == SETVALUE
////
////
//// ACC Z Landing Pulse Wert für die Anzeige x 4
////---------------------------------------
//
//
//unsigned char transform_ValueACCZ( uint16_t cmd, uint16_t value, unint16_t newvalue )
//
//uint16_t save16 =0; // globale Variable zum Sichern des alten Byte ServoCompInvert Wertes
//
//{
// if( cmd == GETVALUE )
// {
// save16 = value; // altes Byte ACC Z Landing Pulse sichern
// value = (value * 4); // Wert x 4
// }
//
// if( cmd == SETVALUE )
// {
// value = (newvalue / 4); // Neuer Wert ACC Z Landingpulse /4
// }
//
//
// return value;
//}
 
//#############################################################################################
//# 4a. interne Zugriffsfunktionen
//#############################################################################################
 
//--------------------------------------------------------------
// INTERN
//
// Parameter:
// paramSubID: 'echter' Parameter zum Suchen in paramSubItem[] zum
// nachfolgeden Parameter geben das Suchergebnis zurueck
// und sind alle 0 wenn nichts gefunden wurde
//
// Rueckgabe:
// true/false
//--------------------------------------------------------------
unsigned char _paramset_getsubitemid( unsigned char paramSubID, unsigned char *paramID, unsigned char *subType, unsigned char *subIndex )
{
unsigned char id;
unsigned char *p;
unsigned char von_Revision;
unsigned char bis_Revision;
 
*paramID = 0;
*subType = 0;
*subIndex = 0;
 
p = (unsigned char *) paramSubItem;
 
while( true )
{
id = pgm_read_byte(p+0); // paramSubItem[..].paramSubID - die aktuelle paramSubID
 
if( (id == paramSubID) ) // gefunden?
{
von_Revision = pgm_read_byte(p+4); // paramSubItem[..].von_Revision;
bis_Revision = pgm_read_byte(p+5); // paramSubItem[..].bis_Revision;
 
// in aktueller FC-Revision vorhanden?
if( von_Revision && (MKVersion.paramsetRevision < von_Revision) ) return false; // passt nicht zur aktuellen FC-Revision -> exit
if( bis_Revision && (MKVersion.paramsetRevision > bis_Revision) ) return false; // passt nicht zur aktuellen FC-Revision -> exit
 
*paramID = pgm_read_byte(p+1); // paramSubItem[..].paramID;
*subType = pgm_read_byte(p+2); // paramSubItem[..].subType;
*subIndex = pgm_read_byte(p+3); // paramSubItem[..].subIndex;
return true;
}
 
if( id == param_EOF ) break;
 
p += sizeof( paramSubItem_t );
}
 
return false;
}
 
 
 
 
//--------------------------------------------------------------
// INTERN
//
// Parameter:
// retItemSize: false = offset zurueckgeben (normaler Modus)
// true = size von paramID zurueckgeben (fuer paramSize())
//--------------------------------------------------------------
unsigned char _paramset_getoffsetX( unsigned char paramID, unsigned char retItemSize, unsigned char *subType, unsigned char *subIndex )
{
unsigned char *p;
unsigned char offset;
unsigned char size;
unsigned char this_paramID;
unsigned char paramSubID;
 
*subType = SUBTYPE_NO; // =0
*subIndex = 0;
 
 
size = 0;
offset = param_NOTFOUND;
 
if( MKVersion.paramsetOK )
{
//-----------------------
// eine paramSubID wurde uebergeben
// -> ermittle zugehoerige paramID!
//-----------------------
if( (paramID >= param_SUBITEM) && (paramID != param_EOF) )
{
paramSubID = paramID;
if( !_paramset_getsubitemid( paramSubID, &paramID, subType, subIndex ) )
{
// keine paramID gefunden...
if( retItemSize ) return size; // size == 0
else return offset; // offset == param_NOTFOUND
}
}
 
 
//-----------------------
// paramID suchen
//-----------------------
offset = 0;
 
p = (unsigned char *) paramsetRevTable;
 
while( true )
{
this_paramID = pgm_read_byte(p); // die aktuelle paramID
size = pgm_read_byte(p+1); // size von paramID
 
// gefunden oder Ende
if( (this_paramID == paramID) || (this_paramID == param_EOF) )
{
break;
}
 
offset += size;
p += sizeof( paramRevItem_t );
}
 
 
// paramID nicht gefunden?
if( (this_paramID == param_EOF) && (paramID != param_EOF) )
{
offset = param_NOTFOUND;
size = 0;
}
 
}
 
if( retItemSize ) return size;
else return offset;
}
 
 
 
//--------------------------------------------------------------
// INTERN
//
// Parameter:
// retItemSize == false: offset zurueckgeben (normaler Modus)
// retItemSize == true : size von paramID zurueckgeben
// --> fuer paramSize()
//--------------------------------------------------------------
unsigned char _paramset_getoffset( unsigned char paramID, unsigned char retItemSize )
{
unsigned char subType;
unsigned char subIndex;
 
return _paramset_getoffsetX( paramID, retItemSize, &subType, &subIndex );
}
 
 
 
//--------------------------------------------------------------
// INTERN
//
// sucht/prueft ob eine Transform-Funktion vorhanden ist
//
// RUECKGABE:
// Index: (Num 0..n) auf paramTransform[]
// => param_EOF (=255) wenn keine transform-Funktion vorhanden
//--------------------------------------------------------------
unsigned char _paramset_gettransformIndex( unsigned char paramID )
{
unsigned char i;
 
i = 0;
while( paramTransform[i].paramID != param_EOF )
{
if( paramTransform[i].paramID == paramID ) return i;
if( paramTransform[i].paramID == param_EOF ) return param_EOF;
i++;
}
 
return param_EOF;
}
 
 
 
//#############################################################################################
//# 4b. oeffentliche Zugriffsfunktionen fuer paramID / paramSubID Elemente
//#
//# Hier sind die Getter/Setter um auf die einzelnen Werte der paramset-Struktur zuzugreifen.
//# Dazu muss vorher das richtige paramset initialisert worden sein!
//#
//# ACHTUNG!
//# Fuer die Daten wird direkt auf den RX-Buffer vom PKT zugegriffen!
//# ==> der Buffer darf NICHT durch andere Datenpakete bereits wieder ueberschrieben worden sein!
//#
//# Anmerkung:
//# Das obige 'Achtung' koennte man aendern durch eine Kopie des RX-Buffers. Das verbraucht
//# zusaetzlichen RAM-Speicher -> probieren wir es erstmal so...
//#############################################################################################
 
//--------------------------------------------------------------
// size = paramSize( paramID )
//--------------------------------------------------------------
unsigned char paramSize( unsigned char paramID )
{
return( _paramset_getoffset(paramID,true) ); // true = size (in Bytes) der paramID zurueckgeben (nicht offset)
}
 
 
 
//--------------------------------------------------------------
// exist = paramExist( paramID )
//
// Rueckgabe:
// true : die paramID existiert im aktuellen paramset
// false : die paramID existiert nicht
//--------------------------------------------------------------
unsigned char paramExist( unsigned char paramID )
{
return( (_paramset_getoffset(paramID,true) != 0) ); // true = size (in Bytes) der paramID zurueckgeben (nicht offset)
}
 
 
 
//--------------------------------------------------------------
// pointer = paramGet_p( paramID )
//
// ACHTUNG! Nicht faehig fuer Transform!
//
// RUECKGABE:
// pointer direkt auf~ein Byte im Parameterset
// (paramSubID nicht moeglich!)
//--------------------------------------------------------------
unsigned char *paramGet_p( unsigned char paramID )
{
unsigned char offset;
 
offset = _paramset_getoffset( paramID, false ); // false = offset zurueckgeben
 
if( offset != param_NOTFOUND )
{
return( (unsigned char *) (mkparamset + offset) ); // Rueckgabe: Pointer auf die Daten
}
return 0;
}
 
 
 
//--------------------------------------------------------------
// value = paramGet( paramID )
//
// holt den Wert von paramID. paramSubID's werden dabei
// unterstuetzt (Bit- und Bytefelder).
//
// Bei Bit-Feldern (z.B. GlobalConfig3) wird eine enstprechende
// Bit-Maskierung automatisch durchgefuehrt
// Ergebnis: true (=1) oder false (=0)false (=0)
//
// Bei Byte-Feldern (z.B. Kanalbelegung) wird der Wert des
// entsprechenden Byte's zurueckgegeben
//
// Hinweis: anhand des Rueckgabewertes kann nicht ueberprueft
// werden ob die paramID gefunden wurde bzw. existiert!
// -> ggf. erst mit paramExist() pruefen ob der Wert existiert!
//--------------------------------------------------------------
unsigned char paramGet( unsigned char paramID )
{
unsigned char offset;
unsigned char subType;
unsigned char subIndex;
unsigned char value;
unsigned char transformIdx;
 
offset = _paramset_getoffsetX( paramID, false, &subType, &subIndex ); // false = offset zurueckgeben
 
if( offset == param_NOTFOUND ) return false; // paramID nicht gefunden / nicht unterstuetzt
 
value = (unsigned char) *(mkparamset + offset); // offset Inhalt lesen (paramID)
 
//-------------------
// subIndex: Bit
//-------------------
if( subType == SUBTYPE_BIT )
{
value = ((value & subIndex) ? true : false); // Rueckgabe: true/false des gewaehlten Bit's
}
 
//-------------------
// subIndex: Bit negiert
//-------------------
if( subType == SUBTYPE_BITN )
{
value = ((value & subIndex) ? false : true); // Rueckgabe: true/false des gewaehlten Bit's (negiert)
}
 
//-------------------
// subIndex: Byte
//-------------------
if( subType == SUBTYPE_BYTE )
{
value = (unsigned char) *(mkparamset + (offset+subIndex)); // subIndex Inhalt lesen
}
 
 
//-------------------
// Transform
//-------------------
transformIdx = _paramset_gettransformIndex( paramID );
if( transformIdx != param_EOF )
{
value = paramTransform[transformIdx].transformfunc( GETVALUE, value, value);
}
 
return value; // ubyte zurueckgeben
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
unsigned char paramSet( unsigned char paramID, unsigned char newvalue )
{
unsigned char offset;
unsigned char subOffset = 0;
unsigned char subType;
unsigned char subIndex;
unsigned char byte;
unsigned char value;
unsigned char transformIdx;
 
value = newvalue;
 
offset = _paramset_getoffsetX( paramID, false, &subType, &subIndex ); // false = offset zurueckgeben
 
if( offset == param_NOTFOUND ) return false; // paramID nicht gefunden / nicht unterstuetzt
 
//-------------------
// subIndex: Bit
//-------------------
if( (subType == SUBTYPE_BIT) || (subType == SUBTYPE_BITN) )
{
byte = (unsigned char) *(mkparamset + offset); // offset Inhalt lesen
 
if( subType == SUBTYPE_BITN ) // SUBTYPE_BITN = negiertes BIT
value = (value ? false : true); // negieren
 
if(value) byte = byte | subIndex; // Bit setzen
else byte = byte & (subIndex ^ 0xff); // Bit loeschen
 
value = byte; // neues Value fuer das gesamte Byte (mit eingerechnetem BIT)
}
 
//-------------------
// subIndex: Byte
//-------------------
if( subType == SUBTYPE_BYTE )
{
subOffset = subIndex; // das 'verschobene' Byte (hier nur den Offset verschieben)
}
 
 
//-------------------
// Transform
//-------------------
transformIdx = _paramset_gettransformIndex( paramID );
if( transformIdx != param_EOF )
{
byte = (unsigned char) *(mkparamset + offset + subOffset); // offset Inhalt lesen
value = paramTransform[transformIdx].transformfunc( SETVALUE, byte, newvalue);
}
 
 
//-------------------
// Byte speichern
//-------------------
*(mkparamset + offset + subOffset) = value;
return true; // OK
}
 
 
 
 
//#############################################################################################
//# 4c. oeffentliche Zugriffsfunktionen fuer das gesamte Paramset (Int usw.)
//#
//# Init und Abfrage der Groesse in Bytes ddes gesamten Paramset's
//#############################################################################################
 
 
//--------------------------------------------------------------
// ok = paramsetInit( *pData )
//
// Ermittelt zu einer empfangenen Revision die passende paramset-Tabelle
// und setzt entsprechende Werte in MKVersion
//
// Wird von MK_load_setting() aufgerufen nach dem Einlesen der
// MK-Parameter (Setting-Request 'q')
//
// Parameter:
// *pData : Zeiger direkt auf den RX-Buffer des PKT
//
// Rueckgabe:
// true : OK - Paramset ist initialisert; die aktuelle FC-Revision
// steht in MKVersion.paramsetRevision
// false : Fehler - keine passende paramset-Tabelle gefunden
//--------------------------------------------------------------
unsigned char paramsetInit( unsigned char *pData )
{
unsigned char i;
unsigned char *p;
 
paramsetRevTable = 0;
mkparamset = 0;
MKVersion.paramsetOK = false;
MKVersion.paramsetRevision = 0;
MKVersion.mksetting = 0;
MKVersion.mksettingName[0] = 0;
 
//--------------------------------------------------
// pData == 0 -> nur 'reset' der Daten
//--------------------------------------------------
if( pData == 0 )
{
return 0;
}
 
//--------------------------------------------------
// diese beiden Werte koennen in jedem Fall gesetzt werden
// unabhaengig ob das gefundene Parameterset vom PKT
// unterstuetzt wird oder nicht
//--------------------------------------------------
MKVersion.mksetting = (unsigned char) *pData;
MKVersion.paramsetRevision = (unsigned char) *(pData + 1);
 
 
//--------------------------------------------------
// FC-Revision in paramsetRevMap suchen
//--------------------------------------------------
i = 0;
while( true )
{
if( (paramsetRevMap[i].Revision == MKVersion.paramsetRevision) || (paramsetRevMap[i].Revision == MAPEOF) )
break;
i++;
}
 
 
//--------------------------------------
// Revision nicht gefunden -> return 0
//--------------------------------------
if( paramsetRevMap[i].Revision == MAPEOF )
{
return 0;
}
 
//--------------------------------------
// Revision gefunden
//--------------------------------------
mkparamset = (unsigned char *) (pData + 1);
paramsetRevTable = (paramRevItem_t *) paramsetRevMap[i].RevisionTable;
MKVersion.paramsetOK = true;
 
 
//--------------------------------------
// den aktuellen Setting-Namen kopieren
// wird u.a. vom OSD verwendet
//--------------------------------------
p = paramGet_p( param_Name );
if( p ) memcpy( MKVersion.mksettingName, p, 12 );
 
return MKVersion.paramsetOK;
}
 
 
 
//--------------------------------------------------------------
// size = paramsetSize()
//
// Gibt die Groesse des gesamten aktuellen Parameterset's
// zurueck. Fuer Revision 098 z.B. 130 = 130 Bytes.
//
// Rueckgabe:
// =0 : Fehler; nicht unterstuetzte FC-Revision oder nicht
// initialisiert
//--------------------------------------------------------------
unsigned char paramsetSize( void )
{
if( MKVersion.paramsetOK )
return _paramset_getoffset( param_EOF, false ); // false = offset zurueckgeben; der offset von param_EOF entspricht der Groesse des paramSet's!
else
return 0;
}
 
 
 
 
 
//#############################################################################################
//# x. TEST / DEBUG
//#############################################################################################
 
//--------------------------------------------------------------
// TEST / DEBUG
//--------------------------------------------------------------
#ifdef DEBUG_PARAMSET
void paramsetDEBUG( void )
{
lcd_cls();
 
//lcdx_printp_at( 0, 0, PSTR("NEW PARAM TEST..."), MNORMAL, 0,0);
lcd_printp_at(12, 7, strGet(ENDE), MNORMAL); // Keyline
 
//memcpy( &MKVersion.NCVersion, (Version_t *) (pRxData), sizeof(MKVersion_t) );
 
/*
 
typedef struct
{
Version_t NCVersion; //
Version_t FCVersion; //
unsigned char paramsetRevision; // von der FC
unsigned char paramsetOk; // true wenn Revision in paramset.c vorhanden
} MKVersion_t;
 
 
//-------------------------------------
// zur Orientierung: Version_t
//-------------------------------------
//typedef struct
//{
// unsigned char SWMajor;
// unsigned char SWMinor;
// unsigned char ProtoMajor;
// unsigned char ProtoMinor;
// unsigned char SWPatch;
// unsigned char HardwareError[5];
//} __attribute__((packed)) Version_t;
*/
 
//setting = MK_Setting_load( 0xff, 20); // aktuelles MK Setting ermitteln
MK_Setting_load( 0xff, 20); // aktuelles MK Setting ermitteln
 
//----------------------------------
// Anzeige: FC/NC Version
//----------------------------------
lcdx_printp_at( 0, 0, PSTR("FC:"), MNORMAL, 0,0);
MKVersion_print_at( 3, 0, FC, MNORMAL, 0,0);
 
lcdx_printp_at( 13, 0, PSTR("NC:"), MNORMAL, 0,0);
MKVersion_print_at( 16, 0, NC, MNORMAL, 0,0);
 
 
//----------------------------------
// Anzeige: FC Revision
//----------------------------------
lcd_printf_at_P( 0, 1, MNORMAL, PSTR("Rev: %03u"), MKVersion.paramsetRevision );
if( MKVersion.paramsetOK )
lcdx_printp_at( 8, 1, PSTR(" ok!"), MINVERS, 0,0);
else
lcdx_printp_at( 8, 1, PSTR(" err"), MINVERS, 0,0);
 
// Size von paramset
lcd_printf_at_P( 13, 1, MNORMAL, PSTR("Size=%3u"), paramsetSize() );
 
 
//----------------------------------
// Anzeige: aktuelles MK Setting
//----------------------------------
//lcd_printf_at_P( 0, 2, MNORMAL, PSTR("Set:%2u %s"), MKVersion.mksetting, MKVersion.mksettingName );
 
/*
unsigned char *p;
 
p = paramGet_p( param_Name );
if( p )
{
lcd_printf_at_P( 0, 3, MNORMAL, PSTR("%c"), *p );
p++;
lcd_printf_at_P( 1, 3, MNORMAL, PSTR("%c"), *p );
p++;
lcd_printf_at_P( 2, 3, MNORMAL, PSTR("%c"), *p );
}
*/
 
//----------------------------------
//----------------------------------
 
/*
lcd_printf_at_P( 0, 3, MNORMAL, PSTR("Size Name:%3u"), paramSize(param_Name) );
lcd_printf_at_P( 0, 5, MNORMAL, PSTR("%c"), paramGet_UByte( param_Name ) );
paramSet_UByte( param_Name, 'x' );
lcd_printf_at_P( 3, 5, MNORMAL, PSTR("%c"), paramGet_UByte( param_Name ) );
*/
 
/*
uint8_t v;
v = MKVersion_Cmp( MKVersion.FCVer, 2,0,'f' );
 
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("v:%3u"), v );
*/
 
 
/*
unsigned char paramID = 1;
unsigned char paramSubType = 1;
unsigned char paramSubIndex =1;
 
_paramset_getsubitemid( param_GlobalConfig_DrehratenBegrenzer, &paramID, &paramSubType, &paramSubIndex );
 
//lcd_printf_at_P( 0, 4, MNORMAL, PSTR("ID:%u T:%u I:%u"), paramID, paramSubType, paramSubIndex );
*/
 
//#define param_ExtraConfig_NoRcOffBeeping 204 // SUBTYPE_BIT - mk-data-structs.h: CFG_NO_RCOFF_BEEPING 0x10
//#define param_ExtraConfig_GpsAid 205 // SUBTYPE_BIT - mk-data-structs.h: CFG_GPS_AID 0x20
//#define param_ExtraConfig_LearnableCarefree 206 // SUBTYPE_BIT - mk-data-structs.h: CFG_LEARNABLE_CAREFREE 0x40
//#define param_ExtraConfig_IgnoreMagErrAtStartup 207 // SUBTYPE_BIT - mk-data-structs.h: CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80
 
//#define param_GlobalConfig3_NoSdCardNoStart 220 // SUBTYPE_BIT - mk-data-structs.h: CFG3_NO_SDCARD_NO_START 0x01
//#define param_GlobalConfig3_NoGpsFixNoStart 224 // SUBTYPE_BIT - mk-data-structs.h: CFG3_NO_GPSFIX_NO_START 0x10
 
//paramGet( unsigned char paramID );
 
//lcd_printf_at_P( 0, 5, MNORMAL, PSTR("%u %u %u"), paramGet(param_ExtraConfig_NoRcOffBeeping), paramGet(param_GlobalConfig3_NoSdCardNoStart), paramGet(param_GlobalConfig3_NoGpsFixNoStart) );
 
//#define param_Kanalbelegung_Gas 242 // SUBTYPE_BYTE - Kanalbelegung [2] (unsigned char)
//#define param_Kanalbelegung_Gear 243 // SUBTYPE_BYTE - Kanalbelegung [3] (unsigned char)
//#define param_Kanalbelegung_Nick 240 // SUBTYPE_BYTE - Kanalbelegung [0] (unsigned char)
//#define param_Kanalbelegung_Roll 241 // SUBTYPE_BYTE - Kanalbelegung [1] (unsigned char)
 
// lcd_printf_at_P( 0, 4, MNORMAL, PSTR("%u %u %u %u"), paramGet(param_Kanalbelegung_Gas), paramGet(param_Kanalbelegung_Gear), paramGet(param_Kanalbelegung_Nick), paramGet(param_Kanalbelegung_Roll) );
 
// lcd_printf_at_P( 0, 5, MNORMAL, PSTR("%u"), paramGet(param_Kanalbelegung) );
 
 
/*
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("%u %u %u"), paramGet(param_ExtraConfig_NoRcOffBeeping), paramGet(param_GlobalConfig3_NoSdCardNoStart), paramGet(param_GlobalConfig3_NoGpsFixNoStart) );
 
unsigned char v;
 
v = paramGet(param_GlobalConfig3_NoSdCardNoStart);
v = (v ? false : true);
paramSet(param_GlobalConfig3_NoSdCardNoStart, v);
 
lcd_printf_at_P( 0, 5, MNORMAL, PSTR("%u %u %u"), paramGet(param_ExtraConfig_NoRcOffBeeping), paramGet(param_GlobalConfig3_NoSdCardNoStart), paramGet(param_GlobalConfig3_NoGpsFixNoStart) );
 
v = paramGet(param_GlobalConfig3_NoSdCardNoStart);
v = (v ? false : true);
paramSet(param_GlobalConfig3_NoSdCardNoStart, v);
 
lcd_printf_at_P( 0, 6, MNORMAL, PSTR("%u %u %u"), paramGet(param_ExtraConfig_NoRcOffBeeping), paramGet(param_GlobalConfig3_NoSdCardNoStart), paramGet(param_GlobalConfig3_NoGpsFixNoStart) );
*/
 
/*
lcd_printf_at_P( 0, 3, MNORMAL, PSTR("%u %u"),
paramGet( param_Kanalbelegung_Gas ),
paramGet( param_Kanalbelegung_Gear )
);
 
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("%u %u %u %u"),
paramGet( param_Kanalbelegung_Poti1 ),
paramGet( param_Kanalbelegung_Poti2 ),
paramGet( param_Kanalbelegung_Poti3 ),
paramGet( param_Kanalbelegung_Poti4 )
);
 
lcd_printf_at_P( 0, 5, MNORMAL, PSTR("%u %u %u %u"),
paramGet( param_Kanalbelegung_Poti5 ),
paramGet( param_Kanalbelegung_Poti6 ),
paramGet( param_Kanalbelegung_Poti7 ),
paramGet( param_Kanalbelegung_Poti8 )
);
*/
 
// lcd_printf_at_P( 0, 3, MNORMAL, PSTR("HR:%u H-Limit:%u"),
// paramGet( param_GlobalConfig_HoehenRegelung ),
// paramGet( param_ExtraConfig_HeightLimit )
// );
 
// lcd_printf_at_P( 0, 5, MNORMAL, PSTR("Auto-S-L:%u"),
// paramGet( param_StartLandChannel )
// );
 
lcd_printf_at_P( 0, 4, MNORMAL, PSTR("CH Orientation:%x"), paramGet( param_ServoCompInvert));
 
lcd_printf_at_P( 0, 5, MNORMAL, PSTR("ACC Land pulse:%x"), paramGet( param_LandingPulse));
 
 
;
 
while( true )
{
PKT_CtrlHook();
if (get_key_press (1 << KEY_ESC))
{
break;
}
}
}
#endif // #ifdef DEBUG_PARAMSET
 
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/Transportables_Koptertool/PKT/trunk/mksettings/paramset.h
0,0 → 1,357
/*****************************************************************************
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de *
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net *
* Copyright (C) 2012 Christian "Cebra" Brandtner, brandtner@brandtner.net *
* Copyright (C) 2012 Harald Bongartz *
* *
* 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. *
* *
* *
* Credits to: *
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN *
* http://www.mikrokopter.de *
* Gregor "killagreg" Stobrawa for his version of the MK code *
* Thomas Kaiser "thkais" for the original project. See *
* http://www.ft-fanpage.de/mikrokopter/ *
* http://forum.mikrokopter.de/topic-4061-1.html *
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
* http://www.mylifesucks.de/oss/c-osd/ *
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
*****************************************************************************/
 
//############################################################################
//# HISTORY paramset.h
//#
//# 16.07.2015 Cebra (PKT385a)
//# - add: #define param_SingleWpControlChannel (FC2.11a)
//# #define param_MenuKeyChannel (FC2.11a)
//#
//# 09.04.2015 Cebra
//# - add: #define param_ServoNickFailsave, #define param_ServoRollFailsave, #define param_Servo3Failsave
//# #define param_Servo4Failsave, #define param_Servo5Failsave
//#
//# 26.01.2015 Cebra
//# - add: #define param_ComingHomeOrientation 241 ab FC 209a im Wert ServoCompInvert, Bit4 + Bit5
//#
//# 26.09.2014 Cebra
//# - add: paramID fuer Rev.103 (FC 2.07f)
//# -> param_Hoehe_TiltCompensation
//#
//# 08.04.2014 OG
//# - add: paramID's fuer Rev.102 (FC 2.05g)
//# -> param_NaviMaxFlyingRange, param_NaviDescendRange
//#
//# 06.04.2014 OG
//# - add: paramID's fuer Rev.101
//# -> param_Servo3OnValue, param_Servo3OffValue
//# -> param_Servo4OnValue, param_Servo4OffValue
//#
//# 28.03.2014 OG
//# - add: paramID's fuer Rev.100
//# -> param_AutoPhotoDistance, param_AutoPhotoAtitudes
//# -> param_SingleWpSpeed
//#
//# 26.03.2014 OG
//# - add: param_CompassOffset_DisableDeclCalc (Sub-Item)
//#
//# 27.02.2014 OG
//# - del: paramID's fuer FC-Revisionen < 95 entfernt
//#
//# 27.02.2014 OG
//# - chg: paramGet(), paramSet() - Unterstuetzen auch Bit- und Bytefelder
//#
//# 26.02.2014 OG
//# - add: defines fuer die Unterstuetzung von paramSubID's ergaenzt
//# paramSubItems bieten direkten Zugriff auf Bit- und Bytefelder
//# von paramID's - die paramSubItems wurde in die defines der
//# paramID's integriert indem sie am Ende gelistet werden (>=160)
//# - chg: paramsetTest() umbenannt zu paramsetDEBUG()
//#
//# 25.02.2014 OG
//# - add: defines zu param_Kanalbelegung_xyz (240 bis 251)
//#
//# 14.02.2014 OG
//# - add: diverse Zugriffsfunktionen fuer paramID's und paramSet's
//#
//# 05.02.2014 OG - NEU
//############################################################################
 
#ifndef _PARAMSET_H
#define _PARAMSET_H
 
 
//---------------------------
// Typ einer paramSubID
//---------------------------
#define SUBTYPE_NO 0 // keine paramSubID
#define SUBTYPE_BIT 1 // Bit-Feld (z.B. param_GlobalConfig)
#define SUBTYPE_BITN 2 // Bit-Feld (z.B. param_GlobalConfig) negiert!
#define SUBTYPE_BYTE 3 // Byte-Feld (z.B. Kanalbelegung)
 
 
 
//########################################################################################################################################################
 
//----------------------------------------------------------------------------------------
// Die Reihenfolge ist egal - aber(!) darauf achten das keine ID doppelt vergeben wird!
// Wenn neue Feleder hinzukommen an das Ende (vor EOF - keine ID 255!) hinzufuegen!
// Bitte die Datentypen im Kommentar notieren!
//
// -> paramID
//----------------------------------------------------------------------------------------
#define param_Revision 1 // unsigned char
#define param_Kanalbelegung 2 // unsigned char [12] GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
#define param_GlobalConfig 3 // unsigned char 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
#define param_Hoehe_MinGas 4 // unsigned char Wert : 0-100
#define param_Luftdruck_D 5 // unsigned char Wert : 0-250
#define param_HoeheChannel 6 // unsigned char Wert : 0-32
#define param_Hoehe_P 7 // unsigned char Wert : 0-32
#define param_Hoehe_Verstaerkung 8 // unsigned char Wert : 0-50
#define param_Hoehe_ACC_Wirkung 9 // unsigned char Wert : 0-250
#define param_Hoehe_HoverBand 10 // unsigned char Wert : 0-250
#define param_Hoehe_GPS_Z 11 // unsigned char Wert : 0-250
#define param_Hoehe_StickNeutralPoint 12 // unsigned char Wert : 0-250
#define param_Stick_P 13 // unsigned char WERT : 0..20
#define param_Stick_D 14 // unsigned char WERT : 0..20
#define param_StickGier_P 15 // unsigned char Wert :
#define param_Gas_Min 16 // unsigned char Wert : 0-32
#define param_Gas_Max 17 // unsigned char Wert : 33-250
#define param_GyroAccFaktor 18 // unsigned char Wert : 1-64
#define param_KompassWirkung 19 // unsigned char Wert : 0-32
#define param_Gyro_P 20 // unsigned char Wert : 10-250
#define param_Gyro_I 21 // unsigned char Wert : 0-250
#define param_Gyro_D 22 // unsigned char Wert : 0-250
#define param_Gyro_Gier_P 23 // unsigned char Wert : 10-250
#define param_Gyro_Gier_I 24 // unsigned char Wert : 0-250
#define param_Gyro_Stability 25 // unsigned char Wert : 0-16
#define param_UnterspannungsWarnung 26 // unsigned char Wert : 0-250
#define param_NotGas 27 // unsigned char Wert : 0-250 //Gaswert bei Empängsverlust
#define param_NotGasZeit 28 // unsigned char Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
#define param_Receiver 29 // unsigned char 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
#define param_I_Faktor 30 // unsigned char Wert : 0-250
#define param_UserParam1 31 // unsigned char Wert : 0-250
#define param_UserParam2 32 // unsigned char Wert : 0-250
#define param_UserParam3 33 // unsigned char Wert : 0-250
#define param_UserParam4 34 // unsigned char Wert : 0-250
#define param_ServoNickControl 35 // unsigned char Wert : 0-250 // Stellung des Servos
#define param_ServoNickComp 36 // unsigned char Wert : 0-250 // Einfluss Gyro/Servo
#define param_ServoNickMin 37 // unsigned char Wert : 0-250 // Anschlag
#define param_ServoNickMax 38 // unsigned char Wert : 0-250 // Anschlag
#define param_ServoRollControl 39 // unsigned char Wert : 0-250 // Stellung des Servos
#define param_ServoRollComp 40 // unsigned char Wert : 0-250
#define param_ServoRollMin 41 // unsigned char Wert : 0-250
#define param_ServoRollMax 42 // unsigned char Wert : 0-250
#define param_ServoNickRefresh 43 // unsigned char Speed of the Servo
#define param_ServoManualControlSpeed 44 // unsigned char
#define param_CamOrientation 45 // unsigned char
#define param_Servo3 46 // unsigned char Value or mapping of the Servo Output
#define param_Servo4 47 // unsigned char Value or mapping of the Servo Output
#define param_Servo5 48 // unsigned char Value or mapping of the Servo Output
#define param_LoopGasLimit 49 // unsigned char Wert: 0-250 max. Gas während Looping
#define param_LoopThreshold 50 // unsigned char Wert: 0-250 Schwelle für Stickausschlag
#define param_LoopHysterese 51 // unsigned char Wert: 0-250 Hysterese für Stickausschlag
#define param_AchsKopplung1 52 // unsigned char Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
#define param_AchsKopplung2 53 // unsigned char Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
#define param_CouplingYawCorrection 54 // unsigned char Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
#define param_WinkelUmschlagNick 55 // unsigned char Wert: 0-250 180°-Punkt
#define param_WinkelUmschlagRoll 56 // unsigned char Wert: 0-250 180°-Punkt
#define param_GyroAccAbgleich 57 // unsigned char 1/k (Koppel_ACC_Wirkung)
#define param_Driftkomp 58 // unsigned char
#define param_DynamicStability 59 // unsigned char
#define param_UserParam5 60 // unsigned char Wert : 0-250
#define param_UserParam6 61 // unsigned char Wert : 0-250
#define param_UserParam7 62 // unsigned char Wert : 0-250
#define param_UserParam8 63 // unsigned char Wert : 0-250
#define param_J16Bitmask 64 // unsigned char for the J16 Output
#define param_J16Timing 65 // unsigned char for the J16 Output
#define param_J17Bitmask 66 // unsigned char for the J17 Output
#define param_J17Timing 67 // unsigned char for the J17 Output
#define param_WARN_J16_Bitmask 68 // unsigned char for the J16 Output
#define param_WARN_J17_Bitmask 69 // unsigned char for the J17 Output
#define param_NaviOut1Parameter 70 // unsigned char for the J16 Output
#define param_NaviGpsModeChannel 71 // unsigned char Parameters for the Naviboard
#define param_NaviGpsGain 72 // unsigned char
#define param_NaviGpsP 73 // unsigned char
#define param_NaviGpsI 74 // unsigned char
#define param_NaviGpsD 75 // unsigned char
#define param_NaviGpsPLimit 76 // unsigned char
#define param_NaviGpsILimit 77 // unsigned char
#define param_NaviGpsDLimit 78 // unsigned char
#define param_NaviGpsA 79 // unsigned char
#define param_NaviGpsMinSat 80 // unsigned char
#define param_NaviStickThreshold 81 // unsigned char
#define param_NaviWindCorrection 82 // unsigned char
#define param_NaviAccCompensation 83 // unsigned char New since 0.86 -> was: SpeedCompensation
#define param_NaviOperatingRadius 84 // unsigned char bis Rev. 101
#define param_NaviAngleLimitation 85 // unsigned char
#define param_NaviPH_LoginTime 86 // unsigned char
#define param_ExternalControl 87 // unsigned char for serial Control
#define param_OrientationAngle 88 // unsigned char Where is the front-direction?
#define param_CareFreeChannel 89 // unsigned char switch for CareFree
#define param_MotorSafetySwitch 90 // unsigned char
#define param_MotorSmooth 91 // unsigned char
#define param_ComingHomeAltitude 92 // unsigned char
#define param_FailSafeTime 93 // unsigned char
#define param_MaxAltitude 94 // unsigned char
#define param_FailsafeChannel 95 // unsigned char if the value of this channel is > 100, the MK reports "RC-Lost"
#define param_ServoFilterNick 96 // unsigned char
#define param_ServoFilterRoll 97 // unsigned char
#define param_StartLandChannel 98 // unsigned char
#define param_LandingSpeed 99 // unsigned char
#define param_CompassOffset 100 // unsigned char
#define param_AutoLandingVoltage 101 // unsigned char in 0,1V 0 -> disabled
#define param_ComingHomeVoltage 102 // unsigned char in 0,1V 0 -> disabled
#define param_BitConfig 103 // unsigned char (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
#define param_ServoCompInvert 104 // unsigned char 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
#define param_ExtraConfig 105 // unsigned char bitcodiert
#define param_GlobalConfig3 106 // unsigned char bitcodiert
#define param_Name 107 // char [12] Name vom Parameterset
#define param_crc 108 // unsigned char
#define param_AutoPhotoDistance 109 // unsigned char ab Rev. 100 (ersetzt NaviOut1Parameter) // Auto Photo
#define param_AutoPhotoAtitudes 110 // unsigned char ab Rev. 100
#define param_SingleWpSpeed 111 // unsigned char ab Rev. 100
#define param_Servo3OnValue 112 // unsigned char ab Rev. 101 (FC 2.05f)
#define param_Servo3OffValue 113 // unsigned char ab Rev. 101 (FC 2.05f)
#define param_Servo4OnValue 114 // unsigned char ab Rev. 101 (FC 2.05f)
#define param_Servo4OffValue 115 // unsigned char ab Rev. 101 (FC 2.05f)
#define param_NaviMaxFlyingRange 116 // unsigned char ab Rev. 102 (FC 2.05g) (ersetzt NaviOperatingRadius) // in 10m
#define param_NaviDescendRange 117 // unsigned char ab Rev. 102 (FC 2.05g)
#define param_Hoehe_TiltCompensation 118 // unsigned char ab Rev. 103 (FC 2.07f)
#define param_LandingPulse 119 // unsigned char ab Rev. 104 (FC 2.09d)
#define param_ServoFS_Pos 120 // unsigned char [5] ServoNickFailsave[0],ServoRollFailsave[1],Servo3Failsave[2],Servo4Failsave[3],Servo5Failsave[4] ab Rev. 105 (FC 2.09i)
#define param_SingleWpControlChannel 121 // unsigned char ab Rev. 106 (FC 2.11a)
#define param_MenuKeyChannel 122 // unsigned char ab Rev. 106 (FC 2.11a)
 
//------- ^^^ HIER NEUE paramID's einfuegen! ^^^
 
 
// ab hier sind Sub-Items zu einer paramID definiert
// - einige paramID's werden nochmals untergliedert in Bit- oder Bytefelder
// - die Zuordnung der Sub-Items zu paramID's erfolgt in paramset.c
#define param_SUBITEM 160 // <- ab diesem Wert handelt es sich um ein paramSubID und nicht um eine paramID
 
#define param_Kanalbelegung_Nick 170 // SUBTYPE_BYTE - Kanalbelegung [0] (unsigned char)
#define param_Kanalbelegung_Roll 171 // SUBTYPE_BYTE - Kanalbelegung [1] (unsigned char)
#define param_Kanalbelegung_Gas 172 // SUBTYPE_BYTE - Kanalbelegung [2] (unsigned char)
#define param_Kanalbelegung_Gear 173 // SUBTYPE_BYTE - Kanalbelegung [3] (unsigned char)
#define param_Kanalbelegung_Poti1 174 // SUBTYPE_BYTE - Kanalbelegung [4] (unsigned char)
#define param_Kanalbelegung_Poti2 175 // SUBTYPE_BYTE - Kanalbelegung [5] (unsigned char)
#define param_Kanalbelegung_Poti3 176 // SUBTYPE_BYTE - Kanalbelegung [6] (unsigned char)
#define param_Kanalbelegung_Poti4 177 // SUBTYPE_BYTE - Kanalbelegung [7] (unsigned char)
#define param_Kanalbelegung_Poti5 178 // SUBTYPE_BYTE - Kanalbelegung [8] (unsigned char)
#define param_Kanalbelegung_Poti6 179 // SUBTYPE_BYTE - Kanalbelegung [9] (unsigned char)
#define param_Kanalbelegung_Poti7 180 // SUBTYPE_BYTE - Kanalbelegung [10] (unsigned char)
#define param_Kanalbelegung_Poti8 181 // SUBTYPE_BYTE - Kanalbelegung [11] (unsigned char)
 
#define param_ServoCompInvert_SERVO_NICK_INV 190 // SUBTYPE_BIT - mk-data-structs.h: SVNick 0x01
#define param_ServoCompInvert_SERVO_ROLL_INV 191 // SUBTYPE_BIT - mk-data-structs.h: SVRoll 0x02
#define param_ServoCompInvert_SERVO_RELATIVE 192 // SUBTYPE_BIT - mk-data-structs.h: SVRelMov 0x04
 
 
#define param_ExtraConfig_HeightLimit 200 // SUBTYPE_BIT - mk-data-structs.h: CFG2_HEIGHT_LIMIT 0x01
#define param_ExtraConfig_HeightVario 201 // SUBTYPE_BIT - mk-data-structs.h: CFG2_HEIGHT_LIMIT 0x01 ist negiert zu param_ExtraConfig_HeightLimit
#define param_ExtraConfig_VarioBeep 202 // SUBTYPE_BIT - mk-data-structs.h: CFG2_VARIO_BEEP 0x02
#define param_ExtraConfig_SensitiveRc 203 // SUBTYPE_BIT - mk-data-structs.h: CFG_SENSITIVE_RC 0x04
#define param_ExtraConfig_33vReference 204 // SUBTYPE_BIT - mk-data-structs.h: CFG_3_3V_REFERENCE 0x08
#define param_ExtraConfig_NoRcOffBeeping 205 // SUBTYPE_BIT - mk-data-structs.h: CFG_NO_RCOFF_BEEPING 0x10
#define param_ExtraConfig_GpsAid 206 // SUBTYPE_BIT - mk-data-structs.h: CFG_GPS_AID 0x20
#define param_ExtraConfig_LearnableCarefree 207 // SUBTYPE_BIT - mk-data-structs.h: CFG_LEARNABLE_CAREFREE 0x40
#define param_ExtraConfig_IgnoreMagErrAtStartup 208 // SUBTYPE_BIT - mk-data-structs.h: CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80
 
 
#define param_BitConfig_LoopOben 210 // SUBTYPE_BIT - mk-data-structs.h: CFG_LOOP_OBEN 0x01
#define param_BitConfig_LoopUnten 211 // SUBTYPE_BIT - mk-data-structs.h: CFG_LOOP_UNTEN 0x02
#define param_BitConfig_LoopLinks 212 // SUBTYPE_BIT - mk-data-structs.h: CFG_LOOP_LINKS 0x04
#define param_BitConfig_LoopRechts 213 // SUBTYPE_BIT - mk-data-structs.h: CFG_LOOP_RECHTS 0x08
#define param_BitConfig_MotorBlink1 214 // SUBTYPE_BIT - mk-data-structs.h: CFG_MOTOR_BLINK1 0x10
#define param_BitConfig_MotorOffLed1 215 // SUBTYPE_BIT - mk-data-structs.h: CFG_MOTOR_OFF_LED1 0x20
#define param_BitConfig_MotorOffLed2 216 // SUBTYPE_BIT - mk-data-structs.h: CFG_MOTOR_OFF_LED2 0x40
#define param_BitConfig_MotorBlink2 217 // SUBTYPE_BIT - mk-data-structs.h: CFG_MOTOR_BLINK2 0x80
 
#define param_GlobalConfig3_NoSdCardNoStart 220 // SUBTYPE_BIT - mk-data-structs.h: CFG3_NO_SDCARD_NO_START 0x01
#define param_GlobalConfig3_DphMaxRadius 221 // SUBTYPE_BIT - mk-data-structs.h: CFG3_DPH_MAX_RADIUS 0x02 nur bis Rev 101
#define param_GlobalConfig3_VarioFailsafe 222 // SUBTYPE_BIT - mk-data-structs.h: CFG3_VARIO_FAILSAFE 0x04
#define param_GlobalConfig3_MotorSwitchMode 223 // SUBTYPE_BIT - mk-data-structs.h: CFG3_MOTOR_SWITCH_MODE 0x08
#define param_GlobalConfig3_NoGpsFixNoStart 224 // SUBTYPE_BIT - mk-data-structs.h: CFG3_NO_GPSFIX_NO_START 0x10
#define param_GlobalConfig3_UseNcForOut1 225 // SUBTYPE_BIT - mk-data-structs.h: CFG3_USE_NC_FOR_OUT1 0x20
#define param_GlobalConfig3_SpeakAll 226 // SUBTYPE_BIT - mk-data-structs.h: CFG3_SPEAK_ALL 0x40
#define param_GlobalConfig3_ServoNickCompOff 227 // SUBTYPE_BIT - mk-data-structs.h: CFG3_SERVO_NICK_COMP_OFF 0x80
 
#define param_GlobalConfig_HoehenRegelung 230 // SUBTYPE_BIT - mk-data-structs.h: CFG_HOEHENREGELUNG 0x01
#define param_GlobalConfig_HoehenSchalter 231 // SUBTYPE_BIT - mk-data-structs.h: CFG_HOEHEN_SCHALTER 0x02
#define param_GlobalConfig_HeadingHold 232 // SUBTYPE_BIT - mk-data-structs.h: CFG_HEADING_HOLD 0x04
#define param_GlobalConfig_KompassAktiv 233 // SUBTYPE_BIT - mk-data-structs.h: CFG_KOMPASS_AKTIV 0x08
#define param_GlobalConfig_KompassFix 234 // SUBTYPE_BIT - mk-data-structs.h: CFG_KOMPASS_FIX 0x10
#define param_GlobalConfig_GpsAktiv 235 // SUBTYPE_BIT - mk-data-structs.h: CFG_GPS_AKTIV 0x20
#define param_GlobalConfig_AchsenkopplungAktiv 236 // SUBTYPE_BIT - mk-data-structs.h: CFG_ACHSENKOPPLUNG_AKTIV 0x40
#define param_GlobalConfig_DrehratenBegrenzer 237 // SUBTYPE_BIT - mk-data-structs.h: CFG_DREHRATEN_BEGRENZER 0x80
#define param_ServoNickFailsave 238 // SUBTYPE_BYTE- mk-data-structs.h: ServoFS_Pos[0] ab FC 2.09j
#define param_ServoRollFailsave 239 // SUBTYPE_BYTE- mk-data-structs.h: ServoFS_Pos[1] ab FC 2.09j
#define param_Servo3Failsave 240 // SUBTYPE_BYTE- mk-data-structs.h: ServoFS_Pos[2] ab FC 2.09j
#define param_Servo4Failsave 241 // SUBTYPE_BYTE- mk-data-structs.h: ServoFS_Pos[3] ab FC 2.09j
#define param_Servo5Failsave 242 // SUBTYPE_BYTE- mk-data-structs.h: ServoFS_Pos[4] ab FC 2.09j
 
 
 
 
// hier: spezielle Subitems
#define param_CompassOffset_DisableDeclCalc 243 // wird gemappt auf: param_CompassOffset - der Wert ist dort in Bit 8 und 7 kodiert
#define param_ComingHomeOrientation 244 // unsigned char 0x08, 0x10, Bits im Feld ServoCompInvert
 
 
 
 
 
//---------------------------------------------------------------------------------------
// IMMER am Ende!!
#define param_DUMMY 254 // DO NOT CHANGE! DUMMY => spacer werte
#define param_EOF 255 // DO NOT CHANGE! EOF => markiert das Ende von paramID-Listen
#define param_NOTFOUND 255 // DO NOT CHANGE! NOTFOUND => kein paramID gefunden
 
//########################################################################################################################################################
 
 
 
//---------------------------
// struct: einzelnes Parameter-Item
//---------------------------
typedef struct
{
unsigned char paramID;
unsigned char size;
} paramRevItem_t;
 
 
 
 
//---------------------------
// exportierte Funktionen
//---------------------------
unsigned char paramsetInit( unsigned char *pData );
unsigned char paramsetSize( void );
 
unsigned char paramExist( unsigned char paramID );
unsigned char paramSize( unsigned char paramID );
unsigned char paramGet( unsigned char paramID );
unsigned char paramSet( unsigned char paramID, unsigned char newvalue );
unsigned char *paramGet_p( unsigned char paramID );
 
 
 
 
// TEST / DEBUG
void paramsetDEBUG( void );
 
#endif // _PARAMSET_H
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property
/Transportables_Koptertool/PKT/trunk/mksettings/.
Property changes:
Added: svn:ignore
+_FC_eeprom_Versions_Archiv
+
+_old_source
+
+mkparameters.c_sic