From 385884baec25b921009d4fbf028445fb77b2443d Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Sat, 11 May 2024 14:52:37 +0800 Subject: [PATCH] Improve:sd card hal. --- application/MissionManager/src/AppMonitor.cpp | 21 ++++++++++++++++--- application/MissionManager/src/AppMonitor.h | 4 ++++ hal/abstract/IHalCpp.cpp | 4 ++++ hal/include/IHalCpp.h | 1 + hal/src/SdCardHal.cpp | 17 +++++++++++++++ hal/src/SdCardHal.h | 1 + middleware/AppManager/include/IAppManager.h | 4 ++-- .../StorageManager/include/IStorageManager.h | 8 +++++++ .../StorageManager/src/IStorageManager.cpp | 7 +++++++ .../StorageManager/src/SdCardHandle.cpp | 9 ++++++-- middleware/StorageManager/src/SdCardHandle.h | 5 +++-- middleware/StorageManager/src/StorageBase.h | 2 +- .../StorageManager/src/StorageManagerImpl.cpp | 4 ++-- .../StorageManager/src/StorageManagerImpl.h | 2 +- .../AppManager/src/AppManager_Test.cpp | 20 +++++++++--------- 15 files changed, 86 insertions(+), 23 deletions(-) diff --git a/application/MissionManager/src/AppMonitor.cpp b/application/MissionManager/src/AppMonitor.cpp index 5e2b6c0f..183760e3 100644 --- a/application/MissionManager/src/AppMonitor.cpp +++ b/application/MissionManager/src/AppMonitor.cpp @@ -49,9 +49,11 @@ StatusCode AppMonitor::GetMediaInfo(AppGetMediaInfo ¶m) StatusCode AppMonitor::GetSdCardInfo(AppGetSdCardInfo ¶m) { LogInfo("AppMonitor::GetSdCardInfo.\n"); - param.mStatus = SdCardStatus::NORMAL; - param.mFree = 1024 * 32; - param.mTotal = 1024 * 32; + SdCardInfo info; + IStorageManager::GetInstance()->GetSdCardInfo(info); + param.mStatus = SdCardStatusConvert(info.mEvent); + param.mFree = info.mFreeSizeMB; + param.mTotal = info.mTotalSizeMB; return CreateStatusCode(STATUS_CODE_OK); } StatusCode AppMonitor::GetBatteryInfo(AppGetBatteryInfo ¶m) @@ -139,4 +141,17 @@ StatusCode AppMonitor::GetThumbnail(AppGetThumbnail ¶m) { param.mThumbnail = "./34a396526922a33e97906920dbfef2a5.jpg"; return CreateStatusCode(STATUS_CODE_OK); +} +SdCardStatus AppMonitor::SdCardStatusConvert(const StorageEvent &event) +{ + switch (event) { + case StorageEvent::SD_CARD_INSERT: + return SdCardStatus::NORMAL; + case StorageEvent::SD_CARD_REMOVE: + return SdCardStatus::NOT_INSERTED; + case StorageEvent::SD_ABNORMAL: + return SdCardStatus::NOT_INSERTED; + default: + return SdCardStatus::END; + } } \ No newline at end of file diff --git a/application/MissionManager/src/AppMonitor.h b/application/MissionManager/src/AppMonitor.h index d471fa35..adb16723 100644 --- a/application/MissionManager/src/AppMonitor.h +++ b/application/MissionManager/src/AppMonitor.h @@ -15,6 +15,7 @@ #ifndef APP_MONITOR_H #define APP_MONITOR_H #include "IAppManager.h" +#include "IStorageManager.h" class AppMonitor : public VAppMonitor { public: @@ -37,5 +38,8 @@ public: StatusCode AppPlayback(const PlayBackEvent &event) override; StatusCode UploadFile(AppUploadFile ¶m) override; StatusCode GetThumbnail(AppGetThumbnail ¶m) override; + +private: + SdCardStatus SdCardStatusConvert(const StorageEvent &event); }; #endif \ No newline at end of file diff --git a/hal/abstract/IHalCpp.cpp b/hal/abstract/IHalCpp.cpp index cbae51cc..92fc552a 100644 --- a/hal/abstract/IHalCpp.cpp +++ b/hal/abstract/IHalCpp.cpp @@ -73,6 +73,10 @@ SdCardHalStatus VSdCardHal::GetSdCardStatus(void) LogWarning("STATUS_CODE_VIRTUAL_FUNCTION.\n"); return SdCardHalStatus::END; } +StatusCode VSdCardHal::GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB) +{ + 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 972d6b37..ca9373d0 100644 --- a/hal/include/IHalCpp.h +++ b/hal/include/IHalCpp.h @@ -106,6 +106,7 @@ public: virtual ~VSdCardHal() = default; virtual void SetSdCardMonitor(std::shared_ptr &monitor); virtual SdCardHalStatus GetSdCardStatus(void); + virtual StatusCode GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB); }; class IHalCpp { diff --git a/hal/src/SdCardHal.cpp b/hal/src/SdCardHal.cpp index ce034f5d..f81a8048 100644 --- a/hal/src/SdCardHal.cpp +++ b/hal/src/SdCardHal.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include const char *SD_CARD_DEVICE = SD_CARD_DEV; @@ -37,6 +38,22 @@ SdCardHalStatus SdCardHal::GetSdCardStatus(void) { return mStatus; } +StatusCode SdCardHal::GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB) +{ + constexpr int ONE_MB = 1024 * 1024; + struct statvfs stat; + if (statvfs(SD_CARD_DEVICE, &stat) != 0) { + perror("statvfs"); + return CreateStatusCode(STATUS_CODE_NOT_OK); + } + + totalSizeMB = (stat.f_frsize * stat.f_blocks) / ONE_MB; + freeSizeMB = (stat.f_frsize * stat.f_bfree) / ONE_MB; + + LogInfo("Total size: %llu MB\n", totalSizeMB); + LogInfo("Free size: %llu MB\n", freeSizeMB); + 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 fc42e624..48cbc94f 100644 --- a/hal/src/SdCardHal.h +++ b/hal/src/SdCardHal.h @@ -23,6 +23,7 @@ public: virtual ~SdCardHal() = default; void SetSdCardMonitor(std::shared_ptr &monitor) override; SdCardHalStatus GetSdCardStatus(void) override; + StatusCode GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB) override; void Init(void); void UnInit(void); void DevDetectingThread(void); diff --git a/middleware/AppManager/include/IAppManager.h b/middleware/AppManager/include/IAppManager.h index 9eae9838..55745646 100644 --- a/middleware/AppManager/include/IAppManager.h +++ b/middleware/AppManager/include/IAppManager.h @@ -201,8 +201,8 @@ typedef struct app_get_sd_card_info { app_get_sd_card_info(); SdCardStatus mStatus; - int mFree; - int mTotal; + unsigned long long mFree; + unsigned long long mTotal; } AppGetSdCardInfo; typedef struct app_get_battery_info { diff --git a/middleware/StorageManager/include/IStorageManager.h b/middleware/StorageManager/include/IStorageManager.h index a55ddbf6..71a9ae12 100644 --- a/middleware/StorageManager/include/IStorageManager.h +++ b/middleware/StorageManager/include/IStorageManager.h @@ -26,6 +26,13 @@ enum class StorageEvent EMMC_NORMAL, END }; +typedef struct sd_card_info +{ + sd_card_info(); + StorageEvent mEvent; + unsigned long long mTotalSizeMB; + unsigned long long mFreeSizeMB; +} SdCardInfo; class VStorageMoniter { public: @@ -44,5 +51,6 @@ public: virtual StatusCode SetMonitor(std::shared_ptr &monitor); virtual StatusCode SaveFile(const std::string &sourceFile, const std::string &savePaht); virtual const char *PrintStringStorageEvent(const StorageEvent &event); + virtual StatusCode GetSdCardInfo(SdCardInfo &info); }; #endif \ No newline at end of file diff --git a/middleware/StorageManager/src/IStorageManager.cpp b/middleware/StorageManager/src/IStorageManager.cpp index b6705cad..9aec9a73 100644 --- a/middleware/StorageManager/src/IStorageManager.cpp +++ b/middleware/StorageManager/src/IStorageManager.cpp @@ -14,6 +14,9 @@ */ #include "IStorageManager.h" #include "ILog.h" +sd_card_info::sd_card_info() : mEvent(StorageEvent::END), mTotalSizeMB(0), mFreeSizeMB(0) +{ +} void VStorageMoniter::ReportEvent(const StorageEvent &event) { } @@ -50,4 +53,8 @@ StatusCode IStorageManager::SaveFile(const std::string &sourceFile, const std::s const char *IStorageManager::PrintStringStorageEvent(const StorageEvent &event) { return "STATUS_CODE_VIRTUAL_FUNCTION"; +} +StatusCode IStorageManager::GetSdCardInfo(SdCardInfo &info) +{ + 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 c1e694a3..77349c77 100644 --- a/middleware/StorageManager/src/SdCardHandle.cpp +++ b/middleware/StorageManager/src/SdCardHandle.cpp @@ -25,7 +25,12 @@ void SdCardHandle::ReportEvent(const SdCardHalStatus &status) } monitor->ReportEvent(StorageEventConvert(status)); } -void SdCardHandle::Init(void) +StatusCode SdCardHandle::GetSdCardInfo(SdCardInfo &info) +{ + info.mEvent = StorageEventConvert(mSdCardHal->GetSdCardStatus()); + return mSdCardHal->GetCapacity(info.mTotalSizeMB, info.mFreeSizeMB); +} +void SdCardHandle::SdCardInit(void) { IHalCpp::GetInstance()->GetSdCardHal(mSdCardHal); if (nullptr == mSdCardHal) { @@ -40,7 +45,7 @@ void SdCardHandle::Init(void) } mSdCardHal->SetSdCardMonitor(sdMonitor); } -void SdCardHandle::UnInit(void) +void SdCardHandle::SdCardUnInit(void) { mSdCardHal.reset(); } diff --git a/middleware/StorageManager/src/SdCardHandle.h b/middleware/StorageManager/src/SdCardHandle.h index 590ce68e..b542b9d2 100644 --- a/middleware/StorageManager/src/SdCardHandle.h +++ b/middleware/StorageManager/src/SdCardHandle.h @@ -24,8 +24,9 @@ public: SdCardHandle() = default; virtual ~SdCardHandle() = default; void ReportEvent(const SdCardHalStatus &status) override; - void Init(void); - void UnInit(void); + StatusCode GetSdCardInfo(SdCardInfo &info) override; + void SdCardInit(void); + void SdCardUnInit(void); protected: StatusCode SdSaveFile(const std::string &sourceFile, const std::string &savePaht); diff --git a/middleware/StorageManager/src/StorageBase.h b/middleware/StorageManager/src/StorageBase.h index 524d1a77..8d6e19ff 100644 --- a/middleware/StorageManager/src/StorageBase.h +++ b/middleware/StorageManager/src/StorageBase.h @@ -16,7 +16,7 @@ #define STORAGE_BASE_H #include "IStorageManager.h" #include -class StorageBase : public std::enable_shared_from_this +class StorageBase : public IStorageManager, public std::enable_shared_from_this { public: StorageBase() = default; diff --git a/middleware/StorageManager/src/StorageManagerImpl.cpp b/middleware/StorageManager/src/StorageManagerImpl.cpp index 5d85df58..f787c43b 100644 --- a/middleware/StorageManager/src/StorageManagerImpl.cpp +++ b/middleware/StorageManager/src/StorageManagerImpl.cpp @@ -16,12 +16,12 @@ #include "ILog.h" StatusCode StorageManagerImpl::Init(void) { - SdCardHandle::Init(); + SdCardHandle::SdCardInit(); return CreateStatusCode(STATUS_CODE_OK); } StatusCode StorageManagerImpl::UnInit(void) { - SdCardHandle::UnInit(); + SdCardHandle::SdCardUnInit(); return CreateStatusCode(STATUS_CODE_OK); } StatusCode StorageManagerImpl::SetMonitor(std::shared_ptr &monitor) diff --git a/middleware/StorageManager/src/StorageManagerImpl.h b/middleware/StorageManager/src/StorageManagerImpl.h index 49e76433..689c6177 100644 --- a/middleware/StorageManager/src/StorageManagerImpl.h +++ b/middleware/StorageManager/src/StorageManagerImpl.h @@ -18,7 +18,7 @@ #include "IStorageManager.h" #include "SdCardHandle.h" #include -class StorageManagerImpl : public IStorageManager, public SdCardHandle, public EmmcHandle +class StorageManagerImpl : public SdCardHandle, public EmmcHandle { public: StorageManagerImpl() = default; diff --git a/test/middleware/AppManager/src/AppManager_Test.cpp b/test/middleware/AppManager/src/AppManager_Test.cpp index 97766899..30b97263 100644 --- a/test/middleware/AppManager/src/AppManager_Test.cpp +++ b/test/middleware/AppManager/src/AppManager_Test.cpp @@ -77,7 +77,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_Demo) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetProductInfo(); + AppManagerTestTool::MockGetProductInfo(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -100,7 +100,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetDeviceAttr) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetDeviceAttr(); + AppManagerTestTool::MockGetDeviceAttr(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -112,7 +112,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetMediaInfo) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetMediaInfo(); + AppManagerTestTool::MockGetMediaInfo(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -124,7 +124,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetSdCardInfo) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetSdCardInfo(); + AppManagerTestTool::MockGetSdCardInfo(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -136,7 +136,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetBatteryInfo) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetBatteryInfo(); + AppManagerTestTool::MockGetBatteryInfo(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -172,7 +172,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetParamValue) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetParamValue(); + AppManagerTestTool::MockGetParamValue(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -184,7 +184,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetCapability) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetCapability(); + AppManagerTestTool::MockGetCapability(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -196,7 +196,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetLockVideoStatus) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetLockVideoStatus(); + AppManagerTestTool::MockGetLockVideoStatus(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -208,7 +208,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetStorageInfo) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetStorageInfo(); + AppManagerTestTool::MockGetStorageInfo(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } @@ -220,7 +220,7 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetStorageFileList) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetStorageFileList(); + AppManagerTestTool::MockGetStorageFileList(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); }