Browse Source

GCS_MAVLink: Only send a single battery status per call

zr-v5.1
Michael du Breuil 5 years ago committed by Andrew Tridgell
parent
commit
7fae084793
  1. 4
      libraries/GCS_MAVLink/GCS.h
  2. 13
      libraries/GCS_MAVLink/GCS_Common.cpp

4
libraries/GCS_MAVLink/GCS.h

@ -222,7 +222,7 @@ public: @@ -222,7 +222,7 @@ public:
void send_fence_status() const;
void send_power_status(void);
void send_battery_status(const uint8_t instance) const;
bool send_battery_status() const;
bool send_battery_status();
void send_distance_sensor() const;
// send_rangefinder sends only if a downward-facing instance is
// found. Rover overrides this!
@ -844,6 +844,8 @@ private: @@ -844,6 +844,8 @@ private:
uint32_t last_mavlink_stats_logged;
uint8_t last_battery_status_idx;
// true if we should NOT do MAVLink on this port (usually because
// someone's doing SERIAL_CONTROL over mavlink)
bool _locked;

13
libraries/GCS_MAVLink/GCS_Common.cpp

@ -246,14 +246,19 @@ void GCS_MAVLINK::send_battery_status(const uint8_t instance) const @@ -246,14 +246,19 @@ void GCS_MAVLINK::send_battery_status(const uint8_t instance) const
}
// returns true if all battery instances were reported
bool GCS_MAVLINK::send_battery_status() const
bool GCS_MAVLINK::send_battery_status()
{
const AP_BattMonitor &battery = AP::battery();
for(uint8_t i = 0; i < battery.num_instances(); i++) {
if (battery.get_type(i) != AP_BattMonitor_Params::BattMonitor_Type::BattMonitor_TYPE_NONE) {
for(uint8_t i = 0; i < AP_BATT_MONITOR_MAX_INSTANCES; i++) {
const uint8_t battery_id = (last_battery_status_idx + 1) % AP_BATT_MONITOR_MAX_INSTANCES;
if (battery.get_type(battery_id) != AP_BattMonitor_Params::BattMonitor_Type::BattMonitor_TYPE_NONE) {
CHECK_PAYLOAD_SIZE(BATTERY_STATUS);
send_battery_status(i);
send_battery_status(battery_id);
last_battery_status_idx = battery_id;
return true;
} else {
last_battery_status_idx = battery_id;
}
}
return true;

Loading…
Cancel
Save