Rev 1139 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/* pitch.c
*
* Copyright 2009 Thomas Jachmann
*
* Pitch-Steuerung
*/
#include "main.h"
#include "parameter.h"
#include "pitch_neutral.h"
#include "pitch_md.h"
#include "pitch.h"
#define UNDEFINED 255
#define INVALID 255
int pitchInitialStickValue
= UNDEFINED
;
unsigned char pitchMode
;
char *pitchModeStrings
[] = {
"Normal ",
"Neutral ",
"MD ",
"Inaktiv "
};
// Zeiger auf den durch das Setting bestimmten Pitch-Steuerungsalgorithmus
int (* pitch_value_ptr
)( void );
// Prototyp
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 ) {
// 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
] ];
}
pitchMode
= PARAM_PITCH_MODE
;
/* 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-Modi mit neutralisiertem Gas
case PARAM_PITCH_MODE_NEUTRAL
:
case PARAM_PITCH_MODE_MD
:
if( !( EE_Parameter.
GlobalConfig & CFG_HOEHENREGELUNG
) )
pitchMode
= PARAM_PITCH_MODE_INVALID
;
if( abs( pitchInitialStickValue
) > PARAM_PITCH_STICK_THRESHOLD
)
pitchMode
= PARAM_PITCH_MODE_INVALID
;
break;
// Pitch-Modi mit 0-Gas
case PARAM_PITCH_MODE_NORMAL
:
if( pitchInitialStickValue
> 35 - 120 )
pitchMode
= PARAM_PITCH_MODE_INVALID
;
break;
}
pitch_neutral_init
();
pitch_md_init
();
// FIXME Funktioniert noch nicht
switch( pitchMode
) {
case PARAM_PITCH_MODE_NEUTRAL
:
pitch_value_ptr
= pitch_neutral_value
;
break;
case PARAM_PITCH_MODE_MD
:
pitch_value_ptr
= pitch_md_value
;
break;
default:
pitch_value_ptr
= pitch_mk_value
;
}
// Hier können weitere Initialisierungen folgen
}
int pitch_value
( void ) {
switch( pitchMode
) {
case PARAM_PITCH_MODE_NEUTRAL
:
return pitch_neutral_value
();
case PARAM_PITCH_MODE_MD
:
return pitch_md_value
();
case PARAM_PITCH_MODE_NORMAL
:
return pitch_mk_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
;
DebugOut.
Analog[28] = pitchCount
;
return pitchCount
;
}