From 57a606000550440cfa4d160fe61ccfb2f0fff0e0 Mon Sep 17 00:00:00 2001 From: jflyper Date: Fri, 5 Oct 2018 02:22:51 +0900 Subject: [PATCH] Prevent sdcard_getMetadata from being called when card is not inserted or not ready --- src/main/drivers/sdcard.c | 3 ++- src/main/interface/cli.c | 2 +- src/main/interface/msp.c | 9 +++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/drivers/sdcard.c b/src/main/drivers/sdcard.c index fb7fe020a6..d27fb4cfe5 100644 --- a/src/main/drivers/sdcard.c +++ b/src/main/drivers/sdcard.c @@ -150,7 +150,8 @@ bool sdcard_poll(void) bool sdcard_isFunctional(void) { - // sdcard_isFunctional is called from multiple places + // sdcard_isFunctional is called from multiple places, including the case of hardware implementation + // without a detect pin in which case sdcard_isInserted() always returns true. if (sdcardVTable) { return sdcardVTable->sdcard_isFunctional(); } else { diff --git a/src/main/interface/cli.c b/src/main/interface/cli.c index 358ee17b64..1cef08dfbe 100644 --- a/src/main/interface/cli.c +++ b/src/main/interface/cli.c @@ -1999,7 +1999,7 @@ static void cliSdInfo(char *cmdline) return; } - if (!sdcard_isInitialized()) { + if (!sdcard_isFunctional() || !sdcard_isInitialized()) { cliPrintLine("Startup failed"); return; } diff --git a/src/main/interface/msp.c b/src/main/interface/msp.c index b1227b0fb5..8407de303a 100644 --- a/src/main/interface/msp.c +++ b/src/main/interface/msp.c @@ -304,8 +304,13 @@ static void serializeSDCardSummaryReply(sbuf_t *dst) sbufWriteU8(dst, state); sbufWriteU8(dst, afatfs_getLastError()); // Write free space and total space in kilobytes - sbufWriteU32(dst, afatfs_getContiguousFreeSpace() / 1024); - sbufWriteU32(dst, sdcard_getMetadata()->numBlocks / 2); // Block size is half a kilobyte + if (state == MSP_SDCARD_STATE_READY) { + sbufWriteU32(dst, afatfs_getContiguousFreeSpace() / 1024); + sbufWriteU32(dst, sdcard_getMetadata()->numBlocks / 2); // Block size is half a kilobyte + } else { + sbufWriteU32(dst, 0); + sbufWriteU32(dst, 0); + } #else sbufWriteU8(dst, 0); sbufWriteU8(dst, 0);