Line data Source code
1 : #pragma once 2 : 3 : #include <AP_HAL/AP_HAL.h> 4 : #include "AP_HAL_SITL_Namespace.h" 5 : 6 : #define SITL_ADC_RESOLUTION 16 // bits of resolution 7 : #define SITL_ADC_MAX_PIN_VALUE ((1<<SITL_ADC_RESOLUTION)-1) 8 : #define SITL_ADC_FULL_SCALE_VOLTAGE 5.0f 9 : #define SITL_INPUT_MAX_CHANNELS 12 10 : 11 : class HALSITL::ADCSource : public AP_HAL::AnalogSource { 12 : public: 13 : friend class HALSITL::AnalogIn; 14 : /* pin designates the ADC input number */ 15 : ADCSource(SITL_State *sitlState, int16_t pin); 16 : 17 : /* implement AnalogSource virtual api: */ 18 : float read_average() override; 19 : float read_latest() override; 20 : bool set_pin(uint8_t p) override; 21 : float voltage_average() override; 22 : float voltage_latest() override; 23 714091 : float voltage_average_ratiometric() override { 24 714091 : return voltage_average(); 25 : } 26 : 27 : private: 28 : SITL_State *_sitlState; 29 : int16_t _pin; 30 : }; 31 : 32 : /* AnalogIn : a concrete class providing the implementations of the 33 : * timer event and the AP_HAL::AnalogIn interface */ 34 : class HALSITL::AnalogIn : public AP_HAL::AnalogIn { 35 : public: 36 2145 : explicit AnalogIn(SITL_State *sitlState): _sitlState(sitlState) {} 37 : void init() override; 38 : AP_HAL::AnalogSource* channel(int16_t n) override; 39 1254613 : float board_voltage(void) override { 40 1254613 : return 5.0f; 41 : } 42 : private: 43 : static ADCSource* _channels[SITL_INPUT_MAX_CHANNELS]; 44 : SITL_State *_sitlState; 45 : };