Line data Source code
1 : #pragma once 2 : 3 : /* 4 : Simulator for the TeraRangerI2C rangefinder 5 : 6 : ./Tools/autotest/sim_vehicle.py --gdb --debug -v ArduCopter --speedup=1 7 : 8 : param set RNGFND1_TYPE 14 # TRI2C 9 : param ftp 10 : param set RNGFND1_ADDR 49 11 : graph RANGEFINDER.distance 12 : graph GLOBAL_POSITION_INT.relative_alt/1000-RANGEFINDER.distance 13 : reboot 14 : 15 : arm throttle 16 : rc 3 1600 17 : */ 18 : 19 : #include "SIM_config.h" 20 : 21 : #if AP_SIM_TERARANGERI2C_ENABLED 22 : 23 : #include "SIM_I2CDevice.h" 24 : 25 : namespace SITL { 26 : 27 : class TeraRangerI2CDevReg : public I2CRegEnum { 28 : public: 29 : // static constexpr uint8_t TRIGGER_READING = 0x00; 30 : static constexpr uint8_t WHO_AM_I = 0x01; 31 : static constexpr uint8_t CHANGE_BASE_ADDR = 0xA2; 32 : }; 33 : 34 : class TeraRangerI2C : public I2CDevice, public I2CRegisters_8Bit 35 : { 36 : public: 37 : 38 2094 : void init() override { 39 : // add_register("TRIGGER_READING", TeraRangerI2CDevReg::TRIGGER_READING, I2CRegisters::RegMode::WRONLY); 40 2094 : add_register("WHO_AM_I", TeraRangerI2CDevReg::WHO_AM_I, I2CRegisters::RegMode::RDONLY); 41 2094 : add_register("CHANGE_BASE_ADDR", TeraRangerI2CDevReg::CHANGE_BASE_ADDR, I2CRegisters::RegMode::WRONLY); 42 : 43 2094 : set_register(TeraRangerI2CDevReg::WHO_AM_I, (uint8_t)0xA1); 44 2094 : } 45 : 46 178759942 : void update(const class Aircraft &aircraft) override { 47 : // free running 48 178759942 : rangefinder_range = aircraft.rangefinder_range(); 49 178759942 : } 50 : 51 : int rdwr(I2C::i2c_rdwr_ioctl_data *&data) override; 52 : 53 : private: 54 : 55 : float rangefinder_range; 56 : 57 : uint32_t reading_start_us; 58 : }; 59 : 60 : } // namespace SITL 61 : 62 : #endif // AP_SIM_TERARANGERI2C_ENABLED