Improve:sd card hal.

This commit is contained in:
Fancy code 2024-05-11 17:25:45 +08:00
parent 385884baec
commit ec7634f22d
8 changed files with 28 additions and 16 deletions

View File

@ -82,11 +82,13 @@ StatusCode AppMonitor::GetLockVideoStatus(LockVideoStatus &param)
StatusCode AppMonitor::GetStorageInfo(std::vector<AppGetStorageInfo> &param) StatusCode AppMonitor::GetStorageInfo(std::vector<AppGetStorageInfo> &param)
{ {
AppGetStorageInfo info; AppGetStorageInfo info;
SdCardInfo sdInfo;
IStorageManager::GetInstance()->GetSdCardInfo(sdInfo);
info.mIndex = 0; info.mIndex = 0;
info.mName = "TF card"; info.mName = "TF card";
info.mType = StorageType::SD_CARD_1; info.mType = StorageType::SD_CARD_1;
info.mFree = 1024 * 32; info.mFree = sdInfo.mFreeSizeMB;
info.mTotal = 1024 * 32; info.mTotal = sdInfo.mTotalSizeMB;
param.push_back(info); param.push_back(info);
return CreateStatusCode(STATUS_CODE_OK); return CreateStatusCode(STATUS_CODE_OK);
} }

View File

@ -73,7 +73,7 @@ SdCardHalStatus VSdCardHal::GetSdCardStatus(void)
LogWarning("STATUS_CODE_VIRTUAL_FUNCTION.\n"); LogWarning("STATUS_CODE_VIRTUAL_FUNCTION.\n");
return SdCardHalStatus::END; 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); return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
} }

View File

@ -106,7 +106,7 @@ public:
virtual ~VSdCardHal() = default; virtual ~VSdCardHal() = default;
virtual void SetSdCardMonitor(std::shared_ptr<VSdCardHalMonitor> &monitor); virtual void SetSdCardMonitor(std::shared_ptr<VSdCardHalMonitor> &monitor);
virtual SdCardHalStatus GetSdCardStatus(void); 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 class IHalCpp
{ {

View File

@ -23,8 +23,10 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/statvfs.h> #include <sys/statvfs.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/vfs.h>
#include <unistd.h> #include <unistd.h>
const char *SD_CARD_DEVICE = SD_CARD_DEV; 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) SdCardHal::SdCardHal() : mStatus(SdCardHalStatus::END), mThreadRuning(false), mDeviceFd(-1)
{ {
} }
@ -38,20 +40,27 @@ SdCardHalStatus SdCardHal::GetSdCardStatus(void)
{ {
return mStatus; 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; using SD_SIZE = unsigned long long;
struct statvfs stat; constexpr SD_SIZE ONE_MB = 1024ULL * 1024;
if (statvfs(SD_CARD_DEVICE, &stat) != 0) { if (SdCardHalStatus::MOUNTED != mStatus) {
perror("statvfs"); 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); return CreateStatusCode(STATUS_CODE_NOT_OK);
} }
totalSizeMB = (stat.f_frsize * stat.f_blocks) / ONE_MB; totalSizeMB = ((SD_SIZE)sd_fs.f_blocks * (SD_SIZE)sd_fs.f_bsize) / ONE_MB;
freeSizeMB = (stat.f_frsize * stat.f_bfree) / 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("Total size: %llu MB\n", totalSizeMB);
LogInfo("Free size: %llu MB\n", freeSizeMB); LogInfo("Free size: %llu MB\n", freeSizeMB);
LogInfo("Used size: %llu MB\n", usedSizeMB);
return CreateStatusCode(STATUS_CODE_OK); return CreateStatusCode(STATUS_CODE_OK);
} }
void SdCardHal::Init(void) void SdCardHal::Init(void)

View File

@ -23,7 +23,7 @@ public:
virtual ~SdCardHal() = default; virtual ~SdCardHal() = default;
void SetSdCardMonitor(std::shared_ptr<VSdCardHalMonitor> &monitor) override; void SetSdCardMonitor(std::shared_ptr<VSdCardHalMonitor> &monitor) override;
SdCardHalStatus GetSdCardStatus(void) 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 Init(void);
void UnInit(void); void UnInit(void);
void DevDetectingThread(void); void DevDetectingThread(void);

View File

@ -236,8 +236,8 @@ typedef struct app_get_storage_info
int mIndex; int mIndex;
StorageType mType; StorageType mType;
std::string mName; std::string mName;
int mFree; unsigned long long mFree;
int mTotal; unsigned long long mTotal;
} AppGetStorageInfo; } AppGetStorageInfo;
typedef struct app_get_file_info typedef struct app_get_file_info
{ {

View File

@ -32,6 +32,7 @@ typedef struct sd_card_info
StorageEvent mEvent; StorageEvent mEvent;
unsigned long long mTotalSizeMB; unsigned long long mTotalSizeMB;
unsigned long long mFreeSizeMB; unsigned long long mFreeSizeMB;
unsigned long long mUsedSizeMB;
} SdCardInfo; } SdCardInfo;
class VStorageMoniter class VStorageMoniter
{ {

View File

@ -28,7 +28,7 @@ void SdCardHandle::ReportEvent(const SdCardHalStatus &status)
StatusCode SdCardHandle::GetSdCardInfo(SdCardInfo &info) StatusCode SdCardHandle::GetSdCardInfo(SdCardInfo &info)
{ {
info.mEvent = StorageEventConvert(mSdCardHal->GetSdCardStatus()); 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) void SdCardHandle::SdCardInit(void)
{ {