9 #define BATTMONITOR_SMBUS_SOLO_CELL_VOLTAGE 0x28 // cell voltage register 10 #define BATTMONITOR_SMBUS_SOLO_CURRENT 0x2a // current register 11 #define BATTMONITOR_SMBUS_SOLO_BUTTON_DEBOUNCE 3 // button held down for 3 intervals will cause a power off event 13 #define BATTMONITOR_SMBUS_SOLO_NUM_CELLS 4 46 float pack_voltage_mv = 0.0f;
48 uint16_t cell = buff[(i * 2) + 1] << 8 | buff[i * 2];
50 pack_voltage_mv += (float)cell;
72 _state.
current_amps = -(float)((int32_t)((uint32_t)buff[3]<<24 | (uint32_t)buff[2]<<16 | (uint32_t)buff[1]<<8 | (uint32_t)buff[0])) / 1000.0f;
81 bool pressed = (buff[1] >> 3) & 0x01;
105 uint8_t buff[max_len+2];
113 uint8_t bufflen = buff[0];
116 if (bufflen == 0 || bufflen > max_len) {
122 if (pec != buff[bufflen+1]) {
127 memcpy(data, &buff[1], bufflen);
131 data[bufflen] =
'\0';
#define BATTMONITOR_SMBUS_SOLO_BUTTON_DEBOUNCE
AP_BattMonitor_SMBus_Solo(AP_BattMonitor &mon, AP_BattMonitor::BattMonitor_State &mon_state, AP_BattMonitor_Params ¶ms, AP_HAL::OwnPtr< AP_HAL::I2CDevice > dev)
#define BATTMONITOR_SMBUS_SOLO_NUM_CELLS
#define AP_BATTMONITOR_SMBUS_I2C_ADDR
uint8_t read_block(uint8_t reg, uint8_t *data, uint8_t max_len, bool append_zero) const
#define BATTMONITOR_SMBUS_SOLO_CELL_VOLTAGE
uint16_t cells[MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN]
uint8_t get_PEC(const uint8_t i2c_addr, uint8_t cmd, bool reading, const uint8_t buff[], uint8_t len) const
get_PEC - calculate packet error correction code of buffer
uint32_t last_time_micros
static AP_HAL::OwnPtr< AP_HAL::Device > dev
AP_HAL::OwnPtr< AP_HAL::I2CDevice > _dev
bool read_full_charge_capacity(void)
Common definitions and utility routines for the ArduPilot libraries.
uint8_t _button_press_count
static struct notify_flags_and_values_type flags
#define AP_BATTMONITOR_SMBUS_TIMEOUT_MICROS
void timer(void) override
AP_BattMonitor::BattMonitor_State & _state
#define BATTMONITOR_SMBUS_SOLO_CURRENT
bool read_registers(uint8_t first_reg, uint8_t *recv, uint32_t recv_len)
bool read_remaining_capacity(void)
bool read_serial_number(void)