0,0 → 1,108 |
/* 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", |
"??" |
}; |
|
|
// 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; |
} |