/*
 * Copyright (c) 2021 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 <stdint.h>

#include <los_pm.h>

#include "hilog_wrapper.h"
#include "power/suspend_ops.h"

static void HandleRunningLock(const char* name, BOOL acquire)
{
    if (name == NULL) {
        POWER_HILOGE("Invalid lock name");
        return;
    }

    uint32_t ret = (acquire == TRUE) ? LOS_PmLockRequest(name) : LOS_PmLockRelease(name);
    POWER_HILOGI("%{public}s runninglock: %{public}s, ret: %{public}u",
        (acquire == TRUE) ? "Acquire" : "Release", name, ret);
}

static void RunningLockAcquire(const char *name)
{
    HandleRunningLock(name, TRUE);
}

static void RunningLockRelease(const char *name)
{
    HandleRunningLock(name, FALSE);
}

static struct RunningLockOps g_ops = {
    .Acquire = RunningLockAcquire,
    .Release = RunningLockRelease,
};

struct RunningLockOps* RunningLockOpsInit()
{
    return &g_ops;
}