From d15663c9f770af5e08ab3f23b90ea3f44c44649d Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Mon, 15 Jul 2024 19:31:06 +0800 Subject: [PATCH] Format sd card. --- .../MissionManager/src/DataProcessing.h | 1 + application/MissionManager/src/IdleState.cpp | 8 +++++++ application/MissionManager/src/IdleState.h | 1 + .../MissionManager/src/SdCardHandleState.cpp | 12 ++++++++++ .../MissionManager/src/SdCardHandleState.h | 1 + .../MissionManager/src/TestMissionState.cpp | 22 ++++++++++++++++++- .../MissionManager/src/TestMissionState.h | 5 +++++ hal/abstract/IHalCpp.cpp | 5 +++++ hal/include/IHalCpp.h | 1 + hal/src/SdCardHal.cpp | 12 ++++++++++ hal/src/SdCardHal.h | 1 + .../FilesManager/src/sqlite3/SqliteHandle.cpp | 19 +--------------- .../StorageManager/include/IStorageManager.h | 1 + .../StorageManager/src/IStorageManager.cpp | 5 +++++ .../StorageManager/src/SdCardHandle.cpp | 5 +++++ middleware/StorageManager/src/SdCardHandle.h | 1 + .../src_mock/DeviceManager_Mock_Test.cpp | 15 +++++++++++++ .../src_mock/HuntingCameraTest.cpp | 3 +++ 18 files changed, 99 insertions(+), 19 deletions(-) diff --git a/application/MissionManager/src/DataProcessing.h b/application/MissionManager/src/DataProcessing.h index 1b9ecb5..ef37b50 100644 --- a/application/MissionManager/src/DataProcessing.h +++ b/application/MissionManager/src/DataProcessing.h @@ -30,6 +30,7 @@ enum class InternalStateEvent MEDIA_REPORT_EVENT, KEY_EVENT_HANDLE, RESET_KEY_MEDIA_TASK, + FORMAT_KEY_FORMAT_SD_CARD, MEDIA_HANDLE_STATE_TASK_TIME_OUT, MEDIA_HANDLE_STATE_TASK_FINISHED, END diff --git a/application/MissionManager/src/IdleState.cpp b/application/MissionManager/src/IdleState.cpp index 74bd9ef..dcc5d04 100644 --- a/application/MissionManager/src/IdleState.cpp +++ b/application/MissionManager/src/IdleState.cpp @@ -24,6 +24,8 @@ IdleState::IdleState() : State("IdleState") // mEventHandle[InternalStateEvent::SD_CARD_HANDLE_STATE_SD_STATUS_REPORTED] = // std::bind(&IdleState::SdCardEventHandle, this, _1); mEventHandle[InternalStateEvent::RESET_KEY_MEDIA_TASK] = std::bind(&IdleState::ResetKeyMediaTaskHandle, this, _1); + mEventHandle[InternalStateEvent::FORMAT_KEY_FORMAT_SD_CARD] = + std::bind(&IdleState::FormatKeyFormattingSDCardHandle, this, _1); } void IdleState::GoInState() { @@ -38,6 +40,12 @@ bool IdleState::ExecuteStateMsg(VStateMachineData *msg) return DataProcessing::EventHandle(msg); } bool IdleState::ResetKeyMediaTaskHandle(VStateMachineData *msg) +{ + MissionStateMachine::GetInstance()->DelayMessage(msg); + MissionStateMachine::GetInstance()->SwitchState(SystemState::STORAGE_HANDLE_STATE); + return EXECUTED; +} +bool IdleState::FormatKeyFormattingSDCardHandle(VStateMachineData *msg) { MissionStateMachine::GetInstance()->DelayMessage(msg); MissionStateMachine::GetInstance()->SwitchState(SystemState::STORAGE_HANDLE_STATE); diff --git a/application/MissionManager/src/IdleState.h b/application/MissionManager/src/IdleState.h index 0f35b69..037534d 100644 --- a/application/MissionManager/src/IdleState.h +++ b/application/MissionManager/src/IdleState.h @@ -27,6 +27,7 @@ public: private: bool ResetKeyMediaTaskHandle(VStateMachineData *msg); + bool FormatKeyFormattingSDCardHandle(VStateMachineData *msg); private: }; diff --git a/application/MissionManager/src/SdCardHandleState.cpp b/application/MissionManager/src/SdCardHandleState.cpp index 2ef6b08..035cb22 100644 --- a/application/MissionManager/src/SdCardHandleState.cpp +++ b/application/MissionManager/src/SdCardHandleState.cpp @@ -32,6 +32,8 @@ SdCardHandleState::SdCardHandleState() : State("SdCardHandleState"), mSdCardStat std::bind(&SdCardHandleState::SdCardEventHandle, this, _1); mEventHandle[InternalStateEvent::RESET_KEY_MEDIA_TASK] = std::bind(&SdCardHandleState::ResetKeyMediaTaskHandle, this, _1); + mEventHandle[InternalStateEvent::FORMAT_KEY_FORMAT_SD_CARD] = + std::bind(&SdCardHandleState::FormatKeyFormattingSDCardHandle, this, _1); } void SdCardHandleState::GoInState() { @@ -109,4 +111,14 @@ bool SdCardHandleState::ResetKeyMediaTaskHandle(VStateMachineData *msg) } LogWarning("Sd card is not inserted, ignore reset key media task.\n"); return HANDLE_HELPESS; +} +bool SdCardHandleState::FormatKeyFormattingSDCardHandle(VStateMachineData *msg) +{ + if (StorageEvent::SD_CARD_INSERT == mSdCardStatus) { + LogInfo("FormatKeyFormattingSDCardHandle.\n"); + IStorageManager::GetInstance()->FormatSDCardNow(); + return EXECUTED; + } + LogWarning("Sd card is not inserted, ignore format key.\n"); + return EXECUTED; } \ No newline at end of file diff --git a/application/MissionManager/src/SdCardHandleState.h b/application/MissionManager/src/SdCardHandleState.h index 9b350b9..0c9cfa5 100644 --- a/application/MissionManager/src/SdCardHandleState.h +++ b/application/MissionManager/src/SdCardHandleState.h @@ -38,6 +38,7 @@ protected: bool MediaReportHandle(VStateMachineData *msg); bool SdCardEventHandle(VStateMachineData *msg); bool ResetKeyMediaTaskHandle(VStateMachineData *msg); + bool FormatKeyFormattingSDCardHandle(VStateMachineData *msg); private: StorageEvent mSdCardStatus; diff --git a/application/MissionManager/src/TestMissionState.cpp b/application/MissionManager/src/TestMissionState.cpp index ec17f71..d498b6a 100644 --- a/application/MissionManager/src/TestMissionState.cpp +++ b/application/MissionManager/src/TestMissionState.cpp @@ -24,13 +24,15 @@ #include "MissionStateMachine.h" #include #include -TestMissionState::TestMissionState() : MissionState("TestMissionState") +TestMissionState::TestMissionState() : MissionState("TestMissionState"), mFormattingSDCard(false) { mEventHandle[InternalStateEvent::ANY_STATE_SD_STATUS_PERORIED] = std::bind(&TestMissionState::SdCardEventReportSendToApp, this, _1); mEventHandle[InternalStateEvent::RESET_KEY_MEDIA_TASK] = std::bind(&TestMissionState::ResetKeyMediaTaskHandle, this, _1); mKeyClickHandle["reset"] = std::bind(&TestMissionState::ClickResetKey, this, _1); + mKeyHoldDownHandle["format"] = std::bind(&TestMissionState::HoldDownFormatKey, this, _1); + mKeyHoldUpHandle["format"] = std::bind(&TestMissionState::HoldUpFormatKey, this, _1); } void TestMissionState::GoInState() { @@ -75,6 +77,24 @@ bool TestMissionState::ClickResetKey(const KeyEventData &data) MissionStateMachine::GetInstance()->SendStateMessage(message); return EXECUTED; } +bool TestMissionState::HoldDownFormatKey(const KeyEventData &data) +{ + constexpr int FORMAT_SD_CARD_PRESSING_TIME_MS = 1000 * 15; + if (FORMAT_SD_CARD_PRESSING_TIME_MS <= data.mHoldTime && false == mFormattingSDCard) { + LogInfo("format key down.\n"); + mFormattingSDCard = true; + std::shared_ptr message = + std::make_shared(static_cast(InternalStateEvent::FORMAT_KEY_FORMAT_SD_CARD)); + MissionStateMachine::GetInstance()->SendStateMessage(message); + return EXECUTED; + } + return NOT_EXECUTED; +} +bool TestMissionState::HoldUpFormatKey(const KeyEventData &data) +{ + mFormattingSDCard = false; + return EXECUTED; +} SdCardStatus TestMissionState::SdCardStatusConvert(const StorageEvent &event) { switch (event) { diff --git a/application/MissionManager/src/TestMissionState.h b/application/MissionManager/src/TestMissionState.h index 52aa089..6da17fa 100644 --- a/application/MissionManager/src/TestMissionState.h +++ b/application/MissionManager/src/TestMissionState.h @@ -30,8 +30,13 @@ private: bool SdCardEventReportSendToApp(VStateMachineData *msg); bool ResetKeyMediaTaskHandle(VStateMachineData *msg); bool ClickResetKey(const KeyEventData &data); + bool HoldDownFormatKey(const KeyEventData &data); + bool HoldUpFormatKey(const KeyEventData &data); private: SdCardStatus SdCardStatusConvert(const StorageEvent &event); + +private: + bool mFormattingSDCard; }; #endif \ No newline at end of file diff --git a/hal/abstract/IHalCpp.cpp b/hal/abstract/IHalCpp.cpp index 7395da0..9c77f1d 100644 --- a/hal/abstract/IHalCpp.cpp +++ b/hal/abstract/IHalCpp.cpp @@ -133,6 +133,11 @@ StatusCode VSdCardHal::GetCapacity(unsigned long long &totalSizeMB, unsigned lon LogWarning("STATUS_CODE_VIRTUAL_FUNCTION.\n"); return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); } +StatusCode VSdCardHal::FormatSDCard(void) +{ + LogWarning("STATUS_CODE_VIRTUAL_FUNCTION.\n"); + return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); +} StatusCode IHalCpp::Init(void) { LogWarning("STATUS_CODE_VIRTUAL_FUNCTION.\n"); diff --git a/hal/include/IHalCpp.h b/hal/include/IHalCpp.h index 06a45ad..dcb23d8 100644 --- a/hal/include/IHalCpp.h +++ b/hal/include/IHalCpp.h @@ -151,6 +151,7 @@ public: virtual SdCardHalStatus GetSdCardStatus(void); virtual StatusCode GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB, unsigned long long &usedSizeMB); + virtual StatusCode FormatSDCard(void); }; class IHalCpp { diff --git a/hal/src/SdCardHal.cpp b/hal/src/SdCardHal.cpp index 5b1237f..c2ef9ca 100644 --- a/hal/src/SdCardHal.cpp +++ b/hal/src/SdCardHal.cpp @@ -65,6 +65,18 @@ StatusCode SdCardHal::GetCapacity(unsigned long long &totalSizeMB, unsigned long LogInfo("Used size: %llu MB\n", usedSizeMB); return CreateStatusCode(STATUS_CODE_OK); } +StatusCode SdCardHal::FormatSDCard(void) +{ + char command[128] = {0}; + sprintf(command, "mkfs.ext4 -F %s", SD_CARD_DEVICE); + int ret = fx_system(command); + if (ret != 0) { + LogError("Format sd card failed [%s].\n", SD_CARD_DEVICE); + return CreateStatusCode(STATUS_CODE_NOT_OK); + } + LogInfo("Format sd card success.\n"); + return CreateStatusCode(STATUS_CODE_OK); +} void SdCardHal::Init(void) { auto detectThread = [](std::shared_ptr sdCardHal) { diff --git a/hal/src/SdCardHal.h b/hal/src/SdCardHal.h index 6050c67..ed81230 100644 --- a/hal/src/SdCardHal.h +++ b/hal/src/SdCardHal.h @@ -25,6 +25,7 @@ public: SdCardHalStatus GetSdCardStatus(void) override; StatusCode GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB, unsigned long long &usedSizeMB) override; + StatusCode FormatSDCard(void) override; void Init(void); void UnInit(void); void DevDetectingThread(void); diff --git a/middleware/FilesManager/src/sqlite3/SqliteHandle.cpp b/middleware/FilesManager/src/sqlite3/SqliteHandle.cpp index 05012c7..1f21da3 100644 --- a/middleware/FilesManager/src/sqlite3/SqliteHandle.cpp +++ b/middleware/FilesManager/src/sqlite3/SqliteHandle.cpp @@ -157,24 +157,7 @@ bool SqliteHandle::SyncFile(const SyncFileInfo &info) sqlite3_free(errMsg); return false; } - // if (UpdateCreateTime(mDb, info.mSerialNumber, info.mCreateTime_s) == false) { - // return false; - // } - // if (UpdateFileName(mDb, info.mSerialNumber, info.mFileName) == false) { - // return false; - // } - // if (UpdateFileSize(mDb, info.mSerialNumber, info.mFileSize) == false) { - // return false; - // } - // if (UpdateFileStatus(mDb, info.mSerialNumber, info.mStatus) == false) { - // return false; - // } - // if (UpdateFileType(mDb, info.mSerialNumber, info.mType) == false) { - // return false; - // } - // if (UpdateFileDuration(mDb, info.mSerialNumber, info.mFileDuration) == false) { - // return false; - // } + LogInfo("Sync file success.\n"); return true; } bool SqliteHandle::SearchFiles(const std::vector &types, std::vector &info) diff --git a/middleware/StorageManager/include/IStorageManager.h b/middleware/StorageManager/include/IStorageManager.h index 69a3918..4ba3f77 100644 --- a/middleware/StorageManager/include/IStorageManager.h +++ b/middleware/StorageManager/include/IStorageManager.h @@ -56,5 +56,6 @@ public: virtual StatusCode GetSdCardInfo(SdCardInfo &info); virtual std::string GetFilesDatabasePath(void); virtual std::string GetFilesSavingPath(void); + virtual StatusCode FormatSDCardNow(void); }; #endif \ No newline at end of file diff --git a/middleware/StorageManager/src/IStorageManager.cpp b/middleware/StorageManager/src/IStorageManager.cpp index 8673d31..9a85349 100644 --- a/middleware/StorageManager/src/IStorageManager.cpp +++ b/middleware/StorageManager/src/IStorageManager.cpp @@ -77,4 +77,9 @@ std::string IStorageManager::GetFilesSavingPath(void) LogWarning("STATUS_CODE_VIRTUAL_FUNCTION\n"); std::string path = "undefined"; return path; +} +StatusCode IStorageManager::FormatSDCardNow(void) +{ + LogWarning("STATUS_CODE_VIRTUAL_FUNCTION\n"); + return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); } \ No newline at end of file diff --git a/middleware/StorageManager/src/SdCardHandle.cpp b/middleware/StorageManager/src/SdCardHandle.cpp index 0eb9d43..1185c24 100644 --- a/middleware/StorageManager/src/SdCardHandle.cpp +++ b/middleware/StorageManager/src/SdCardHandle.cpp @@ -37,6 +37,11 @@ StatusCode SdCardHandle::GetSdCardInfo(SdCardInfo &info) info.mEvent = StorageEventConvert(mSdCardHal->GetSdCardStatus()); return mSdCardHal->GetCapacity(info.mTotalSizeMB, info.mFreeSizeMB, info.mUsedSizeMB); } +StatusCode SdCardHandle::FormatSDCardNow(void) +{ + mSdCardHal->FormatSDCard(); + return CreateStatusCode(STATUS_CODE_OK); +} void SdCardHandle::SdCardInit(void) { IHalCpp::GetInstance()->GetSdCardHal(mSdCardHal); diff --git a/middleware/StorageManager/src/SdCardHandle.h b/middleware/StorageManager/src/SdCardHandle.h index b542b9d..c14a16b 100644 --- a/middleware/StorageManager/src/SdCardHandle.h +++ b/middleware/StorageManager/src/SdCardHandle.h @@ -25,6 +25,7 @@ public: virtual ~SdCardHandle() = default; void ReportEvent(const SdCardHalStatus &status) override; StatusCode GetSdCardInfo(SdCardInfo &info) override; + StatusCode FormatSDCardNow(void) override; void SdCardInit(void); void SdCardUnInit(void); diff --git a/test/application/HuntingCamera/src_mock/DeviceManager_Mock_Test.cpp b/test/application/HuntingCamera/src_mock/DeviceManager_Mock_Test.cpp index 1a0dc5d..dcb1b9f 100644 --- a/test/application/HuntingCamera/src_mock/DeviceManager_Mock_Test.cpp +++ b/test/application/HuntingCamera/src_mock/DeviceManager_Mock_Test.cpp @@ -65,6 +65,21 @@ TEST_F(HuntingCameraTest, HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControlClick) std::this_thread::sleep_for(std::chrono::milliseconds(100)); MainThread::GetInstance()->Runing(); } +/** + * @brief Construct a new test f object + * ../output_files/test/bin/HuntingCameraTest + * --gtest_filter=HuntingCameraTest.HS_INTEGRATION_HunttingCamera_EXAMPLE_FormatSDCard + */ +TEST_F(HuntingCameraTest, HS_INTEGRATION_HunttingCamera_EXAMPLE_FormatSDCard) +{ + SetAllCamerasResult(mAllCamerasMock); + MockOtherSideIpcMissionReply(IpcMission::TEST); + MainThread::GetInstance()->Init(); + TestManager::ResetTimeOut(1000 * 17); + HalTestTool::MockKeyClick("format", 1000 * 16); // Simulate pressing a button. + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MainThread::GetInstance()->Runing(); +} /** * @brief Construct a new test f object * ../output_files/test/bin/HuntingCameraTest diff --git a/test/application/HuntingCamera/src_mock/HuntingCameraTest.cpp b/test/application/HuntingCamera/src_mock/HuntingCameraTest.cpp index ecd026b..b94e24e 100644 --- a/test/application/HuntingCamera/src_mock/HuntingCameraTest.cpp +++ b/test/application/HuntingCamera/src_mock/HuntingCameraTest.cpp @@ -18,6 +18,7 @@ #include "MainThread.h" #include const char *KEY_RESET = "reset"; +const char *KEY_FORMAT_SD_CARD = "format"; const char *LED_DEVICE_STATUS = "device_status"; void MainThreadTest::CustomizationInit(void) { @@ -90,6 +91,8 @@ void HuntingCameraTest::CreateAllKeysMcok(void) { std::shared_ptr key = HalTestTool::MakeKeyHalTest(KEY_RESET); mAllKeysMock[KEY_RESET] = key; + std::shared_ptr key2 = HalTestTool::MakeKeyHalTest(KEY_FORMAT_SD_CARD); + mAllKeysMock[KEY_FORMAT_SD_CARD] = key2; HalTestTool::SetAllKeysResult(mAllKeysMock); } void HuntingCameraTest::DestroyAllKeysMock(void)