diff --git a/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp b/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp index a38ee34592..e2644a4c43 100644 --- a/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp +++ b/libraries/AP_HAL_Linux/HAL_Linux_Class.cpp @@ -28,6 +28,8 @@ #include "RCInput_SBUS.h" #include "RCInput_UART.h" #include "RCInput_UDP.h" +#include "RCInput_115200.h" +#include "RCInput_Multi.h" #include "RCOutput_AeroIO.h" #include "RCOutput_AioPRU.h" #include "RCOutput_Bebop.h" @@ -146,8 +148,9 @@ static RCInput_UDP rcinDriver; static RCInput_UART rcinDriver("/dev/ttyS2"); #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_QFLIGHT static RCInput_DSM rcinDriver; -#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO || \ - CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO +#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO +static RCInput_Multi rcinDriver{2, new RCInput_SBUS, new RCInput_115200("/dev/uart-sumd")}; +#elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_AERO static RCInput_SBUS rcinDriver; #elif CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_NAVIO2 static RCInput_Navio2 rcinDriver; diff --git a/libraries/AP_HAL_Linux/RCInput_Multi.cpp b/libraries/AP_HAL_Linux/RCInput_Multi.cpp new file mode 100644 index 0000000000..e1dce3229d --- /dev/null +++ b/libraries/AP_HAL_Linux/RCInput_Multi.cpp @@ -0,0 +1,68 @@ +/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- +/* + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ +/* + this is a driver for multiple RCInput methods on one board + */ + +#include + +#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO +#include "RCInput_Multi.h" + +extern const AP_HAL::HAL& hal; + +using namespace Linux; + +// constructor +RCInput_Multi::RCInput_Multi(uint8_t _num_inputs, ...) : + num_inputs(_num_inputs) +{ + va_list ap; + inputs = new RCInput*[num_inputs]; + if (inputs == nullptr) { + AP_HAL::panic("failed to allocated RCInput array"); + } + va_start(ap, _num_inputs); + for (uint8_t i=0; iinit(); + } +} + +void RCInput_Multi::_timer_tick(void) +{ + for (uint8_t i=0; i_timer_tick(); + if (inputs[i]->new_input()) { + inputs[i]->read(_pwm_values, inputs[i]->num_channels()); + _num_channels = inputs[i]->num_channels(); + new_rc_input = true; + } + } +} + +#endif // CONFIG_HAL_BOARD_SUBTYPE + diff --git a/libraries/AP_HAL_Linux/RCInput_Multi.h b/libraries/AP_HAL_Linux/RCInput_Multi.h new file mode 100644 index 0000000000..2e183bb85f --- /dev/null +++ b/libraries/AP_HAL_Linux/RCInput_Multi.h @@ -0,0 +1,39 @@ +/* + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#pragma once + +#include +#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_DISCO + +#include "RCInput.h" +#include + +namespace Linux { + +class RCInput_Multi : public RCInput +{ +public: + RCInput_Multi(uint8_t num_inputs, ...); + void init() override; + void _timer_tick(void) override; + +private: + uint8_t num_inputs; + RCInput **inputs; +}; +}; + +#endif // CONFIG_HAL_BOARD_SUBTYPE