From fcc7c3d040a29f3676fcc63a1bb346718948d409 Mon Sep 17 00:00:00 2001 From: zhaoshenghua Date: Tue, 18 Mar 2025 11:04:34 +0800 Subject: [PATCH 1/2] fix compatibility Signed-off-by: zhaoshenghua Change-Id: Ie3b61a01629c0725b008d19e453fc08d52ee27a8 --- .../cj/work_scheduler/work_scheduler_ffi.cpp | 92 +++++++++++++++++-- .../cj/work_scheduler/work_scheduler_ffi.h | 16 +++- 2 files changed, 101 insertions(+), 7 deletions(-) diff --git a/interfaces/kits/cj/work_scheduler/work_scheduler_ffi.cpp b/interfaces/kits/cj/work_scheduler/work_scheduler_ffi.cpp index f7bddfe..efbf026 100644 --- a/interfaces/kits/cj/work_scheduler/work_scheduler_ffi.cpp +++ b/interfaces/kits/cj/work_scheduler/work_scheduler_ffi.cpp @@ -41,6 +41,21 @@ int32_t InnerWrapWantParamsT(const sptr iIt, CParameters *p) return 0; } +int32_t GetWorkInfoV2(RetWorkInfoV2 cwork, WorkInfo& workInfo) +{ + auto ret = GetWorkInfo(cwork.v1, workInfo); + if (ret != 0) { + return ret; + } + return GetExtrasInfo(cwork, workInfo); +} + +void ParseWorkInfoV2(std::shared_ptr workInfo, RetWorkInfoV2& cwork) +{ + ParseWorkInfo(workInfo, cwork.v1); + ParseExtrasInfo(workInfo, cwork.parameters); +} + extern "C" { const int32_t BATTERY_LEVEL_MIN = 0; const int32_t BATTERY_LEVEL_MAX = 100; @@ -138,6 +153,76 @@ extern "C" { return WorkSchedulerSrvClient::GetInstance().StopAndClearWorks(); } + int32_t CJ_StartWorkV2(RetWorkInfoV2 work) + { + WorkInfo workInfo = WorkInfo(); + auto paraCode = GetWorkInfoV2(work, workInfo); + if (paraCode != SUCCESS_CODE) { + LOGE("WorkScheduler: CJ_StartWork parse parameter failed %{public}d", paraCode); + return paraCode; + } + ErrCode errCode = WorkSchedulerSrvClient::GetInstance().StartWork(workInfo); + return errCode; + } + + int32_t CJ_StopWorkV2(RetWorkInfoV2 work, bool needCancel) + { + WorkInfo workInfo = WorkInfo(); + ErrCode errCode; + auto paraCode = GetWorkInfoV2(work, workInfo); + if (paraCode != SUCCESS_CODE) { + LOGE("WorkScheduler: CJ_StopWork parse parameter failed %{public}d", paraCode); + return paraCode; + } + if (needCancel) { + errCode = WorkSchedulerSrvClient::GetInstance().StopAndCancelWork(workInfo); + } else { + errCode = WorkSchedulerSrvClient::GetInstance().StopWork(workInfo); + } + return errCode; + } + + int32_t CJ_GetWorkStatusV2(int32_t workId, RetWorkInfoV2& result) + { + std::shared_ptr workInfo {nullptr}; + ErrCode errCode = WorkSchedulerSrvClient::GetInstance().GetWorkStatus(workId, workInfo); + if (errCode != ERR_OK) { + LOGE("WorkScheduler: CJ_GetWorkStatus failed %{public}d", errCode); + return errCode; + } + ParseWorkInfoV2(workInfo, result); + LOGI("WorkScheduler: CJ_GetWorkStatus success"); + return errCode; + } + + RetArrRetWorkInfoV2 CJ_ObtainAllWorksV2() + { + std::list> workInfoList; + ErrCode errCode = WorkSchedulerSrvClient::GetInstance().ObtainAllWorks(workInfoList); + RetArrRetWorkInfoV2 ret = { .code = errCode, .size = 0, .data = nullptr}; + if (errCode != ERR_OK) { + LOGE("WorkScheduler: CJ_ObtainAllWorks failed "); + return ret; + } + int64_t listSize = static_cast(workInfoList.size()); + if (listSize < 0 || listSize > UINT_MAX) { + LOGE("Illegal listSize parameter"); + return ret; + } + auto data = static_cast(malloc(sizeof(RetWorkInfoV2) * listSize)); + if (data == nullptr) { + return ret; + } + ret.size = listSize; + int index = 0; + for (auto workInfo: workInfoList) { + ParseWorkInfoV2(workInfo, data[index]); + index++; + } + ret.data = data; + return ret; + } + // extra is not set int32_t GetWorkInfo(RetWorkInfo cwork, WorkInfo& workInfo) { @@ -165,10 +250,6 @@ extern "C" { if (ret != 0) { return ret; } - ret = GetExtrasInfo(cwork, workInfo, hasConditions); - if (ret != 0) { - return ret; - } if (!hasConditions) { LOGE("Set none conditions, so fail to init WorkInfo."); @@ -177,7 +258,7 @@ extern "C" { return 0; } - int32_t GetExtrasInfo(RetWorkInfo cwork, OHOS::WorkScheduler::WorkInfo& workInfo, bool& hasCondition) + int32_t GetExtrasInfo(RetWorkInfoV2 cwork, OHOS::WorkScheduler::WorkInfo& workInfo) { int32_t code = 0; CArrParameters cArrP = cwork.parameters; @@ -348,7 +429,6 @@ extern "C" { cwork.repeatCount = workInfo->GetCycleCount(); cwork.isDeepIdle = -1; cwork.idleWaitTime = -1; - ParseExtrasInfo(workInfo, cwork.parameters); } void ConvertToCArrParameters(std::map>& extrasMap, CArrParameters& arrParam) diff --git a/interfaces/kits/cj/work_scheduler/work_scheduler_ffi.h b/interfaces/kits/cj/work_scheduler/work_scheduler_ffi.h index 0c57f56..2754e46 100644 --- a/interfaces/kits/cj/work_scheduler/work_scheduler_ffi.h +++ b/interfaces/kits/cj/work_scheduler/work_scheduler_ffi.h @@ -52,6 +52,10 @@ extern "C" { bool isPersisted; int32_t isDeepIdle; int32_t idleWaitTime; + }; + + struct RetWorkInfoV2 { + RetWorkInfo v1; CArrParameters parameters; }; @@ -61,6 +65,12 @@ extern "C" { RetWorkInfo* data; }; + struct RetArrRetWorkInfoV2 { + int32_t code; + int64_t size; + RetWorkInfoV2* data; + }; + const int32_t UNSET_INT_PARAM = -1; FFI_EXPORT int32_t CJ_StartWork(RetWorkInfo work); @@ -69,6 +79,10 @@ extern "C" { FFI_EXPORT RetArrRetWorkInfo CJ_ObtainAllWorks(); FFI_EXPORT int32_t CJ_IsLastWorkTimeOut(int32_t workId, bool& result); FFI_EXPORT int32_t CJ_StopAndClearWorks(); + FFI_EXPORT int32_t CJ_StartWorkV2(RetWorkInfoV2 work); + FFI_EXPORT int32_t CJ_StopWorkV2(RetWorkInfoV2 work, bool needCancel); + FFI_EXPORT int32_t CJ_GetWorkStatusV2(int32_t workId, RetWorkInfoV2& result); + FFI_EXPORT RetArrRetWorkInfoV2 CJ_ObtainAllWorksV2(); int32_t GetWorkInfo(RetWorkInfo cwork, OHOS::WorkScheduler::WorkInfo& workInfo); int32_t GetNetWorkInfo(RetWorkInfo cwork, OHOS::WorkScheduler::WorkInfo& workInfo, bool& hasCondition); @@ -76,7 +90,7 @@ extern "C" { int32_t GetBatteryInfo(RetWorkInfo cwork, OHOS::WorkScheduler::WorkInfo& workInfo, bool& hasCondition); int32_t GetStorageInfo(RetWorkInfo cwork, OHOS::WorkScheduler::WorkInfo& workInfo, bool& hasCondition); int32_t GetRepeatInfo(RetWorkInfo cwork, OHOS::WorkScheduler::WorkInfo& workInfo, bool& hasCondition); - int32_t GetExtrasInfo(RetWorkInfo cwork, OHOS::WorkScheduler::WorkInfo& workInfo, bool& hasCondition); + int32_t GetExtrasInfo(RetWorkInfoV2 cwork, OHOS::WorkScheduler::WorkInfo& workInfo); void ParseExtrasInfo(std::shared_ptr workInfo, CArrParameters& arrParam); void ParseWorkInfo(std::shared_ptr workInfo, RetWorkInfo& cwork); char* MallocCString(const std::string& origin); -- Gitee From 7a22405a8ba99e2d10d867b224acfc2db3104a9f Mon Sep 17 00:00:00 2001 From: zhaoshenghua Date: Wed, 19 Mar 2025 09:15:22 +0800 Subject: [PATCH 2/2] add inner kits Signed-off-by: zhaoshenghua --- bundle.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bundle.json b/bundle.json index 76669aa..fec03c0 100644 --- a/bundle.json +++ b/bundle.json @@ -76,6 +76,16 @@ ] }, "name": "//foundation/resourceschedule/work_scheduler/frameworks:workschedclient" + }, + { + "type": "so", + "name": "//foundation/resourceschedule/work_scheduler/interfaces/kits/cj:cj_work_scheduler_ffi", + "header": { + "header_base":"//foundation/resourceschedule/work_scheduler/interfaces/kits/cj/work_scheduler", + "header_files":[ + "work_scheduler_ffi.h" + ] + } } ], "test": [ -- Gitee