Minor blackbox code tidy
This commit is contained in:
parent
b8a8f6d2d8
commit
50ac13d79b
|
@ -449,6 +449,7 @@ static bool testBlackboxConditionUncached(FlightLogFieldCondition condition)
|
||||||
|
|
||||||
case FLIGHT_LOG_FIELD_CONDITION_NEVER:
|
case FLIGHT_LOG_FIELD_CONDITION_NEVER:
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -456,11 +457,8 @@ static bool testBlackboxConditionUncached(FlightLogFieldCondition condition)
|
||||||
|
|
||||||
static void blackboxBuildConditionCache(void)
|
static void blackboxBuildConditionCache(void)
|
||||||
{
|
{
|
||||||
FlightLogFieldCondition cond;
|
|
||||||
|
|
||||||
blackboxConditionCache = 0;
|
blackboxConditionCache = 0;
|
||||||
|
for (FlightLogFieldCondition cond = FLIGHT_LOG_FIELD_CONDITION_FIRST; cond <= FLIGHT_LOG_FIELD_CONDITION_LAST; cond++) {
|
||||||
for (cond = FLIGHT_LOG_FIELD_CONDITION_FIRST; cond <= FLIGHT_LOG_FIELD_CONDITION_LAST; cond++) {
|
|
||||||
if (testBlackboxConditionUncached(cond)) {
|
if (testBlackboxConditionUncached(cond)) {
|
||||||
blackboxConditionCache |= 1 << cond;
|
blackboxConditionCache |= 1 << cond;
|
||||||
}
|
}
|
||||||
|
@ -765,10 +763,10 @@ static void loadSlowState(blackboxSlowState_t *slow)
|
||||||
* If allowPeriodicWrite is true, the frame is also logged if it has been more than SLOW_FRAME_INTERVAL logging iterations
|
* If allowPeriodicWrite is true, the frame is also logged if it has been more than SLOW_FRAME_INTERVAL logging iterations
|
||||||
* since the field was last logged.
|
* since the field was last logged.
|
||||||
*/
|
*/
|
||||||
static void writeSlowFrameIfNeeded(bool allowPeriodicWrite)
|
static void writeSlowFrameIfNeeded(void)
|
||||||
{
|
{
|
||||||
// Write the slow frame peridocially so it can be recovered if we ever lose sync
|
// Write the slow frame peridocially so it can be recovered if we ever lose sync
|
||||||
bool shouldWrite = allowPeriodicWrite && blackboxSlowFrameIterationTimer >= SLOW_FRAME_INTERVAL;
|
bool shouldWrite = blackboxSlowFrameIterationTimer >= SLOW_FRAME_INTERVAL;
|
||||||
|
|
||||||
if (shouldWrite) {
|
if (shouldWrite) {
|
||||||
loadSlowState(&slowHistory);
|
loadSlowState(&slowHistory);
|
||||||
|
@ -790,15 +788,6 @@ static void writeSlowFrameIfNeeded(bool allowPeriodicWrite)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gcd(int num, int denom)
|
|
||||||
{
|
|
||||||
if (denom == 0) {
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
return gcd(denom, num % denom);
|
|
||||||
}
|
|
||||||
|
|
||||||
void blackboxValidateConfig(void)
|
void blackboxValidateConfig(void)
|
||||||
{
|
{
|
||||||
if (blackboxConfig()->rate_num == 0 || blackboxConfig()->rate_denom == 0
|
if (blackboxConfig()->rate_num == 0 || blackboxConfig()->rate_denom == 0
|
||||||
|
@ -1011,50 +1000,36 @@ static void writeGPSFrame(timeUs_t currentTimeUs)
|
||||||
static void loadMainState(timeUs_t currentTimeUs)
|
static void loadMainState(timeUs_t currentTimeUs)
|
||||||
{
|
{
|
||||||
blackboxMainState_t *blackboxCurrent = blackboxHistory[0];
|
blackboxMainState_t *blackboxCurrent = blackboxHistory[0];
|
||||||
int i;
|
|
||||||
|
|
||||||
blackboxCurrent->time = currentTimeUs;
|
blackboxCurrent->time = currentTimeUs;
|
||||||
|
|
||||||
for (i = 0; i < XYZ_AXIS_COUNT; i++) {
|
for (int i = 0; i < XYZ_AXIS_COUNT; i++) {
|
||||||
blackboxCurrent->axisPID_P[i] = axisPID_P[i];
|
blackboxCurrent->axisPID_P[i] = axisPID_P[i];
|
||||||
}
|
|
||||||
for (i = 0; i < XYZ_AXIS_COUNT; i++) {
|
|
||||||
blackboxCurrent->axisPID_I[i] = axisPID_I[i];
|
blackboxCurrent->axisPID_I[i] = axisPID_I[i];
|
||||||
}
|
|
||||||
for (i = 0; i < XYZ_AXIS_COUNT; i++) {
|
|
||||||
blackboxCurrent->axisPID_D[i] = axisPID_D[i];
|
blackboxCurrent->axisPID_D[i] = axisPID_D[i];
|
||||||
|
blackboxCurrent->gyroADC[i] = lrintf(gyro.gyroADCf[i]);
|
||||||
|
blackboxCurrent->accSmooth[i] = acc.accSmooth[i];
|
||||||
|
#ifdef MAG
|
||||||
|
blackboxCurrent->magADC[i] = mag.magADC[i];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
blackboxCurrent->rcCommand[i] = rcCommand[i];
|
blackboxCurrent->rcCommand[i] = rcCommand[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < XYZ_AXIS_COUNT; i++) {
|
for (int i = 0; i < DEBUG16_VALUE_COUNT; i++) {
|
||||||
blackboxCurrent->gyroADC[i] = lrintf(gyro.gyroADCf[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < XYZ_AXIS_COUNT; i++) {
|
|
||||||
blackboxCurrent->accSmooth[i] = acc.accSmooth[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
|
||||||
blackboxCurrent->debug[i] = debug[i];
|
blackboxCurrent->debug[i] = debug[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
const int motorCount = getMotorCount();
|
const int motorCount = getMotorCount();
|
||||||
for (i = 0; i < motorCount; i++) {
|
for (int i = 0; i < motorCount; i++) {
|
||||||
blackboxCurrent->motor[i] = motor[i];
|
blackboxCurrent->motor[i] = motor[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
blackboxCurrent->vbatLatest = getBatteryVoltageLatest();
|
blackboxCurrent->vbatLatest = getBatteryVoltageLatest();
|
||||||
blackboxCurrent->amperageLatest = getAmperageLatest();
|
blackboxCurrent->amperageLatest = getAmperageLatest();
|
||||||
|
|
||||||
#ifdef MAG
|
|
||||||
for (i = 0; i < XYZ_AXIS_COUNT; i++) {
|
|
||||||
blackboxCurrent->magADC[i] = mag.magADC[i];
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef BARO
|
#ifdef BARO
|
||||||
blackboxCurrent->BaroAlt = baro.BaroAlt;
|
blackboxCurrent->BaroAlt = baro.BaroAlt;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1425,6 +1400,22 @@ static bool blackboxShouldLogIFrame(void)
|
||||||
return blackboxPFrameIndex == 0;
|
return blackboxPFrameIndex == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the GPS home point has been updated, or every 128 I-frames (~10 seconds), write the
|
||||||
|
* GPS home position.
|
||||||
|
*
|
||||||
|
* We write it periodically so that if one Home Frame goes missing, the GPS coordinates can
|
||||||
|
* still be interpreted correctly.
|
||||||
|
*/
|
||||||
|
STATIC_UNIT_TESTED bool blackboxShouldLogGpsHomeFrame(void)
|
||||||
|
{
|
||||||
|
if (GPS_home[0] != gpsHistory.GPS_home[0] || GPS_home[1] != gpsHistory.GPS_home[1]
|
||||||
|
|| (blackboxPFrameIndex == BLACKBOX_I_INTERVAL / 2 && blackboxIFrameIndex % 128 == 0)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Called once every FC loop in order to keep track of how many FC loop iterations have passed
|
// Called once every FC loop in order to keep track of how many FC loop iterations have passed
|
||||||
static void blackboxAdvanceIterationTimers(void)
|
static void blackboxAdvanceIterationTimers(void)
|
||||||
{
|
{
|
||||||
|
@ -1447,7 +1438,9 @@ static void blackboxLogIteration(timeUs_t currentTimeUs)
|
||||||
* Don't log a slow frame if the slow data didn't change ("I" frames are already large enough without adding
|
* Don't log a slow frame if the slow data didn't change ("I" frames are already large enough without adding
|
||||||
* an additional item to write at the same time). Unless we're *only* logging "I" frames, then we have no choice.
|
* an additional item to write at the same time). Unless we're *only* logging "I" frames, then we have no choice.
|
||||||
*/
|
*/
|
||||||
writeSlowFrameIfNeeded(blackboxIsOnlyLoggingIntraframes());
|
if (blackboxIsOnlyLoggingIntraframes()) {
|
||||||
|
writeSlowFrameIfNeeded();
|
||||||
|
}
|
||||||
|
|
||||||
loadMainState(currentTimeUs);
|
loadMainState(currentTimeUs);
|
||||||
writeIntraframe();
|
writeIntraframe();
|
||||||
|
@ -1460,23 +1453,14 @@ static void blackboxLogIteration(timeUs_t currentTimeUs)
|
||||||
* We assume that slow frames are only interesting in that they aid the interpretation of the main data stream.
|
* We assume that slow frames are only interesting in that they aid the interpretation of the main data stream.
|
||||||
* So only log slow frames during loop iterations where we log a main frame.
|
* So only log slow frames during loop iterations where we log a main frame.
|
||||||
*/
|
*/
|
||||||
writeSlowFrameIfNeeded(true);
|
writeSlowFrameIfNeeded();
|
||||||
|
|
||||||
loadMainState(currentTimeUs);
|
loadMainState(currentTimeUs);
|
||||||
writeInterframe();
|
writeInterframe();
|
||||||
}
|
}
|
||||||
#ifdef GPS
|
#ifdef GPS
|
||||||
if (feature(FEATURE_GPS)) {
|
if (feature(FEATURE_GPS)) {
|
||||||
/*
|
if (blackboxShouldLogGpsHomeFrame()) {
|
||||||
* If the GPS home point has been updated, or every 128 intraframes (~10 seconds), write the
|
|
||||||
* GPS home position.
|
|
||||||
*
|
|
||||||
* We write it periodically so that if one Home Frame goes missing, the GPS coordinates can
|
|
||||||
* still be interpreted correctly.
|
|
||||||
*/
|
|
||||||
if (GPS_home[0] != gpsHistory.GPS_home[0] || GPS_home[1] != gpsHistory.GPS_home[1]
|
|
||||||
|| (blackboxPFrameIndex == BLACKBOX_I_INTERVAL / 2 && blackboxIFrameIndex % 128 == 0)) {
|
|
||||||
|
|
||||||
writeGPSHomeFrame();
|
writeGPSHomeFrame();
|
||||||
writeGPSFrame(currentTimeUs);
|
writeGPSFrame(currentTimeUs);
|
||||||
} else if (GPS_numSat != gpsHistory.GPS_numSat || GPS_coord[0] != gpsHistory.GPS_coord[0]
|
} else if (GPS_numSat != gpsHistory.GPS_numSat || GPS_coord[0] != gpsHistory.GPS_coord[0]
|
||||||
|
@ -1497,8 +1481,6 @@ static void blackboxLogIteration(timeUs_t currentTimeUs)
|
||||||
*/
|
*/
|
||||||
void blackboxUpdate(timeUs_t currentTimeUs)
|
void blackboxUpdate(timeUs_t currentTimeUs)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
switch (blackboxState) {
|
switch (blackboxState) {
|
||||||
case BLACKBOX_STATE_STOPPED:
|
case BLACKBOX_STATE_STOPPED:
|
||||||
if (ARMING_FLAG(ARMED)) {
|
if (ARMING_FLAG(ARMED)) {
|
||||||
|
@ -1526,7 +1508,7 @@ void blackboxUpdate(timeUs_t currentTimeUs)
|
||||||
*/
|
*/
|
||||||
if (millis() > xmitState.u.startTime + 100) {
|
if (millis() > xmitState.u.startTime + 100) {
|
||||||
if (blackboxDeviceReserveBufferSpace(BLACKBOX_TARGET_HEADER_BUDGET_PER_ITERATION) == BLACKBOX_RESERVE_SUCCESS) {
|
if (blackboxDeviceReserveBufferSpace(BLACKBOX_TARGET_HEADER_BUDGET_PER_ITERATION) == BLACKBOX_RESERVE_SUCCESS) {
|
||||||
for (i = 0; i < BLACKBOX_TARGET_HEADER_BUDGET_PER_ITERATION && blackboxHeader[xmitState.headerIndex] != '\0'; i++, xmitState.headerIndex++) {
|
for (int i = 0; i < BLACKBOX_TARGET_HEADER_BUDGET_PER_ITERATION && blackboxHeader[xmitState.headerIndex] != '\0'; i++, xmitState.headerIndex++) {
|
||||||
blackboxWrite(blackboxHeader[xmitState.headerIndex]);
|
blackboxWrite(blackboxHeader[xmitState.headerIndex]);
|
||||||
blackboxHeaderBudget--;
|
blackboxHeaderBudget--;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,15 @@ float acos_approx(float x)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int gcd(int num, int denom)
|
||||||
|
{
|
||||||
|
if (denom == 0) {
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
return gcd(denom, num % denom);
|
||||||
|
}
|
||||||
|
|
||||||
float powerf(float base, int exp) {
|
float powerf(float base, int exp) {
|
||||||
float result = base;
|
float result = base;
|
||||||
for (int count = 1; count < exp; count++) result *= base;
|
for (int count = 1; count < exp; count++) result *= base;
|
||||||
|
|
|
@ -76,6 +76,7 @@ typedef union {
|
||||||
fp_angles_def angles;
|
fp_angles_def angles;
|
||||||
} fp_angles_t;
|
} fp_angles_t;
|
||||||
|
|
||||||
|
int gcd(int num, int denom);
|
||||||
float powerf(float base, int exp);
|
float powerf(float base, int exp);
|
||||||
int32_t applyDeadband(int32_t value, int32_t deadband);
|
int32_t applyDeadband(int32_t value, int32_t deadband);
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ void failsafeInit(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
failsafePhase_e failsafePhase()
|
failsafePhase_e failsafePhase(void)
|
||||||
{
|
{
|
||||||
return failsafeState.phase;
|
return failsafeState.phase;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,15 +29,6 @@ extern "C" {
|
||||||
|
|
||||||
#include "drivers/serial.h"
|
#include "drivers/serial.h"
|
||||||
#include "io/serial.h"
|
#include "io/serial.h"
|
||||||
|
|
||||||
PG_REGISTER_WITH_RESET_TEMPLATE(blackboxConfig_t, blackboxConfig, PG_BLACKBOX_CONFIG, 0);
|
|
||||||
|
|
||||||
PG_RESET_TEMPLATE(blackboxConfig_t, blackboxConfig,
|
|
||||||
.device = DEFAULT_BLACKBOX_DEVICE,
|
|
||||||
.rate_num = 1,
|
|
||||||
.rate_denom = 1,
|
|
||||||
.on_motor_test = 0 // default off
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "unittest_macros.h"
|
#include "unittest_macros.h"
|
||||||
|
@ -115,7 +106,7 @@ void serialTestResetBuffers()
|
||||||
serialWritePos = 0;
|
serialWritePos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(BlackboxTest, Test1)
|
TEST(BlackboxEncodingTest, TestWriteUnsignedVB)
|
||||||
{
|
{
|
||||||
blackboxPort = &serialTestInstance;
|
blackboxPort = &serialTestInstance;
|
||||||
blackboxWriteUnsignedVB(0);
|
blackboxWriteUnsignedVB(0);
|
||||||
|
@ -127,6 +118,7 @@ TEST(BlackboxTest, Test1)
|
||||||
|
|
||||||
// STUBS
|
// STUBS
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
PG_REGISTER(blackboxConfig_t, blackboxConfig, PG_BLACKBOX_CONFIG, 0);
|
||||||
int32_t blackboxHeaderBudget;
|
int32_t blackboxHeaderBudget;
|
||||||
void mspSerialAllocatePorts(void) {}
|
void mspSerialAllocatePorts(void) {}
|
||||||
void blackboxWrite(uint8_t value) {serialWrite(blackboxPort, value);}
|
void blackboxWrite(uint8_t value) {serialWrite(blackboxPort, value);}
|
||||||
|
@ -140,5 +132,4 @@ int blackboxPrint(const char *s)
|
||||||
const int length = pos - (uint8_t*)s;
|
const int length = pos - (uint8_t*)s;
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue