Line data Source code
1 : /* 2 : This program is free software: you can redistribute it and/or modify 3 : it under the terms of the GNU General Public License as published by 4 : the Free Software Foundation, either version 3 of the License, or 5 : (at your option) any later version. 6 : 7 : This program is distributed in the hope that it will be useful, 8 : but WITHOUT ANY WARRANTY; without even the implied warranty of 9 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 : GNU General Public License for more details. 11 : 12 : You should have received a copy of the GNU General Public License 13 : along with this program. If not, see <http://www.gnu.org/licenses/>. 14 : */ 15 : /* 16 : simple parachute simulation class 17 : */ 18 : 19 : #pragma once 20 : 21 : #include "stdint.h" 22 : #include <AP_Param/AP_Param.h> 23 : #include "SITL_Input.h" 24 : #include <AP_Math/AP_Math.h> 25 : 26 : namespace SITL { 27 : 28 : class Parachute { 29 : public: 30 2096 : Parachute() { 31 2096 : AP_Param::setup_object_defaults(this, var_info); 32 2096 : }; 33 : 34 : // update parachute state 35 : void update(const struct sitl_input &input); 36 : 37 : Vector3f drag() const; 38 : 39 : static const struct AP_Param::GroupInfo var_info[]; 40 178759942 : bool is_enabled() const {return static_cast<bool>(parachute_enable);} 41 : 42 : private: 43 : 44 : AP_Int8 parachute_enable; // enable parachute sim 45 : AP_Int8 parachute_pin; // pin with pyrotechnics on 46 : 47 : const uint32_t report_interval = 1000000; // microseconds 48 : uint64_t last_report_us; 49 : 50 : uint32_t deployed_ms; // time parachute was deployed 51 : 52 : uint64_t last_update_us; 53 : 54 : bool should_report() const; 55 : bool zero_report_done = false; 56 : }; 57 : 58 : }