123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #pragma once
- #include <GCS_MAVLink/GCS_MAVLink.h>
- #include "AccelCalibrator.h"
- #define AP_ACCELCAL_MAX_NUM_CLIENTS 4
- class GCS_MAVLINK;
- class AP_AccelCal_Client;
- class AP_AccelCal {
- public:
- AP_AccelCal():
- _use_gcs_snoop(true),
- _started(false),
- _saving(false)
- { update_status(); }
- // start all the registered calibrations
- void start(GCS_MAVLINK *gcs);
- // called on calibration cancellation
- void cancel();
- // Run an iteration of all registered calibrations
- void update();
- // get the status of the calibrator server as a whole
- accel_cal_status_t get_status() { return _status; }
-
- // Set vehicle position sent by the GCS
- bool gcs_vehicle_position(float position);
- // interface to the clients for registration
- static void register_client(AP_AccelCal_Client* client);
- void handleMessage(const mavlink_message_t &msg);
- private:
- GCS_MAVLINK *_gcs;
- bool _use_gcs_snoop;
- bool _waiting_for_mavlink_ack = false;
- uint32_t _last_position_request_ms;
- uint8_t _step;
- accel_cal_status_t _status;
- accel_cal_status_t _last_result;
- static uint8_t _num_clients;
- static AP_AccelCal_Client* _clients[AP_ACCELCAL_MAX_NUM_CLIENTS];
- // called on calibration success
- void success();
- // called on calibration failure
- void fail();
- // reset all the calibrators to there pre calibration stage so as to make them ready for next calibration request
- void clear();
- // proceed through the collection step for each of the registered calibrators
- void collect_sample();
- // update the state of the Accel calibrator server
- void update_status();
- // checks if no new sample has been received for considerable amount of time
- bool check_for_timeout();
- // check if client's calibrator is active
- bool client_active(uint8_t client_num);
- bool _started;
- bool _saving;
- uint8_t _num_active_calibrators;
- AccelCalibrator* get_calibrator(uint8_t i);
- };
- class AP_AccelCal_Client {
- friend class AP_AccelCal;
- private:
- // getters
- virtual bool _acal_get_saving() { return false; }
- virtual bool _acal_get_ready_to_sample() { return true; }
- virtual bool _acal_get_fail() { return false; }
- virtual AccelCalibrator* _acal_get_calibrator(uint8_t instance) = 0;
- // events
- virtual void _acal_save_calibrations() = 0;
- virtual void _acal_event_success() {};
- virtual void _acal_event_cancellation() {};
- virtual void _acal_event_failure() {};
- };
|