Subversion Repositories FlightCtrl

Rev

Rev 2049 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2049 Rev 2189
Line -... Line 1...
-
 
1
#ifndef _CONTROLMIXER_H
-
 
2
#define _CONTROLMIXER_H
-
 
3
 
1
#include <inttypes.h>
4
#include <inttypes.h>
2
/*
5
/*
3
 * An attempt to define a generic control. That could be an R/C receiver, an external control
6
 * An attempt to define a generic control. That could be an R/C receiver, an external control
4
 * (serial over Bluetooth, Wi232, XBee, whatever) or the NaviCtrl.
7
 * (serial over Bluetooth, Wi232, XBee, whatever) or the NaviCtrl.
5
 * This resembles somewhat an object-oriented class definition (except that there are no virtuals).
8
 * This resembles somewhat an object-oriented class definition (except that there are no virtuals).
Line 7... Line 10...
7
 * each other, the priorities between them and the behavior in case that one fails is simplified,
10
 * each other, the priorities between them and the behavior in case that one fails is simplified,
8
 * and all in one place.
11
 * and all in one place.
9
 */
12
 */
Line 10... Line 13...
10
 
13
 
11
/*
-
 
12
 * Signal qualities, used to determine the availability of a control.
-
 
13
 * NO_SIGNAL means there was never a signal. SIGNAL_LOST that there was a signal, but it was lost.
-
 
14
 * SIGNAL_BAD is too bad for flight. This is the hysteresis range for deciding whether to engage
-
 
15
 * or disengage emergency landing.
-
 
16
 * SIGNAL_OK means the signal is usable for flight.
-
 
17
 * SIGNAL_GOOD means the signal can also be used for setting parameters.
-
 
18
 */
-
 
19
#define NO_SIGNAL   0
-
 
20
#define SIGNAL_LOST 1
-
 
21
#define SIGNAL_BAD  2
-
 
22
#define SIGNAL_OK   3
-
 
23
#define SIGNAL_GOOD 4
-
 
24
 
-
 
25
/*
-
 
26
 * The PRTY arrays
-
 
27
 */
-
 
28
#define CONTROL_PITCH    0
-
 
29
#define CONTROL_ROLL     1
-
 
30
#define CONTROL_THROTTLE 2
-
 
31
#define CONTROL_YAW      3
-
 
32
 
-
 
33
/*
-
 
34
 * Looping flags.
-
 
35
 * LOOPING_UP || LOOPING_DOWN <=> LOOPING_PITCH_AXIS
-
 
36
 * LOOPING_LEFT || LOOPING_RIGHT <=> LOOPING_ROLL_AXIS
-
 
37
 */
-
 
38
#define LOOPING_UP         (1<<0)
-
 
39
#define LOOPING_DOWN       (1<<1)
-
 
40
#define LOOPING_LEFT       (1<<2)
-
 
41
#define LOOPING_RIGHT      (1<<3)
-
 
42
#define LOOPING_PITCH_AXIS (1<<4)
-
 
43
#define LOOPING_ROLL_AXIS  (1<<5)
-
 
44
 
-
 
45
/*
-
 
46
 * This is only relevant for "abstract controls" ie. all control sources have the
-
 
47
 * same interface. This struct of code pointers is used like an abstract class
-
 
48
 * definition from object-oriented languages, and all control input implementations
-
 
49
 * will declare an instance of the stuct (=implementation of the abstract class).
-
 
50
 */
-
 
51
typedef struct {
-
 
52
        /* Get the pitch input in the nominal range [-STICK_RANGE, STICK_RANGE]. */
-
 
53
        int16_t(*getPitch)(void);
-
 
54
 
-
 
55
        /* Get the roll input in the nominal range [-STICK_RANGE, STICK_RANGE]. */
-
 
56
        int16_t(*getRoll)(void);
-
 
57
 
-
 
58
        /* Get the yaw input in the nominal range [-STICK_RANGE, STICK_RANGE]. */
-
 
59
        int16_t(*getYaw)(void);
-
 
60
 
-
 
61
        /* Get the throttle input in the nominal range [0, THROTTLE_RANGE]. */
-
 
62
        uint16_t(*getThrottle)(void);
-
 
63
 
-
 
64
        /* Signal quality, by the above SIGNAL_... definitions. */
-
 
65
        uint8_t (*getSignalQuality)(void);
-
 
66
 
-
 
67
        /* Calibrate sticks to their center positions (only relevant for R/C, really) */
-
 
68
        void (*calibrate)(void);
-
 
69
} t_control;
-
 
70
 
-
 
71
/*
14
/*
72
 * Our output.
15
 * Our output.
73
 */
16
 */
74
extern int16_t controls[4];
17
extern int16_t controls[4];
75
extern uint16_t controlActivity;
18
extern uint16_t controlActivity;
Line 93... Line 36...
93
void controlMixer_performCalibrationCommands(uint8_t command);
36
void controlMixer_performCalibrationCommands(uint8_t command);
Line 94... Line 37...
94
 
37
 
95
uint8_t controlMixer_getSignalQuality(void);
38
uint8_t controlMixer_getSignalQuality(void);
Line 96... Line -...
96
extern uint8_t controlMixer_didReceiveSignal;
-
 
97
 
-
 
98
/*
-
 
99
 * The controls operate in [-1024, 1024] just about.
-
 
100
 * Throttle is [0..255] just about.
-
 
101
 */
-
 
102
// Scale controls to 1 byte:
-
 
103
#define CONTROL_SCALING (1024/256)
-
 
104
 
-
 
Line 105... Line 39...
105
// Scale throttle levels to byte:
39
extern uint8_t controlMixer_didReceiveSignal;
106
#define MOTOR_SCALING (1024/256)
40
 
107
 
41
 
108
/*
42
/*
Line 120... Line 54...
120
 *
54
 *
121
 * Not in any of these positions: 0
55
 * Not in any of these positions: 0
122
 */
56
 */
123
uint8_t controlMixer_getArgument(void);
57
uint8_t controlMixer_getArgument(void);
124
uint8_t controlMixer_isCommandRepeated(void);
58
uint8_t controlMixer_isCommandRepeated(void);
-
 
59
 
-
 
60
#endif