/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "nativeapi_timer_task.h" #include "CppTimer.h" #include "CppTimerManager.h" #include "PreviewerEngineLog.h" using namespace std; const static int RES_OK = 0; const static int RES_ERROR = -1; #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* __cplusplus */ int InitTimerTask() { return RES_OK; } using TimerCallBack = void(*)(void*); int StartTimerTask(bool isPeriodic, const unsigned int delay, void* userCallback, void* userContext, timerHandle_t *timerHandle) { if (timerHandle == nullptr) { ELOG("timerHandle is nullptr"); return RES_ERROR; } CppTimer* timer = new CppTimer(reinterpret_cast(userCallback), userContext); if (timer == nullptr) { ELOG("TimerNew timer memory allocation failed"); *timerHandle = timer; return RES_ERROR; } if (!isPeriodic) { timer->SetShotTimes(1); } timer->Start(delay); CppTimerManager::GetTimerManager().AddCppTimer(*timer); *timerHandle = timer; return RES_OK; } int StopTimerTask(const timerHandle_t timerHandle) { if (timerHandle == nullptr) { ELOG("TimerTaskHandler::StartTimer timerHandle is null."); return RES_ERROR; } CppTimer* timer = static_cast(timerHandle); if (timer == nullptr) { ELOG("TimerTaskHandler::StartTimer timerHandle is invalud."); return RES_ERROR; } timer->Stop(); CppTimerManager::GetTimerManager().RemoveCppTimer(*timer); delete timer; timer = nullptr; return RES_OK; } #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */