Skip to content

Commit

Permalink
Merge pull request #122 from PX4/sbus_rcloss_fix
Browse files Browse the repository at this point in the history
Fixed connection loss / failsafe detection, added decoding of two switches
  • Loading branch information
px4dev committed Jan 6, 2013
2 parents 94fa60f + 329ac2f commit 532c694
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions apps/px4io/sbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
#include "debug.h"

#define SBUS_FRAME_SIZE 25
#define SBUS_INPUT_CHANNELS 16
#define SBUS_INPUT_CHANNELS 18

static int sbus_fd = -1;

Expand Down Expand Up @@ -87,10 +87,9 @@ sbus_init(const char *device)
partial_frame_count = 0;
last_rx_time = hrt_absolute_time();

debug("Sbus: ready");

debug("S.Bus: ready");
} else {
debug("Sbus: open failed");
debug("S.Bus: open failed");
}

return sbus_fd;
Expand Down Expand Up @@ -208,9 +207,13 @@ sbus_decode(hrt_abstime frame_time)
return;
}

/* if the failsafe bit is set, we consider the frame invalid */
if (frame[23] & (1 << 4)) {
return;
/* if the failsafe or connection lost bit is set, we consider the frame invalid */
if ((frame[23] & (1 << 2)) && /* signal lost */
(frame[23] & (1 << 3))) { /* failsafe */

/* actively announce signal loss */
system_state.rc_channels = 0;
return 1;
}

/* we have received something we think is a frame */
Expand Down Expand Up @@ -240,9 +243,12 @@ sbus_decode(hrt_abstime frame_time)
system_state.rc_channel_data[channel] = (value / 2) + 998;
}

if (PX4IO_INPUT_CHANNELS >= 18) {
chancount = 18;
/* XXX decode the two switch channels */
/* decode switch channels if data fields are wide enough */
if (chancount > 17) {
/* channel 17 (index 16) */
system_state.rc_channel_data[16] = (frame[23] & (1 << 0)) * 1000 + 998;
/* channel 18 (index 17) */
system_state.rc_channel_data[17] = (frame[23] & (1 << 1)) * 1000 + 998;
}

/* note the number of channels decoded */
Expand Down

0 comments on commit 532c694

Please sign in to comment.