From 4ad1869f4304634d5434e2130cab14bc161128b2 Mon Sep 17 00:00:00 2001 From: Peter Barker Date: Wed, 5 Sep 2018 14:22:14 +1000 Subject: [PATCH] Plane: add arm/disarm on aux switch --- ArduPlane/Plane.h | 1 + ArduPlane/RC_Channel.cpp | 37 +++++++++++++++++++++++++++++++++++++ ArduPlane/RC_Channel.h | 5 +++++ 3 files changed, 43 insertions(+) diff --git a/ArduPlane/Plane.h b/ArduPlane/Plane.h index 4a8c9d7382..f7c3114410 100644 --- a/ArduPlane/Plane.h +++ b/ArduPlane/Plane.h @@ -150,6 +150,7 @@ public: friend class AP_AdvancedFailsafe_Plane; friend class AP_Avoidance_Plane; friend class GCS_Plane; + friend class RC_Channel_Plane; friend class RC_Channels_Plane; Plane(void); diff --git a/ArduPlane/RC_Channel.cpp b/ArduPlane/RC_Channel.cpp index 5e67701fcf..82dc614b78 100644 --- a/ArduPlane/RC_Channel.cpp +++ b/ArduPlane/RC_Channel.cpp @@ -26,3 +26,40 @@ bool RC_Channels_Plane::has_valid_input() const } return true; } + +void RC_Channel_Plane::init_aux_function(const RC_Channel::aux_func_t ch_option, + const RC_Channel::aux_switch_pos_t ch_flag) +{ + switch(ch_option) { + // the following functions do not need to be initialised: + case ARMDISARM: + break; + default: + RC_Channel::init_aux_function(ch_option, ch_flag); + break; +} +} + +// do_aux_function - implement the function invoked by auxillary switches +void RC_Channel_Plane::do_aux_function(const aux_func_t ch_option, const aux_switch_pos_t ch_flag) +{ + switch(ch_option) { + case ARMDISARM: + // arm or disarm the vehicle + switch (ch_flag) { + case HIGH: + plane.arm_motors(AP_Arming::ArmingMethod::AUXSWITCH, true); + break; + case MIDDLE: + // nothing + break; + case LOW: + plane.disarm_motors(); + break; + } + break; + default: + RC_Channel::do_aux_function(ch_option, ch_flag); + break; + } +} diff --git a/ArduPlane/RC_Channel.h b/ArduPlane/RC_Channel.h index f9b63afec2..5b31e90b00 100644 --- a/ArduPlane/RC_Channel.h +++ b/ArduPlane/RC_Channel.h @@ -9,6 +9,11 @@ public: protected: + void init_aux_function(aux_func_t ch_option, + aux_switch_pos_t ch_flag) override; + void do_aux_function(aux_func_t ch_option, aux_switch_pos_t) override; + + private: };