From ec7634f22d3f174e3a172eede7396939e5fd8aa5 Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Sat, 11 May 2024 17:25:45 +0800 Subject: [PATCH] Improve:sd card hal. --- application/MissionManager/src/AppMonitor.cpp | 6 +++-- hal/abstract/IHalCpp.cpp | 2 +- hal/include/IHalCpp.h | 2 +- hal/src/SdCardHal.cpp | 25 +++++++++++++------ hal/src/SdCardHal.h | 2 +- middleware/AppManager/include/IAppManager.h | 4 +-- .../StorageManager/include/IStorageManager.h | 1 + .../StorageManager/src/SdCardHandle.cpp | 2 +- 8 files changed, 28 insertions(+), 16 deletions(-) diff --git a/application/MissionManager/src/AppMonitor.cpp b/application/MissionManager/src/AppMonitor.cpp index 183760e..7aabb56 100644 --- a/application/MissionManager/src/AppMonitor.cpp +++ b/application/MissionManager/src/AppMonitor.cpp @@ -82,11 +82,13 @@ StatusCode AppMonitor::GetLockVideoStatus(LockVideoStatus ¶m) StatusCode AppMonitor::GetStorageInfo(std::vector ¶m) { AppGetStorageInfo info; + SdCardInfo sdInfo; + IStorageManager::GetInstance()->GetSdCardInfo(sdInfo); info.mIndex = 0; info.mName = "TF card"; info.mType = StorageType::SD_CARD_1; - info.mFree = 1024 * 32; - info.mTotal = 1024 * 32; + info.mFree = sdInfo.mFreeSizeMB; + info.mTotal = sdInfo.mTotalSizeMB; param.push_back(info); return CreateStatusCode(STATUS_CODE_OK); } diff --git a/hal/abstract/IHalCpp.cpp b/hal/abstract/IHalCpp.cpp index 92fc552..dc05edf 100644 --- a/hal/abstract/IHalCpp.cpp +++ b/hal/abstract/IHalCpp.cpp @@ -73,7 +73,7 @@ SdCardHalStatus VSdCardHal::GetSdCardStatus(void) LogWarning("STATUS_CODE_VIRTUAL_FUNCTION.\n"); return SdCardHalStatus::END; } -StatusCode VSdCardHal::GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB) +StatusCode VSdCardHal::GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB, unsigned long long &usedSizeMB) { return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); } diff --git a/hal/include/IHalCpp.h b/hal/include/IHalCpp.h index ca9373d..7710cda 100644 --- a/hal/include/IHalCpp.h +++ b/hal/include/IHalCpp.h @@ -106,7 +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); + virtual StatusCode GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB, unsigned long long &usedSizeMB); }; class IHalCpp { diff --git a/hal/src/SdCardHal.cpp b/hal/src/SdCardHal.cpp index f81a804..9582de1 100644 --- a/hal/src/SdCardHal.cpp +++ b/hal/src/SdCardHal.cpp @@ -23,8 +23,10 @@ #include #include #include +#include #include const char *SD_CARD_DEVICE = SD_CARD_DEV; +const char *SD_MOUNT_PATH = SD_CARD_MOUNT_PATH; SdCardHal::SdCardHal() : mStatus(SdCardHalStatus::END), mThreadRuning(false), mDeviceFd(-1) { } @@ -38,20 +40,27 @@ SdCardHalStatus SdCardHal::GetSdCardStatus(void) { return mStatus; } -StatusCode SdCardHal::GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB) +StatusCode SdCardHal::GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB, + unsigned long long &usedSizeMB) { - constexpr int ONE_MB = 1024 * 1024; - struct statvfs stat; - if (statvfs(SD_CARD_DEVICE, &stat) != 0) { - perror("statvfs"); + using SD_SIZE = unsigned long long; + constexpr SD_SIZE ONE_MB = 1024ULL * 1024; + if (SdCardHalStatus::MOUNTED != mStatus) { + LogWarning("SdCardHalStatus::MOUNTED != mStatus\n"); + return CreateStatusCode(STATUS_CODE_NOT_OK); + } + struct statfs sd_fs; + if (statfs(SD_MOUNT_PATH, &sd_fs) != 0) { + LogError("statfs failed!\n"); return CreateStatusCode(STATUS_CODE_NOT_OK); } - totalSizeMB = (stat.f_frsize * stat.f_blocks) / ONE_MB; - freeSizeMB = (stat.f_frsize * stat.f_bfree) / ONE_MB; - + totalSizeMB = ((SD_SIZE)sd_fs.f_blocks * (SD_SIZE)sd_fs.f_bsize) / ONE_MB; + freeSizeMB = ((SD_SIZE)sd_fs.f_bavail * (SD_SIZE)sd_fs.f_bsize) / ONE_MB; + usedSizeMB = (((SD_SIZE)sd_fs.f_blocks - (SD_SIZE)sd_fs.f_bfree) * (SD_SIZE)sd_fs.f_bsize) / ONE_MB; LogInfo("Total size: %llu MB\n", totalSizeMB); LogInfo("Free size: %llu MB\n", freeSizeMB); + LogInfo("Used size: %llu MB\n", usedSizeMB); return CreateStatusCode(STATUS_CODE_OK); } void SdCardHal::Init(void) diff --git a/hal/src/SdCardHal.h b/hal/src/SdCardHal.h index 48cbc94..5aabdb7 100644 --- a/hal/src/SdCardHal.h +++ b/hal/src/SdCardHal.h @@ -23,7 +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; + StatusCode GetCapacity(unsigned long long &totalSizeMB, unsigned long long &freeSizeMB, unsigned long long &usedSizeMB) 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 5574564..c418a55 100644 --- a/middleware/AppManager/include/IAppManager.h +++ b/middleware/AppManager/include/IAppManager.h @@ -236,8 +236,8 @@ typedef struct app_get_storage_info int mIndex; StorageType mType; std::string mName; - int mFree; - int mTotal; + unsigned long long mFree; + unsigned long long mTotal; } AppGetStorageInfo; typedef struct app_get_file_info { diff --git a/middleware/StorageManager/include/IStorageManager.h b/middleware/StorageManager/include/IStorageManager.h index 71a9ae1..126df99 100644 --- a/middleware/StorageManager/include/IStorageManager.h +++ b/middleware/StorageManager/include/IStorageManager.h @@ -32,6 +32,7 @@ typedef struct sd_card_info StorageEvent mEvent; unsigned long long mTotalSizeMB; unsigned long long mFreeSizeMB; + unsigned long long mUsedSizeMB; } SdCardInfo; class VStorageMoniter { diff --git a/middleware/StorageManager/src/SdCardHandle.cpp b/middleware/StorageManager/src/SdCardHandle.cpp index 77349c7..071c8b2 100644 --- a/middleware/StorageManager/src/SdCardHandle.cpp +++ b/middleware/StorageManager/src/SdCardHandle.cpp @@ -28,7 +28,7 @@ void SdCardHandle::ReportEvent(const SdCardHalStatus &status) StatusCode SdCardHandle::GetSdCardInfo(SdCardInfo &info) { info.mEvent = StorageEventConvert(mSdCardHal->GetSdCardStatus()); - return mSdCardHal->GetCapacity(info.mTotalSizeMB, info.mFreeSizeMB); + return mSdCardHal->GetCapacity(info.mTotalSizeMB, info.mFreeSizeMB, info.mUsedSizeMB); } void SdCardHandle::SdCardInit(void) {