diff options
author | Simon Wilks <sjwilks@gmail.com> | 2013-01-05 22:13:12 +0100 |
---|---|---|
committer | Simon Wilks <sjwilks@gmail.com> | 2013-01-05 22:13:12 +0100 |
commit | 0a89ab7075e4d637c91e21246c4790599f046aec (patch) | |
tree | b21cc275b31a2b85892f5869c9426c15488b7886 /apps/px4io/mixer.cpp | |
parent | 1b81724ef7d9c1424b493740d887e6c3ce259f38 (diff) | |
download | px4-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.cpp | 34 |
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 { |