Blame |
Last modification |
View Log
| RSS feed
/* pitch.c
*
* Copyright 2009 Thomas Jachmann
*
* Pitch-Steuerung
*/
#include "main.h"
#include "parameter.h"
#include "pitch_md.h"
#include "pitch.h"
#define UNDEFINED 255
int pitchInitialStickValue
= UNDEFINED
;
unsigned char pitchMode
= PARAM_PITCH_MODE_MK
;
char *pitchModeStrings
[] = {
"MK ",
"MD ",
"Invalid "
};
// Prototypen
int pitch_mk_value
( void );
/*
* Führt die Initialisierung der Pitch-Steuerung durch. Diese Funktion
* wird nach jeder Setting-Auswahl sowie nach jeder Setting-Änderung
* aufgerufen.
*/
void pitch_init
( void ) {
// Der Schalter Höhenregelung bestimmt den Pitch-Modus
if( EE_Parameter.
GlobalConfig & CFG_HOEHENREGELUNG
) {
pitchMode
= PARAM_PITCH_MODE_MD
;
} else {
pitchMode
= PARAM_PITCH_MODE_MK
;
}
// Nur beim Einschalten ermitteln, da beim Setting-Wechsel ungültig
if( pitchInitialStickValue
== UNDEFINED
) {
// Warten, bis ein gültiger Wert von der Fernsteuerung anliegt
unsigned int timer
= SetDelay
( 500 );
while( !CheckDelay
( timer
) );
pitchInitialStickValue
= PPM_in
[ EE_Parameter.
Kanalbelegung[ K_GAS
] ];
}
/* Die Stick-Position beim Einschalten muß mit dem im Setting eingestellten
* Pitch-Modus übereinstimmen. Sonst wird die Pitch-Steuerung aus Sicherheits-
* gründen deaktiviert. Selbiges gilt, wenn die Höhenregelung deaktiviert wurde.
*/
switch( pitchMode
) {
// Pitch-Modus mit 0-Gas
case PARAM_PITCH_MODE_MK
:
if( pitchInitialStickValue
> 35 - 120 ) {
pitchMode
= PARAM_PITCH_MODE_INVALID
;
}
break;
// Pitch-Modus mit neutralisiertem Gas und Standgas
case PARAM_PITCH_MODE_MD
:
if( abs( pitchInitialStickValue
) > PARAM_PITCH_STICK_THRESHOLD
) {
pitchMode
= PARAM_PITCH_MODE_INVALID
;
} else {
pitch_md_init
();
}
break;
}
}
int pitch_value
( void ) {
switch( pitchMode
) {
// Pitch-Modus mit 0-Gas
case PARAM_PITCH_MODE_MK
:
return pitch_mk_value
();
// Pitch-Modus mit neutralisiertem Gas und Standgas
case PARAM_PITCH_MODE_MD
:
return pitch_md_value
();
default:
return 0;
}
}
/*
* Führt eine Pitch-Berechnung aus, die der Original-SW entspricht.
*/
int pitch_mk_value
( void ) {
register int stickValue
= PPM_in
[ EE_Parameter.
Kanalbelegung[ K_GAS
] ];
register int pitchCount
= stickValue
+ 120;
DebugOut.
Analog[26] = stickValue
;
return pitchCount
;
}