diff options
author | px4dev <px4@purgatory.org> | 2012-12-04 22:00:24 -0800 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2012-12-04 22:00:24 -0800 |
commit | fd771f67f2a2392d5ba2b7dd74100338859af6d7 (patch) | |
tree | fcb3a1cf40e91dfc45ae7e50a7ecf679154efcc8 /apps | |
parent | 7c3b28d503123121403b4ad68c934bb91b05d878 (diff) | |
download | px4-firmware-fd771f67f2a2392d5ba2b7dd74100338859af6d7.tar.gz px4-firmware-fd771f67f2a2392d5ba2b7dd74100338859af6d7.tar.bz2 px4-firmware-fd771f67f2a2392d5ba2b7dd74100338859af6d7.zip |
Adjust the control mapping from DSM receivers to correspond to the standard PPM control mapping for channels 0-4.
Diffstat (limited to 'apps')
-rw-r--r-- | apps/px4io/comms.c | 2 | ||||
-rw-r--r-- | apps/px4io/dsm.c | 26 | ||||
-rw-r--r-- | apps/px4io/px4io.h | 2 |
3 files changed, 24 insertions, 6 deletions
diff --git a/apps/px4io/comms.c b/apps/px4io/comms.c index 480e3f5cc..83a006d43 100644 --- a/apps/px4io/comms.c +++ b/apps/px4io/comms.c @@ -130,7 +130,7 @@ comms_main(void) last_report_time = now; /* populate the report */ - for (int i = 0; i < system_state.rc_channels; i++) + for (unsigned i = 0; i < system_state.rc_channels; i++) report.rc_channel[i] = system_state.rc_channel_data[i]; report.channel_count = system_state.rc_channels; report.armed = system_state.armed; diff --git a/apps/px4io/dsm.c b/apps/px4io/dsm.c index 04aca709b..2611f3a03 100644 --- a/apps/px4io/dsm.c +++ b/apps/px4io/dsm.c @@ -322,10 +322,28 @@ dsm_decode(hrt_abstime frame_time) /* convert 0-1024 / 0-2048 values to 1000-2000 ppm encoding in a very sloppy fashion */ if (channel_shift == 11) value /= 2; - - /* stuff the decoded channel into the PPM input buffer */ - /* XXX check actual values */ - system_state.rc_channel_data[channel] = 988 + value; + value += 998; + + /* + * Store the decoded channel into the R/C input buffer, taking into + * account the different ideas about channel assignement that we have. + * + * Specifically, the first four channels in rc_channel_data are roll, pitch, thrust, yaw, + * but the first four channels from the DSM receiver are thrust, roll, pitch, yaw. + */ + switch (channel) { + case 0: + channel = 2; + break; + case 1: + channel = 0; + break; + case 2: + channel = 1; + default: + break; + } + system_state.rc_channel_data[channel] = value; } /* and note that we have received data from the R/C controller */ diff --git a/apps/px4io/px4io.h b/apps/px4io/px4io.h index 0032e6d80..45b7cf847 100644 --- a/apps/px4io/px4io.h +++ b/apps/px4io/px4io.h @@ -75,7 +75,7 @@ struct sys_state_s /* * Data from the remote control input(s) */ - int rc_channels; + unsigned rc_channels; uint16_t rc_channel_data[PX4IO_INPUT_CHANNELS]; uint64_t rc_channels_timestamp; |