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 ( ¶mEditItem , 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 |