From e71e93ae02f100c655c1a79a63a2e052e8ac8844 Mon Sep 17 00:00:00 2001 From: Bryce Johnson Date: Tue, 7 Feb 2017 21:22:09 -0600 Subject: [PATCH] Blackbox erase additions --- src/main/blackbox/blackbox.c | 20 +++++++++++++------- src/main/fc/fc_msp.c | 4 +++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/blackbox/blackbox.c b/src/main/blackbox/blackbox.c index eb9aee930d..5e1aea60a9 100644 --- a/src/main/blackbox/blackbox.c +++ b/src/main/blackbox/blackbox.c @@ -254,6 +254,7 @@ typedef enum BlackboxState { BLACKBOX_STATE_SHUTTING_DOWN, //11 BLACKBOX_STATE_START_ERASE, //12 BLACKBOX_STATE_ERASING, //13 + BLACKBOX_STATE_ERASED //14 } BlackboxState; @@ -1466,17 +1467,15 @@ static void blackboxLogIteration(timeUs_t currentTimeUs) void handleBlackbox(timeUs_t currentTimeUs) { int i; - static bool erasedOnce = false; //Only allow one erase per FC reboot. - + switch (blackboxState) { case BLACKBOX_STATE_STOPPED: if (ARMING_FLAG(ARMED)) { blackboxOpen(); startBlackbox(); } - if (IS_RC_MODE_ACTIVE(BOXBLACKBOXERASE) && !erasedOnce) { + if (IS_RC_MODE_ACTIVE(BOXBLACKBOXERASE)) { blackboxSetState(BLACKBOX_STATE_START_ERASE); - erasedOnce = true; } break; case BLACKBOX_STATE_PREPARE_LOG_FILE: @@ -1610,17 +1609,24 @@ void handleBlackbox(timeUs_t currentTimeUs) case BLACKBOX_STATE_ERASING: if (isBlackboxErased()) { //Done eraseing - blackboxSetState(BLACKBOX_STATE_STOPPED); + blackboxSetState(BLACKBOX_STATE_ERASED); beeper(BEEPER_BLACKBOX_ERASE); } - + break; + case BLACKBOX_STATE_ERASED: + if (!IS_RC_MODE_ACTIVE(BOXBLACKBOXERASE)) { + blackboxSetState(BLACKBOX_STATE_STOPPED); + } + break; default: break; } // Did we run out of room on the device? Stop! if (isBlackboxDeviceFull()) { - if (blackboxState != BLACKBOX_STATE_ERASING && blackboxState != BLACKBOX_STATE_START_ERASE) { + if (blackboxState != BLACKBOX_STATE_ERASING + && blackboxState != BLACKBOX_STATE_START_ERASE + && blackboxState != BLACKBOX_STATE_ERASED) { blackboxSetState(BLACKBOX_STATE_STOPPED); // ensure we reset the test mode flag if we stop due to full memory card if (startedLoggingInTestMode) startedLoggingInTestMode = false; diff --git a/src/main/fc/fc_msp.c b/src/main/fc/fc_msp.c index d882b9eb5d..3195d456fb 100755 --- a/src/main/fc/fc_msp.c +++ b/src/main/fc/fc_msp.c @@ -151,7 +151,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT + 1] = { { BOXAIRMODE, "AIR MODE;", 28 }, { BOX3DDISABLESWITCH, "DISABLE 3D SWITCH;", 29}, { BOXFPVANGLEMIX, "FPV ANGLE MIX;", 30}, - { BOXBLACKBOXERASE, "BLACKBOX ERASE;", 31 }, + { BOXBLACKBOXERASE, "BLACKBOX ERASE (>30s);", 31 }, { CHECKBOX_ITEM_COUNT, NULL, 0xFF } }; @@ -380,7 +380,9 @@ void initActiveBoxIds(void) #ifdef BLACKBOX if (feature(FEATURE_BLACKBOX)) { activeBoxIds[activeBoxIdCount++] = BOXBLACKBOX; +#ifdef USE_FLASHFS activeBoxIds[activeBoxIdCount++] = BOXBLACKBOXERASE; +#endif } #endif