From aafc0789f0c52d16b38bac9bb4d1385e45a3566a Mon Sep 17 00:00:00 2001 From: Henry Wurzburg Date: Mon, 1 Aug 2022 18:44:01 -0500 Subject: [PATCH] SITL: add TeraRange Neo Rangefinder --- libraries/SITL/SIM_RF_TeraRanger_Serial.cpp | 40 +++++++++++++++++++++ libraries/SITL/SIM_RF_TeraRanger_Serial.h | 39 ++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 libraries/SITL/SIM_RF_TeraRanger_Serial.cpp create mode 100644 libraries/SITL/SIM_RF_TeraRanger_Serial.h diff --git a/libraries/SITL/SIM_RF_TeraRanger_Serial.cpp b/libraries/SITL/SIM_RF_TeraRanger_Serial.cpp new file mode 100644 index 0000000000..5f47f5071c --- /dev/null +++ b/libraries/SITL/SIM_RF_TeraRanger_Serial.cpp @@ -0,0 +1,40 @@ +/* + 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 . + */ +/* + Base class for simulator for the TeraRanger Serial RangeFinders +*/ + +#include "SIM_RF_TeraRanger_Serial.h" + +using namespace SITL; + +uint32_t RF_TeraRanger_Serial::packet_for_alt(uint16_t alt_cm, uint8_t *buffer, uint8_t buflen) +{ + uint16_t alt_mm = alt_cm * 10; + buffer[0] = 0x54; //header byte + buffer[1] = alt_mm >> 8; //MSB mm + buffer[2] = alt_mm & 0xff; //LSB mm + + if (alt_cm > 3000) { + buffer[3] = 0xC4; //full strength, out of range, no overtemp + } + else { + buffer[3] = 0xC0; //full strength, no reading error, no overtemp + } + + // calculate CRC8: + buffer[4] = crc_crc8(buffer,4);; + + return 5; +} + diff --git a/libraries/SITL/SIM_RF_TeraRanger_Serial.h b/libraries/SITL/SIM_RF_TeraRanger_Serial.h new file mode 100644 index 0000000000..314460699f --- /dev/null +++ b/libraries/SITL/SIM_RF_TeraRanger_Serial.h @@ -0,0 +1,39 @@ +/* + 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 TeraRanger NEO RangeFinder +./Tools/autotest/sim_vehicle.py --gdb --debug -v ArduCopter -A --uartF=sim:teraranger_serial --speedup=1 +param set SERIAL5_PROTOCOL 9 +param set RNGFND1_TYPE 35 +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_TeraRanger_Serial : public SerialRangeFinder { +public: + + uint32_t packet_for_alt(uint16_t alt_cm, uint8_t *buffer, uint8_t buflen) override; + + +}; + +}