Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1262 → Rev 1263

/branches/thjac/V1_13/pitch.c
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;
}