Skip to content

Commit 85dda5b

Browse files
stronnagJulianTiller
authored andcommitted
only BBL log servos defined in the mixer (iNavFlight#10267)
* only BBL log servos defined in the mixer * address gcc13/gcc14/arm/intel GCC type mismatch
1 parent 4f5e74d commit 85dda5b

File tree

2 files changed

+62
-21
lines changed

2 files changed

+62
-21
lines changed

src/main/blackbox/blackbox.c

+43-21
Original file line numberDiff line numberDiff line change
@@ -334,24 +334,24 @@ static const blackboxDeltaFieldDefinition_t blackboxMainFields[] = {
334334
{"motor", 7, UNSIGNED, .Ipredict = PREDICT(MOTOR_0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_MOTORS_8)},
335335

336336
/* servos */
337-
{"servo", 0, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
338-
{"servo", 1, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
339-
{"servo", 2, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
340-
{"servo", 3, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
341-
{"servo", 4, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
342-
{"servo", 5, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
343-
{"servo", 6, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
344-
{"servo", 7, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
345-
{"servo", 8, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
346-
{"servo", 9, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
347-
{"servo", 10, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
348-
{"servo", 11, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
349-
{"servo", 12, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
350-
{"servo", 13, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
351-
{"servo", 14, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
352-
{"servo", 15, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
353-
{"servo", 16, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
354-
{"servo", 17, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(SERVOS)},
337+
{"servo", 0, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_1)},
338+
{"servo", 1, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_2)},
339+
{"servo", 2, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_3)},
340+
{"servo", 3, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_4)},
341+
{"servo", 4, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_5)},
342+
{"servo", 5, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_6)},
343+
{"servo", 6, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_7)},
344+
{"servo", 7, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_8)},
345+
{"servo", 8, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_9)},
346+
{"servo", 9, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_10)},
347+
{"servo", 10, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_11)},
348+
{"servo", 11, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_12)},
349+
{"servo", 12, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_13)},
350+
{"servo", 13, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_14)},
351+
{"servo", 14, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_15)},
352+
{"servo", 15, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_16)},
353+
{"servo", 16, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_17)},
354+
{"servo", 17, UNSIGNED, .Ipredict = PREDICT(1500), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), CONDITION(AT_LEAST_SERVOS_18)},
355355

356356
{"navState", -1, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(SIGNED_VB), CONDITION(ALWAYS)},
357357
{"navFlags", -1, UNSIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(SIGNED_VB), CONDITION(ALWAYS)},
@@ -656,6 +656,26 @@ static bool testBlackboxConditionUncached(FlightLogFieldCondition condition)
656656
case FLIGHT_LOG_FIELD_CONDITION_SERVOS:
657657
return isMixerUsingServos();
658658

659+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_1:
660+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_2:
661+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_3:
662+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_4:
663+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_5:
664+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_6:
665+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_7:
666+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_8:
667+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_9:
668+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_10:
669+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_11:
670+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_12:
671+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_13:
672+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_14:
673+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_15:
674+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_16:
675+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_17:
676+
case FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_18:
677+
return ((FlightLogFieldCondition)getServoCount() >= condition - FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_1 + 1);
678+
659679
case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0:
660680
case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_1:
661681
case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_2:
@@ -955,7 +975,8 @@ static void writeIntraframe(void)
955975
}
956976

957977
if (testBlackboxCondition(FLIGHT_LOG_FIELD_CONDITION_SERVOS)) {
958-
for (int x = 0; x < MAX_SUPPORTED_SERVOS; x++) {
978+
const int servoCount = getServoCount();
979+
for (int x = 0; x < servoCount; x++) {
959980
//Assume that servos spends most of its time around the center
960981
blackboxWriteSignedVB(blackboxCurrent->servo[x] - 1500);
961982
}
@@ -1214,7 +1235,7 @@ static void writeInterframe(void)
12141235
}
12151236

12161237
if (testBlackboxCondition(FLIGHT_LOG_FIELD_CONDITION_SERVOS)) {
1217-
blackboxWriteArrayUsingAveragePredictor16(offsetof(blackboxMainState_t, servo), MAX_SUPPORTED_SERVOS);
1238+
blackboxWriteArrayUsingAveragePredictor16(offsetof(blackboxMainState_t, servo), getServoCount());
12181239
}
12191240

12201241
blackboxWriteSignedVB(blackboxCurrent->navState - blackboxLast->navState);
@@ -1682,7 +1703,8 @@ static void loadMainState(timeUs_t currentTimeUs)
16821703

16831704
blackboxCurrent->rssi = getRSSI();
16841705

1685-
for (int i = 0; i < MAX_SUPPORTED_SERVOS; i++) {
1706+
const int servoCount = getServoCount();
1707+
for (int i = 0; i < servoCount; i++) {
16861708
blackboxCurrent->servo[i] = servo[i];
16871709
}
16881710

src/main/blackbox/blackbox_fielddefs.h

+19
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,26 @@ typedef enum FlightLogFieldCondition {
3333
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_MOTORS_6,
3434
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_MOTORS_7,
3535
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_MOTORS_8,
36+
3637
FLIGHT_LOG_FIELD_CONDITION_SERVOS,
38+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_1,
39+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_2,
40+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_3,
41+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_4,
42+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_5,
43+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_6,
44+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_7,
45+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_8,
46+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_9,
47+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_10,
48+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_11,
49+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_12,
50+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_13,
51+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_14,
52+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_15,
53+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_16,
54+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_17,
55+
FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_SERVOS_18,
3756

3857
FLIGHT_LOG_FIELD_CONDITION_MAG,
3958
FLIGHT_LOG_FIELD_CONDITION_BARO,

0 commit comments

Comments
 (0)