C++程序  |  106行  |  3.28 KB

/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * 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.
 *
 * Based on the HiKeyPowerHAL
 */

#include <pthread.h>
#include <semaphore.h>
#include <cutils/properties.h>

#define LOG_TAG "VSoCPowerHAL"
#include <utils/Log.h>

#include <hardware/hardware.h>
#include <hardware/power.h>
#include "guest/libs/platform_support/api_level_fixes.h"

struct vsoc_power_module {
    struct power_module base;
    pthread_mutex_t lock;
};


#if VSOC_PLATFORM_SDK_AFTER(N_MR1)

static void vsoc_power_set_feature(struct power_module __unused *module,
                                  feature_t __unused hint,
                                  int __unused state) {
    return;
}

#elif VSOC_PLATFORM_SDK_AFTER(L)

static void vsoc_power_set_feature(struct power_module __unused *module,
                                  power_hint_t __unused hint,
                                  int __unused state) {
    return;
}

#endif

static void vsoc_power_hint(struct power_module __unused *module,
                           power_hint_t __unused hint,
                           void __unused *data) {
    return;
}

static void vsoc_power_set_interactive(struct power_module __unused *module,
                                      int __unused on) {
    return;
}

static  void vsoc_power_init(struct power_module __unused *module) {
    return;
}


/*
 * The power module wasn't opened at all in versions prior to 'O'. The module
 * pointer was reinterpretd as a device pointer. 'O' retains this behavior when
 * open is set to NULL. This code is using that mode.
 * For reference,
 * 'O': hardware/interfaces/power/1.0/default/Power.cpp
 * prior: frameworks/base/services/core/jni/com_android_server_power_PowerManagerService.cpp
 */
static struct hw_module_methods_t power_module_methods = {
    VSOC_STATIC_INITIALIZER(open) NULL
};


struct vsoc_power_module HAL_MODULE_INFO_SYM = {
  VSOC_STATIC_INITIALIZER(base) {
    .common = {
        VSOC_STATIC_INITIALIZER(tag) HARDWARE_MODULE_TAG,
        VSOC_STATIC_INITIALIZER(module_api_version) POWER_MODULE_API_VERSION_0_2,
        VSOC_STATIC_INITIALIZER(hal_api_version) HARDWARE_HAL_API_VERSION,
        VSOC_STATIC_INITIALIZER(id) POWER_HARDWARE_MODULE_ID,
        VSOC_STATIC_INITIALIZER(name) "VSoC Power HAL",
        VSOC_STATIC_INITIALIZER(author) "The Android Open Source Project",
        VSOC_STATIC_INITIALIZER(methods) &power_module_methods,
    },
    VSOC_STATIC_INITIALIZER(init) vsoc_power_init,
    VSOC_STATIC_INITIALIZER(setInteractive) vsoc_power_set_interactive,
    VSOC_STATIC_INITIALIZER(powerHint) vsoc_power_hint,
    // Before L_MR1 we don't have setFeature
#if VSOC_PLATFORM_SDK_AFTER(L)
    VSOC_STATIC_INITIALIZER(setFeature) vsoc_power_set_feature,
#endif
  },

  VSOC_STATIC_INITIALIZER(lock) PTHREAD_MUTEX_INITIALIZER,
};