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 : Simulator for the Wasp serial rangefinder 17 : 18 : ./Tools/autotest/sim_vehicle.py --gdb --debug -v ArduCopter -A --serial5=sim:wasp --speedup=1 19 : 20 : param set SERIAL5_PROTOCOL 9 21 : param set RNGFND1_TYPE 18 22 : graph RANGEFINDER.distance 23 : graph GLOBAL_POSITION_INT.relative_alt/1000-RANGEFINDER.distance 24 : reboot 25 : 26 : arm throttle 27 : rc 3 1600 28 : */ 29 : 30 : #pragma once 31 : 32 : #include "SIM_SerialRangeFinder.h" 33 : 34 : namespace SITL { 35 : 36 : class RF_Wasp : public SerialRangeFinder { 37 : public: 38 : 39 1 : static SerialRangeFinder *create() { return NEW_NOTHROW RF_Wasp(); } 40 : 41 : void update(float range) override; 42 : 43 : uint32_t packet_for_alt(float alt_m, uint8_t *buffer, uint8_t buflen) override; 44 : 45 : // 20Hz; if Wasp driver doesn't get a reading each time its update 46 : // is called it goes NoData 47 85099 : uint16_t reading_interval_ms() const override { return 50; } 48 : 49 : private: 50 : 51 : void check_configuration(); 52 : 53 : struct { 54 : bool go; 55 : char format[16]; // e.g. ASCII 56 : char baud[5]; // low or high 57 : char lbe[7]; // big or little 58 : int frq; 59 : int aut; 60 : int mavg; 61 : int medf; 62 : int avg; 63 : int auv; 64 : } config; 65 : 66 : const struct { 67 : const char *name; 68 : char *value; 69 : } string_configs[3] { 70 : { "FMT", config.format }, 71 : { "BAUD", config.baud }, 72 : { "LBE", config.lbe }, 73 : }; 74 : const struct { 75 : const char *name; 76 : int *value; 77 : } integer_configs[6] { 78 : { "FRQ", &config.frq }, 79 : { "AUT", &config.aut }, 80 : { "MAVG", &config.mavg }, 81 : { "MEDF", &config.medf }, 82 : { "AVG", &config.avg }, 83 : { "AUV", &config.auv }, 84 : }; 85 : 86 : char _buffer[256]; // from-autopilot 87 : uint8_t _buflen; 88 : 89 : }; 90 : 91 : }