/* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Simulator for the Wasp serial rangefinder ./Tools/autotest/sim_vehicle.py --gdb --debug -v ArduCopter -A --serial5=sim:wasp --speedup=1 param set SERIAL5_PROTOCOL 9 param set RNGFND1_TYPE 18 graph RANGEFINDER.distance graph GLOBAL_POSITION_INT.relative_alt/1000-RANGEFINDER.distance reboot arm throttle rc 3 1600 */ #pragma once #include "SIM_SerialRangeFinder.h" namespace SITL { class RF_Wasp : public SerialRangeFinder { public: void update(float range) override; uint32_t packet_for_alt(uint16_t alt_cm, uint8_t *buffer, uint8_t buflen) override; // 20Hz; if Wasp driver doesn't get a reading each time its update // is called it goes NoData uint16_t reading_interval_ms() const override { return 50; } private: void check_configuration(); struct { bool go; char format[16]; // e.g. ASCII char baud[5]; // low or high char lbe[7]; // big or little int frq; int aut; int mavg; int medf; int avg; int auv; } config; const struct { const char *name; char *value; } string_configs[3] { { "FMT", config.format }, { "BAUD", config.baud }, { "LBE", config.lbe }, }; const struct { const char *name; int *value; } integer_configs[6] { { "FRQ", &config.frq }, { "AUT", &config.aut }, { "MAVG", &config.mavg }, { "MEDF", &config.medf }, { "AVG", &config.avg }, { "AUV", &config.auv }, }; char _buffer[256]; // from-autopilot uint8_t _buflen; }; }