From 03ea646e504079dc3eb35f5438691f91ff43332d Mon Sep 17 00:00:00 2001 From: Randy Mackay Date: Wed, 24 Jun 2020 08:22:01 +0900 Subject: [PATCH] GCS_MAVLink: send_battery_status uses memcpy for cell voltages Co-authored-by: WickedShell --- libraries/GCS_MAVLink/GCS_Common.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/libraries/GCS_MAVLink/GCS_Common.cpp b/libraries/GCS_MAVLink/GCS_Common.cpp index 54f5283011..bfe1fc4743 100644 --- a/libraries/GCS_MAVLink/GCS_Common.cpp +++ b/libraries/GCS_MAVLink/GCS_Common.cpp @@ -203,13 +203,12 @@ void GCS_MAVLINK::send_battery_status(const uint8_t instance) const uint16_t cell_volts[MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN]; if (battery.has_cell_voltages(instance)) { const AP_BattMonitor::cells& batt_cells = battery.get_cell_voltages(instance); - for (uint8_t i = 0; i < ARRAY_SIZE(batt_cells.cells); i++) { - if (i < MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN) { - cell_volts[i] = batt_cells.cells[i]; - } else { - // 10th cell reports the lowest voltage of the last 3 cells - cell_volts[MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN-1] = MIN(cell_volts[MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN-1], batt_cells.cells[i]); - } + // copy the first 10 cells + memcpy(cell_volts, batt_cells.cells, sizeof(cell_volts)); + // 10th cell reports the lowest voltage of the last 3 cells + for (uint8_t i = MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN; i < ARRAY_SIZE(batt_cells.cells); i++) { + cell_volts[MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN-1] = MIN(cell_volts[MAVLINK_MSG_BATTERY_STATUS_FIELD_VOLTAGES_LEN-1], + batt_cells.cells[i]); } } else { // for battery monitors that cannot provide voltages for individual cells the battery's total voltage is put into the first cell