msg/mavlink: report up to 12 motors

This makes it consistent with the 12 motor output functions.
This commit is contained in:
Julian Oes
2026-02-03 05:31:16 +13:00
parent 130ec776b2
commit 81a8a88db7
3 changed files with 33 additions and 23 deletions
+16 -12
View File
@@ -1,5 +1,5 @@
uint64 timestamp # time since system start (microseconds)
uint8 CONNECTED_ESC_MAX = 8 # The number of ESCs supported. Current (Q2/2013) we support 8 ESCs
uint8 CONNECTED_ESC_MAX = 12 # The number of ESCs supported (Motor1-Motor12)
uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC
uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC
@@ -13,16 +13,20 @@ uint16 counter # incremented by the writing thread everyt
uint8 esc_count # number of connected ESCs
uint8 esc_connectiontype # how ESCs connected to the system
uint8 esc_online_flags # Bitmask indicating which ESC is online/offline
# esc_online_flags bit 0 : Set to 1 if ESC0 is online
# esc_online_flags bit 1 : Set to 1 if ESC1 is online
# esc_online_flags bit 2 : Set to 1 if ESC2 is online
# esc_online_flags bit 3 : Set to 1 if ESC3 is online
# esc_online_flags bit 4 : Set to 1 if ESC4 is online
# esc_online_flags bit 5 : Set to 1 if ESC5 is online
# esc_online_flags bit 6 : Set to 1 if ESC6 is online
# esc_online_flags bit 7 : Set to 1 if ESC7 is online
uint16 esc_online_flags # Bitmask indicating which ESC is online/offline (in motor order)
# esc_online_flags bit 0 : Set to 1 if Motor1 is online
# esc_online_flags bit 1 : Set to 1 if Motor2 is online
# esc_online_flags bit 2 : Set to 1 if Motor3 is online
# esc_online_flags bit 3 : Set to 1 if Motor4 is online
# esc_online_flags bit 4 : Set to 1 if Motor5 is online
# esc_online_flags bit 5 : Set to 1 if Motor6 is online
# esc_online_flags bit 6 : Set to 1 if Motor7 is online
# esc_online_flags bit 7 : Set to 1 if Motor8 is online
# esc_online_flags bit 8 : Set to 1 if Motor9 is online
# esc_online_flags bit 9 : Set to 1 if Motor10 is online
# esc_online_flags bit 10: Set to 1 if Motor11 is online
# esc_online_flags bit 11: Set to 1 if Motor12 is online
uint8 esc_armed_flags # Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set.
uint16 esc_armed_flags # Bitmask indicating which ESC is armed (in motor order)
EscReport[8] esc
EscReport[12] esc
+10 -7
View File
@@ -70,7 +70,7 @@ private:
uint16_t counter;
uint8_t esc_count;
uint8_t esc_connectiontype;
uint8_t esc_online_flags;
uint16_t esc_online_flags;
};
struct EscInfo {
@@ -98,7 +98,7 @@ private:
_interface[i].esc_connectiontype = esc.esc_connectiontype;
// Capture online_flags, we will map from index to motor number
uint8_t online_flags = esc.esc_online_flags;
uint16_t online_flags = esc.esc_online_flags;
_interface[i].esc_online_flags = 0;
for (int j = 0; j < esc_status_s::CONNECTED_ESC_MAX; j++) {
@@ -108,11 +108,14 @@ private:
if (is_motor) {
// Map OutputFunction number to index
int index = (int)esc.esc[j].actuator_function - esc_report_s::ACTUATOR_FUNCTION_MOTOR1;
_escs[index].online = online_flags & (1 << j);
_escs[index].failure_flags = esc.esc[j].failures;
_escs[index].error_count = esc.esc[j].esc_errorcount;
_escs[index].timestamp = esc.esc[j].timestamp;
_escs[index].temperature = esc.esc[j].esc_temperature * 100.f;
if (index >= 0 && index < MAX_ESC_OUTPUTS) {
_escs[index].online = online_flags & (1 << j);
_escs[index].failure_flags = esc.esc[j].failures;
_escs[index].error_count = esc.esc[j].esc_errorcount;
_escs[index].timestamp = esc.esc[j].timestamp;
_escs[index].temperature = esc.esc[j].esc_temperature * 100.f;
}
}
}
}
+7 -4
View File
@@ -90,10 +90,13 @@ private:
if (is_motor) {
// Map OutputFunction number to index
int index = (int)esc.esc[j].actuator_function - esc_report_s::ACTUATOR_FUNCTION_MOTOR1;
_escs[index].timestamp = esc.esc[j].timestamp;
_escs[index].rpm = esc.esc[j].esc_rpm;
_escs[index].voltage = esc.esc[j].esc_voltage;
_escs[index].current = esc.esc[j].esc_current;
if (index >= 0 && index < MAX_ESC_OUTPUTS) {
_escs[index].timestamp = esc.esc[j].timestamp;
_escs[index].rpm = esc.esc[j].esc_rpm;
_escs[index].voltage = esc.esc[j].esc_voltage;
_escs[index].current = esc.esc[j].esc_current;
}
}
}
}