FMU: Accomodate serial only RC input

This commit is contained in:
Lorenz Meier 2016-08-11 12:40:55 +02:00 committed by Lorenz Meier
parent 1c0a494b4d
commit c3022bf713
1 changed files with 24 additions and 11 deletions

View File

@ -405,13 +405,15 @@ PX4FMU::init()
return ret;
}
/* try to claim the generic PWM output device node as well - it's OK if we fail at this */
_class_instance = register_class_devname(PWM_OUTPUT_BASE_DEVICE_PATH);
if (_mode != MODE_NONE) {
/* try to claim the generic PWM output device node as well - it's OK if we fail at this */
_class_instance = register_class_devname(PWM_OUTPUT_BASE_DEVICE_PATH);
if (_class_instance == CLASS_DEVICE_PRIMARY) {
/* lets not be too verbose */
} else if (_class_instance < 0) {
warnx("FAILED registering class device");
if (_class_instance == CLASS_DEVICE_PRIMARY) {
/* lets not be too verbose */
} else if (_class_instance < 0) {
warnx("FAILED registering class device");
}
}
_safety_disabled = circuit_breaker_enabled("CBRK_IO_SAFETY", CBRK_IO_SAFETY_KEY);
@ -422,7 +424,7 @@ PX4FMU::init()
}
void
PX4FMU:: safety_check_button(void)
PX4FMU::safety_check_button(void)
{
#ifdef GPIO_BTN_SAFETY
static int counter = 0;
@ -859,10 +861,12 @@ void PX4FMU::rc_io_invert(bool invert)
{
INVERT_RC_INPUT(invert);
#ifdef GPIO_RC_OUT
if (!invert) {
// set FMU_RC_OUTPUT high to pull RC_INPUT up
px4_arch_gpiowrite(GPIO_RC_OUT, 1);
}
#endif
}
#endif
@ -907,8 +911,10 @@ PX4FMU::cycle()
_rcs_fd = dsm_init(RC_SERIAL_PORT);
// assume SBUS input
sbus_config(_rcs_fd, false);
#ifdef GPIO_PPM_IN
// disable CPPM input by mapping it away from the timer capture input
px4_arch_unconfiggpio(GPIO_PPM_IN);
#endif
#endif
_initialized = true;
@ -2017,7 +2023,7 @@ PX4FMU::pwm_ioctl(file *filp, int cmd, unsigned long arg)
break;
}
#ifdef RC_SERIAL_PORT
#ifdef GPIO_SPEKTRUM_PWR_EN
case DSM_BIND_START:
/* only allow DSM2, DSM-X and DSM-X with more than 7 channels */
@ -2960,6 +2966,9 @@ fmu_main(int argc, char *argv[])
if (!strcmp(verb, "mode_gpio")) {
new_mode = PORT_FULL_GPIO;
} else if (!strcmp(verb, "mode_rcin")) {
exit(0);
} else if (!strcmp(verb, "mode_pwm")) {
new_mode = PORT_FULL_PWM;
@ -3050,12 +3059,16 @@ fmu_main(int argc, char *argv[])
exit(0);
}
fprintf(stderr, "FMU: unrecognised command %s, try:\n", verb);
fprintf(stderr, "FMU: unrecognized command %s, try:\n", verb);
#if defined(RC_SERIAL_PORT)
fprintf(stderr, " mode_rcin");
#endif
#if defined(BOARD_HAS_MULTI_PURPOSE_GPIO)
fprintf(stderr,
" mode_gpio, mode_serial, mode_pwm, mode_gpio_serial, mode_pwm_serial, mode_pwm_gpio, test, fake, sensor_reset, id\n");
" , mode_gpio, mode_serial, mode_pwm, mode_gpio_serial, mode_pwm_serial, mode_pwm_gpio, test, fake, sensor_reset, id\n");
#elif defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6
fprintf(stderr, " mode_gpio, mode_pwm, mode_pwm4, test, sensor_reset [milliseconds], i2c <bus> <hz>\n");
fprintf(stderr, " mode_gpio, mode_pwm, mode_pwm4, test, sensor_reset [milliseconds], i2c <bus> <hz>\n");
#endif
fprintf(stderr, "\n");
exit(1);
}