aboutsummaryrefslogtreecommitdiff
path: root/apps/px4io/mixer.cpp
diff options
context:
space:
mode:
authorSimon Wilks <sjwilks@gmail.com>2013-01-05 22:13:12 +0100
committerSimon Wilks <sjwilks@gmail.com>2013-01-05 22:13:12 +0100
commit0a89ab7075e4d637c91e21246c4790599f046aec (patch)
treeb21cc275b31a2b85892f5869c9426c15488b7886 /apps/px4io/mixer.cpp
parent1b81724ef7d9c1424b493740d887e6c3ce259f38 (diff)
downloadpx4-firmware-0a89ab7075e4d637c91e21246c4790599f046aec.tar.gz
px4-firmware-0a89ab7075e4d637c91e21246c4790599f046aec.tar.bz2
px4-firmware-0a89ab7075e4d637c91e21246c4790599f046aec.zip
Send rc channel ordering and channel attributes from FMU to IO
Diffstat (limited to 'apps/px4io/mixer.cpp')
-rw-r--r--apps/px4io/mixer.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/apps/px4io/mixer.cpp b/apps/px4io/mixer.cpp
index 98232a1a2..d65602587 100644
--- a/apps/px4io/mixer.cpp
+++ b/apps/px4io/mixer.cpp
@@ -67,6 +67,12 @@ extern "C" {
*/
#define FMU_INPUT_DROP_LIMIT_US 200000
+/* XXX need to move the RC_CHANNEL_FUNCTION out of rc_channels.h and into systemlib */
+#define ROLL 0
+#define PITCH 1
+#define YAW 2
+#define THROTTLE 3
+
/* current servo arm/disarm state */
bool mixer_servos_armed = false;
@@ -112,22 +118,22 @@ mixer_tick(void)
/* when override is on or the fmu is not available, but RC is present */
control_count = system_state.rc_channels;
- // Remap the channels based on the radio type.
- // FMU: Roll, Pitch, Yaw, Throttle
- // Graupner: Throttle, Roll, Pitch, Yaw
sched_lock();
- rc_channel_data[0] = system_state.rc_channel_data[1];
- rc_channel_data[1] = system_state.rc_channel_data[2];
- rc_channel_data[2] = system_state.rc_channel_data[3];
- rc_channel_data[3] = system_state.rc_channel_data[0];
- // AETR
- //rc_channel_data[0] = system_state.rc_channel_data[0];
- //rc_channel_data[1] = system_state.rc_channel_data[1];
- //rc_channel_data[2] = system_state.rc_channel_data[3];
- //rc_channel_data[3] = system_state.rc_channel_data[2];
- for (unsigned i = 4; i < system_state.rc_channels; i++) {
+
+ /* remap roll, pitch, yaw and throttle from RC specific to internal ordering */
+ rc_channel_data[ROLL] = system_state.rc_channel_data[system_state.rc_map[ROLL]];
+ rc_channel_data[PITCH] = system_state.rc_channel_data[system_state.rc_map[PITCH]];
+ rc_channel_data[YAW] = system_state.rc_channel_data[system_state.rc_map[YAW]];
+ rc_channel_data[THROTTLE] = system_state.rc_channel_data[system_state.rc_map[THROTTLE]];
+
+ /* get the remaining channels, no remapping needed */
+ for (unsigned i = 4; i < system_state.rc_channels; i++)
rc_channel_data[i] = system_state.rc_channel_data[i];
- }
+
+ /* scale the control inputs */
+ rc_channel_data[THROTTLE] = ((rc_channel_data[THROTTLE] - system_state.rc_min[THROTTLE]) /
+ (system_state.rc_max[THROTTLE] - system_state.rc_min[THROTTLE])) * 1000 + 1000;
+
control_values = &rc_channel_data[0];
sched_unlock();
} else {