123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #pragma once
- #include <AP_Param/AP_Param.h>
- #include "stdint.h"
- /*
- transmitter tuning library. Meant to be subclassed per vehicle type
- */
- class AP_Tuning
- {
- public:
- struct tuning_set {
- uint8_t set;
- uint8_t num_parms;
- const uint8_t *parms;
- };
- struct tuning_name {
- uint8_t parm;
- const char *name;
- };
- // constructor
- AP_Tuning(const struct tuning_set *sets, const struct tuning_name *names) :
- tuning_sets(sets),
- tuning_names(names) {
- AP_Param::setup_object_defaults(this, var_info);
- }
-
- // var_info for holding Parameter information
- static const struct AP_Param::GroupInfo var_info[];
- // update function called on new radio frames
- void check_input(uint8_t flightmode);
- // base parameter number for tuning sets of parameters in one flight
- const uint8_t set_base = 100;
-
- private:
- AP_Int8 channel;
- AP_Int16 channel_min;
- AP_Int16 channel_max;
- AP_Int8 selector;
- AP_Float range;
- AP_Int8 mode_revert;
- AP_Float error_threshold;
- // when selector was triggered
- uint32_t selector_start_ms;
- // are we waiting for channel mid-point?
- bool mid_point_wait;
- // last input from tuning channel
- float last_channel_value;
-
- // mid-value for current parameter
- float center_value;
- uint32_t last_check_ms;
- void Log_Write_Parameter_Tuning(float value);
-
- // the parameter we are tuning
- uint8_t current_parm;
- // current index into the parameter set
- uint8_t current_parm_index;
- // current parameter set
- uint8_t current_set;
- // true if tune has changed
- bool changed:1;
- // mask of params in set that need reverting
- uint32_t need_revert;
-
- // last flight mode we were tuning in
- uint8_t last_flightmode;
- // last time we reported controller error
- uint32_t last_controller_error_ms;
-
- const tuning_set *tuning_sets;
- const tuning_name *tuning_names;
-
- void check_selector_switch(void);
- void re_center(void);
- void next_parameter(void);
- void save_parameters(void);
- void revert_parameters(void);
- const char *get_tuning_name(uint8_t parm);
- void check_controller_error(void);
- protected:
- // virtual functions that must be implemented in vehicle subclass
- virtual AP_Float *get_param_pointer(uint8_t parm) = 0;
- virtual void save_value(uint8_t parm) = 0;
- virtual void reload_value(uint8_t parm) = 0;
- virtual void set_value(uint8_t parm, float value) = 0;
- virtual float controller_error(uint8_t parm) = 0;
- // parmset is in vehicle subclass var table
- AP_Int16 parmset;
- };
|