Rev 1139 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1139 | Rev 1141 | ||
---|---|---|---|
1 | /* pitch.c |
1 | /* pitch.c |
2 | * |
2 | * |
3 | * Copyright 2009 Thomas Jachmann |
3 | * Copyright 2009 Thomas Jachmann |
4 | * |
4 | * |
5 | * Pitch-Steuerung |
5 | * Pitch-Steuerung |
6 | */ |
6 | */ |
7 | 7 | ||
8 | #include "main.h" |
8 | #include "main.h" |
9 | #include "parameter.h" |
9 | #include "parameter.h" |
10 | #include "pitch_neutral.h" |
10 | #include "pitch_neutral.h" |
11 | #include "pitch_md.h" |
11 | #include "pitch_md.h" |
12 | #include "pitch.h" |
12 | #include "pitch.h" |
- | 13 | ||
- | 14 | #define UNDEFINED 255 |
|
- | 15 | #define INVALID 255 |
|
13 | 16 | ||
- | 17 | int pitchInitialStickValue = UNDEFINED; |
|
14 | 18 | unsigned char pitchMode; |
|
15 | unsigned char pitchMode; |
19 | |
16 | 20 | ||
17 | char *pitchModeStrings[] = { |
21 | char *pitchModeStrings[] = { |
18 | "Normal ", |
22 | "Normal ", |
19 | "Neutral ", |
23 | "Neutral ", |
20 | "MD " |
24 | "MD ", |
- | 25 | "Inaktiv " |
|
21 | }; |
26 | }; |
22 | 27 | ||
23 | 28 | ||
24 | // Zeiger auf den durch das Setting bestimmten Pitch-Steuerungsalgorithmus |
29 | // Zeiger auf den durch das Setting bestimmten Pitch-Steuerungsalgorithmus |
25 | int (* pitch_value_ptr)( void ); |
30 | int (* pitch_value_ptr)( void ); |
26 | 31 | ||
27 | // Prototyp |
32 | // Prototyp |
28 | int pitch_mk_value( void ); |
33 | int pitch_mk_value( void ); |
29 | 34 | ||
30 | /* |
35 | /* |
31 | * Führt die Initialisierung der Pitch-Steuerung durch. Diese Funktion |
36 | * Führt die Initialisierung der Pitch-Steuerung durch. Diese Funktion |
32 | * wird nach jeder Setting-Auswahl sowie nach jeder Setting-Änderung |
37 | * wird nach jeder Setting-Auswahl sowie nach jeder Setting-Änderung |
33 | * aufgerufen. |
38 | * aufgerufen. |
34 | */ |
39 | */ |
35 | void pitch_init( void ) { |
40 | void pitch_init( void ) { |
- | 41 | ||
- | 42 | // Nur beim Einschalten ermitteln, da beim Setting-Wechsel ungültig |
|
- | 43 | if( pitchInitialStickValue == UNDEFINED ) { |
|
- | 44 | ||
- | 45 | // Warten, bis ein gültiger Wert von der Fernsteuerung anliegt |
|
- | 46 | unsigned int timer = SetDelay( 500 ); |
|
- | 47 | while( !CheckDelay( timer ) ); |
|
- | 48 | ||
- | 49 | pitchInitialStickValue = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ]; |
|
- | 50 | } |
|
36 | 51 | ||
- | 52 | pitchMode = PARAM_PITCH_MODE; |
|
- | 53 | ||
- | 54 | /* Die Stick-Position beim Einschalten muß mit dem im Setting eingestellten |
|
- | 55 | * Pitch-Modus übereinstimmen. Sonst wird die Pitch-Steuerung aus Sicherheits- |
|
- | 56 | * gründen deaktiviert. Selbiges gilt, wenn die Höhenregelung deaktiviert wurde. |
|
- | 57 | */ |
|
- | 58 | switch( pitchMode ) { |
|
- | 59 | // Pitch-Modi mit neutralisiertem Gas |
|
- | 60 | case PARAM_PITCH_MODE_NEUTRAL: |
|
- | 61 | case PARAM_PITCH_MODE_MD: |
|
- | 62 | if( !( EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG ) ) |
|
- | 63 | pitchMode = PARAM_PITCH_MODE_INVALID; |
|
- | 64 | if( abs( pitchInitialStickValue ) > PARAM_PITCH_STICK_THRESHOLD ) |
|
- | 65 | pitchMode = PARAM_PITCH_MODE_INVALID; |
|
- | 66 | break; |
|
- | 67 | ||
- | 68 | // Pitch-Modi mit 0-Gas |
|
- | 69 | case PARAM_PITCH_MODE_NORMAL: |
|
- | 70 | if( pitchInitialStickValue > 35 - 120 ) |
|
- | 71 | pitchMode = PARAM_PITCH_MODE_INVALID; |
|
- | 72 | break; |
|
- | 73 | } |
|
37 | pitchMode = PARAM_PITCH_MODE; |
74 | |
38 | 75 | pitch_neutral_init(); |
|
39 | pitch_md_init(); |
76 | pitch_md_init(); |
40 | 77 | ||
41 | // FIXME Funktioniert noch nicht |
78 | // FIXME Funktioniert noch nicht |
42 | switch( pitchMode ) { |
79 | switch( pitchMode ) { |
43 | case PARAM_PITCH_MODE_NEUTRAL: |
80 | case PARAM_PITCH_MODE_NEUTRAL: |
44 | pitch_value_ptr = pitch_neutral_value; |
81 | pitch_value_ptr = pitch_neutral_value; |
45 | break; |
82 | break; |
46 | 83 | ||
47 | case PARAM_PITCH_MODE_MD: |
84 | case PARAM_PITCH_MODE_MD: |
48 | pitch_value_ptr = pitch_md_value; |
85 | pitch_value_ptr = pitch_md_value; |
49 | break; |
86 | break; |
50 | 87 | ||
51 | default: |
88 | default: |
52 | pitch_value_ptr = pitch_mk_value; |
89 | pitch_value_ptr = pitch_mk_value; |
53 | } |
90 | } |
54 | 91 | ||
55 | // Hier können weitere Initialisierungen folgen |
92 | // Hier können weitere Initialisierungen folgen |
56 | } |
93 | } |
57 | 94 | ||
58 | 95 | ||
59 | int pitch_value( void ) { |
96 | int pitch_value( void ) { |
60 | switch( pitchMode ) { |
97 | switch( pitchMode ) { |
61 | case PARAM_PITCH_MODE_NEUTRAL: |
98 | case PARAM_PITCH_MODE_NEUTRAL: |
62 | return pitch_neutral_value(); |
99 | return pitch_neutral_value(); |
63 | 100 | ||
64 | case PARAM_PITCH_MODE_MD: |
101 | case PARAM_PITCH_MODE_MD: |
65 | return pitch_md_value(); |
102 | return pitch_md_value(); |
66 | 103 | ||
67 | default: |
104 | case PARAM_PITCH_MODE_NORMAL: |
- | 105 | return pitch_mk_value(); |
|
- | 106 | ||
- | 107 | default: |
|
68 | return pitch_mk_value(); |
108 | return 0; |
69 | } |
109 | } |
70 | } |
110 | } |
71 | 111 | ||
72 | 112 | ||
73 | /* |
113 | /* |
74 | * Führt eine Pitch-Berechnung aus, die der Original-SW entspricht. |
114 | * Führt eine Pitch-Berechnung aus, die der Original-SW entspricht. |
75 | */ |
115 | */ |
76 | int pitch_mk_value( void ) { |
116 | int pitch_mk_value( void ) { |
77 | register int stickValue = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ]; |
117 | register int stickValue = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ]; |
78 | register int pitchCount = stickValue + 120; // Warum 120? Gas= 0 ist -125 |
118 | register int pitchCount = stickValue + 120; |
79 | 119 | ||
80 | DebugOut.Analog[26] = stickValue; |
120 | DebugOut.Analog[26] = stickValue; |
81 | DebugOut.Analog[28] = pitchCount; |
121 | DebugOut.Analog[28] = pitchCount; |
82 | 122 | ||
83 | return pitchCount; |
123 | return pitchCount; |
84 | } |
124 | } |
85 | 125 |