aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-10-15 22:19:06 +0200
committerLorenz Meier <lm@inf.ethz.ch>2014-10-15 22:19:06 +0200
commit0d917576d484d2e2dc0233c5545a16e36f6e2f41 (patch)
tree3957ef1d26713f137db9e6593a0377186ea6b028 /src
parent3eb68bc66000e01849b562e2e3f7a077e1668203 (diff)
downloadpx4-firmware-0d917576d484d2e2dc0233c5545a16e36f6e2f41.tar.gz
px4-firmware-0d917576d484d2e2dc0233c5545a16e36f6e2f41.tar.bz2
px4-firmware-0d917576d484d2e2dc0233c5545a16e36f6e2f41.zip
Enable flaps in manual override
Diffstat (limited to 'src')
-rw-r--r--src/drivers/px4io/px4io.cpp9
-rw-r--r--src/modules/px4iofirmware/controls.c14
2 files changed, 19 insertions, 4 deletions
diff --git a/src/drivers/px4io/px4io.cpp b/src/drivers/px4io/px4io.cpp
index d212be766..73160b2d9 100644
--- a/src/drivers/px4io/px4io.cpp
+++ b/src/drivers/px4io/px4io.cpp
@@ -1265,11 +1265,18 @@ PX4IO::io_set_rc_config()
if ((ichan >= 0) && (ichan < (int)_max_rc_input))
input_map[ichan - 1] = 3;
- param_get(param_find("RC_MAP_MODE_SW"), &ichan);
+ param_get(param_find("RC_MAP_FLAPS"), &ichan);
if ((ichan >= 0) && (ichan < (int)_max_rc_input))
input_map[ichan - 1] = 4;
+ param_get(param_find("RC_MAP_MODE_SW"), &ichan);
+
+ if ((ichan >= 0) && (ichan < (int)_max_rc_input)) {
+ /* use out of normal bounds index to indicate special channel */
+ input_map[ichan - 1] = 8;
+ }
+
/*
* Iterate all possible RC inputs.
*/
diff --git a/src/modules/px4iofirmware/controls.c b/src/modules/px4iofirmware/controls.c
index 7b127759a..0b0832d55 100644
--- a/src/modules/px4iofirmware/controls.c
+++ b/src/modules/px4iofirmware/controls.c
@@ -60,6 +60,8 @@ static perf_counter_t c_gather_ppm;
static int _dsm_fd;
+static uint16_t rc_value_override = 0;
+
bool dsm_port_input(uint16_t *rssi, bool *dsm_updated, bool *st24_updated)
{
perf_begin(c_gather_dsm);
@@ -313,8 +315,14 @@ controls_tick() {
}
}
- r_rc_values[mapped] = SIGNED_TO_REG(scaled);
- assigned_channels |= (1 << mapped);
+ /* pick out override channel, indicated by mapping 8 (9 th channel, virtual) */
+ if (mapped == 8) {
+ rc_value_override = SIGNED_TO_REG(scaled);
+ } else {
+ /* normal channel */
+ r_rc_values[mapped] = SIGNED_TO_REG(scaled);
+ assigned_channels |= (1 << mapped);
+ }
}
}
@@ -409,7 +417,7 @@ controls_tick() {
* requested override.
*
*/
- if ((r_status_flags & PX4IO_P_STATUS_FLAGS_RC_OK) && (REG_TO_SIGNED(r_rc_values[4]) < RC_CHANNEL_LOW_THRESH))
+ if ((r_status_flags & PX4IO_P_STATUS_FLAGS_RC_OK) && (REG_TO_SIGNED(rc_value_override) < RC_CHANNEL_LOW_THRESH))
override = true;
if (override) {