Line data Source code
1 : #include <AP_HAL/AP_HAL.h> 2 : #if CONFIG_HAL_BOARD == HAL_BOARD_SITL 3 : 4 : #include "AP_HAL_SITL.h" 5 : #include "AnalogIn.h" 6 : #include <stdint.h> 7 : 8 : #define VOLTAGE_TO_PIN_VALUE(_v) (constrain_float(_v * (SITL_ADC_MAX_PIN_VALUE/SITL_ADC_FULL_SCALE_VOLTAGE), 0, SITL_ADC_MAX_PIN_VALUE)) 9 : 10 : using namespace HALSITL; 11 : 12 : extern const AP_HAL::HAL& hal; 13 : 14 6516 : ADCSource::ADCSource(SITL_State *sitlState, int16_t pin) : 15 6516 : _sitlState(sitlState), 16 6516 : _pin(pin) 17 6516 : {} 18 : 19 0 : float ADCSource::read_average() { 20 0 : return read_latest(); 21 : } 22 : 23 3188259 : float ADCSource::voltage_average() { 24 3188259 : return voltage_latest(); 25 : } 26 : 27 3188259 : float ADCSource::voltage_latest() { 28 3188259 : switch (_pin) { 29 0 : case ANALOG_INPUT_BOARD_VCC: 30 0 : return SITL_ADC_MAX_PIN_VALUE; 31 : 32 162019 : case 0: 33 162019 : return _sitlState->sonar_pin_voltage; 34 : 35 547763 : case 1: 36 547763 : return _sitlState->airspeed_pin_voltage[0]; 37 : 38 4309 : case 2: 39 4309 : return _sitlState->airspeed_pin_voltage[1]; 40 : 41 1237084 : case 12: 42 1237084 : return _sitlState->current_pin_voltage; 43 : 44 1236812 : case 13: 45 1236812 : return _sitlState->voltage_pin_voltage; 46 : 47 0 : case 14: 48 0 : return _sitlState->current2_pin_voltage; 49 : 50 0 : case 15: 51 0 : return _sitlState->voltage2_pin_voltage; 52 : 53 272 : case ANALOG_INPUT_NONE: 54 : default: 55 272 : return 0.0f; 56 : } 57 : } 58 : 59 0 : float ADCSource::read_latest() { 60 0 : return VOLTAGE_TO_PIN_VALUE(voltage_latest()); 61 : } 62 : 63 3188259 : bool ADCSource::set_pin(uint8_t pin) { 64 3188259 : _pin = pin; 65 3188259 : return pin != ANALOG_INPUT_NONE; 66 : } 67 : 68 2094 : void AnalogIn::init() { 69 2094 : } 70 : 71 6516 : AP_HAL::AnalogSource* AnalogIn::channel(int16_t pin) { 72 6516 : return NEW_NOTHROW ADCSource(_sitlState, pin); 73 : } 74 : 75 : #endif