4 #include <AP_Math/AP_Math.h>
20 // do not allow copying
23 // returns a unique number specific to this mode
24 virtual Mode::Number
number() const = 0;
26 virtual bool requires_armed_servos() const = 0;
28 virtual void update() = 0;
34 bool get_ef_yaw_direction();
36 void calc_angle_error(float pitch
, float yaw
, bool direction_reversed
);
37 void convert_ef_to_bf(float pitch
, float yaw
, float& bf_pitch
, float& bf_yaw
);
38 bool convert_bf_to_ef(float pitch
, float yaw
, float& ef_pitch
, float& ef_yaw
);
41 class ModeAuto
: public Mode
{
43 Mode::Number
number() const override
{ return Mode::Number::AUTO
; }
44 bool requires_armed_servos() const override
{ return true; }
45 void update() override
;
48 class ModeGuided
: public Mode
{
50 Mode::Number
number() const override
{ return Mode::Number::GUIDED
; }
51 bool requires_armed_servos() const override
{ return true; }
52 void update() override
;
54 void set_angle(const Quaternion
&target_att
, bool use_yaw_rate
, float yaw_rate_rads
) {
55 _target_att
= target_att
;
56 _use_yaw_rate
= use_yaw_rate
;
57 _yaw_rate_rads
= yaw_rate_rads
;
61 Quaternion _target_att
;
66 class ModeInitialising
: public Mode
{
68 Mode::Number
number() const override
{ return Mode::Number::INITIALISING
; }
69 bool requires_armed_servos() const override
{ return false; }
70 void update() override
{};
73 class ModeManual
: public Mode
{
75 Mode::Number
number() const override
{ return Mode::Number::MANUAL
; }
76 bool requires_armed_servos() const override
{ return true; }
77 void update() override
;
80 class ModeScan
: public Mode
{
82 Mode::Number
number() const override
{ return Mode::Number::SCAN
; }
83 bool requires_armed_servos() const override
{ return true; }
84 void update() override
;
87 class ModeServoTest
: public Mode
{
89 Mode::Number
number() const override
{ return Mode::Number::SERVOTEST
; }
90 bool requires_armed_servos() const override
{ return true; }
91 void update() override
{};
93 bool set_servo(uint8_t servo_num
, uint16_t pwm
);
96 class ModeStop
: public Mode
{
98 Mode::Number
number() const override
{ return Mode::Number::STOP
; }
99 bool requires_armed_servos() const override
{ return false; }
100 void update() override
{};