Path: blob/master/libraries/AP_BattMonitor/AP_BattMonitor_INA2xx.h
9692 views
#pragma once12#include <AP_Common/AP_Common.h>3#include <AP_HAL/I2CDevice.h>4#include "AP_BattMonitor_Backend.h"5#include <AP_Param/AP_Param.h>6#include <utility>78#if AP_BATTERY_INA2XX_ENABLED910class AP_BattMonitor_INA2XX : public AP_BattMonitor_Backend11{12public:13/// Constructor14AP_BattMonitor_INA2XX(AP_BattMonitor &mon,15AP_BattMonitor::BattMonitor_State &mon_state,16AP_BattMonitor_Params ¶ms);1718bool has_cell_voltages() const override { return false; }19bool has_temperature() const override { return has_temp; }20bool has_current() const override { return true; }21bool get_cycle_count(uint16_t &cycles) const override { return false; }22bool get_temperature(float &temperature) const override;2324void init(void) override;25void read() override;2627static const struct AP_Param::GroupInfo var_info[];2829private:30AP_HAL::I2CDevice *dev;3132enum class DevType : uint8_t {33UNKNOWN = 0,34INA226,35INA228,36INA238,37INA231,38INA260,39};4041static const uint8_t i2c_probe_addresses[];42uint8_t i2c_probe_next;4344bool configure(DevType dtype);45bool read_word16(const uint8_t reg, int16_t& data) const;46bool read_word24(const uint8_t reg, int32_t& data) const;47bool write_word(const uint8_t reg, const uint16_t data) const;48void timer(void);49bool detect_device(void);5051DevType dev_type;52uint32_t last_detect_ms;5354AP_Int8 i2c_bus;55AP_Int8 i2c_address;56AP_Float max_amps;57AP_Float rShunt;58uint32_t failed_reads;5960struct {61uint16_t count;62float volt_sum;63float current_sum;64HAL_Semaphore sem;65} accumulate;66float current_LSB;67float voltage_LSB;6869float temperature;7071bool has_temp;72};7374#endif // AP_BATTERY_INA2XX_ENABLED757677