thermal: IThermal V1.1, add methods to send thermal throttling events
Add IThermalCallback and IThermal::registerThermalCallback() method. Frameworks code calls this method to register a callback used by the IThermal HAL implementation to send thermal events to the framework ThermalService. Bug: 30982366 Test: VtsHalThermalV1_1Target on marlin manual test on marlin using marlin 1.1 HAL with modified thermal-engine.conf and temporary debug code for notification Change-Id: Ib49ad93a9495e3af515fced4e46f20186661fe07
This commit is contained in:
parent
cf2cbbfa5d
commit
cf964d79c1
7 changed files with 395 additions and 0 deletions
68
thermal/1.1/Android.bp
Normal file
68
thermal/1.1/Android.bp
Normal file
|
@ -0,0 +1,68 @@
|
|||
// This file is autogenerated by hidl-gen. Do not edit manually.
|
||||
|
||||
filegroup {
|
||||
name: "android.hardware.thermal@1.1_hal",
|
||||
srcs: [
|
||||
"IThermal.hal",
|
||||
"IThermalCallback.hal",
|
||||
],
|
||||
}
|
||||
|
||||
genrule {
|
||||
name: "android.hardware.thermal@1.1_genc++",
|
||||
tools: ["hidl-gen"],
|
||||
cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.1",
|
||||
srcs: [
|
||||
":android.hardware.thermal@1.1_hal",
|
||||
],
|
||||
out: [
|
||||
"android/hardware/thermal/1.1/ThermalAll.cpp",
|
||||
"android/hardware/thermal/1.1/ThermalCallbackAll.cpp",
|
||||
],
|
||||
}
|
||||
|
||||
genrule {
|
||||
name: "android.hardware.thermal@1.1_genc++_headers",
|
||||
tools: ["hidl-gen"],
|
||||
cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.1",
|
||||
srcs: [
|
||||
":android.hardware.thermal@1.1_hal",
|
||||
],
|
||||
out: [
|
||||
"android/hardware/thermal/1.1/IThermal.h",
|
||||
"android/hardware/thermal/1.1/IHwThermal.h",
|
||||
"android/hardware/thermal/1.1/BnHwThermal.h",
|
||||
"android/hardware/thermal/1.1/BpHwThermal.h",
|
||||
"android/hardware/thermal/1.1/BsThermal.h",
|
||||
"android/hardware/thermal/1.1/IThermalCallback.h",
|
||||
"android/hardware/thermal/1.1/IHwThermalCallback.h",
|
||||
"android/hardware/thermal/1.1/BnHwThermalCallback.h",
|
||||
"android/hardware/thermal/1.1/BpHwThermalCallback.h",
|
||||
"android/hardware/thermal/1.1/BsThermalCallback.h",
|
||||
],
|
||||
}
|
||||
|
||||
cc_library_shared {
|
||||
name: "android.hardware.thermal@1.1",
|
||||
defaults: ["hidl-module-defaults"],
|
||||
generated_sources: ["android.hardware.thermal@1.1_genc++"],
|
||||
generated_headers: ["android.hardware.thermal@1.1_genc++_headers"],
|
||||
export_generated_headers: ["android.hardware.thermal@1.1_genc++_headers"],
|
||||
vendor_available: true,
|
||||
shared_libs: [
|
||||
"libhidlbase",
|
||||
"libhidltransport",
|
||||
"libhwbinder",
|
||||
"liblog",
|
||||
"libutils",
|
||||
"libcutils",
|
||||
"android.hardware.thermal@1.0",
|
||||
],
|
||||
export_shared_lib_headers: [
|
||||
"libhidlbase",
|
||||
"libhidltransport",
|
||||
"libhwbinder",
|
||||
"libutils",
|
||||
"android.hardware.thermal@1.0",
|
||||
],
|
||||
}
|
120
thermal/1.1/Android.mk
Normal file
120
thermal/1.1/Android.mk
Normal file
|
@ -0,0 +1,120 @@
|
|||
# This file is autogenerated by hidl-gen. Do not edit manually.
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
################################################################################
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := android.hardware.thermal-V1.1-java
|
||||
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
|
||||
|
||||
intermediates := $(call local-generated-sources-dir, COMMON)
|
||||
|
||||
HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
|
||||
|
||||
LOCAL_JAVA_LIBRARIES := \
|
||||
android.hardware.thermal-V1.0-java \
|
||||
android.hidl.base-V1.0-java \
|
||||
|
||||
|
||||
#
|
||||
# Build IThermal.hal
|
||||
#
|
||||
GEN := $(intermediates)/android/hardware/thermal/V1_1/IThermal.java
|
||||
$(GEN): $(HIDL)
|
||||
$(GEN): PRIVATE_HIDL := $(HIDL)
|
||||
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IThermal.hal
|
||||
$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IThermalCallback.hal
|
||||
$(GEN): $(LOCAL_PATH)/IThermalCallback.hal
|
||||
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
|
||||
$(GEN): PRIVATE_CUSTOM_TOOL = \
|
||||
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
|
||||
-Ljava \
|
||||
-randroid.hardware:hardware/interfaces \
|
||||
-randroid.hidl:system/libhidl/transport \
|
||||
android.hardware.thermal@1.1::IThermal
|
||||
|
||||
$(GEN): $(LOCAL_PATH)/IThermal.hal
|
||||
$(transform-generated-source)
|
||||
LOCAL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
#
|
||||
# Build IThermalCallback.hal
|
||||
#
|
||||
GEN := $(intermediates)/android/hardware/thermal/V1_1/IThermalCallback.java
|
||||
$(GEN): $(HIDL)
|
||||
$(GEN): PRIVATE_HIDL := $(HIDL)
|
||||
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IThermalCallback.hal
|
||||
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
|
||||
$(GEN): PRIVATE_CUSTOM_TOOL = \
|
||||
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
|
||||
-Ljava \
|
||||
-randroid.hardware:hardware/interfaces \
|
||||
-randroid.hidl:system/libhidl/transport \
|
||||
android.hardware.thermal@1.1::IThermalCallback
|
||||
|
||||
$(GEN): $(LOCAL_PATH)/IThermalCallback.hal
|
||||
$(transform-generated-source)
|
||||
LOCAL_GENERATED_SOURCES += $(GEN)
|
||||
include $(BUILD_JAVA_LIBRARY)
|
||||
|
||||
|
||||
################################################################################
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := android.hardware.thermal-V1.1-java-static
|
||||
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
|
||||
|
||||
intermediates := $(call local-generated-sources-dir, COMMON)
|
||||
|
||||
HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
|
||||
|
||||
LOCAL_STATIC_JAVA_LIBRARIES := \
|
||||
android.hardware.thermal-V1.0-java-static \
|
||||
android.hidl.base-V1.0-java-static \
|
||||
|
||||
|
||||
#
|
||||
# Build IThermal.hal
|
||||
#
|
||||
GEN := $(intermediates)/android/hardware/thermal/V1_1/IThermal.java
|
||||
$(GEN): $(HIDL)
|
||||
$(GEN): PRIVATE_HIDL := $(HIDL)
|
||||
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IThermal.hal
|
||||
$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IThermalCallback.hal
|
||||
$(GEN): $(LOCAL_PATH)/IThermalCallback.hal
|
||||
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
|
||||
$(GEN): PRIVATE_CUSTOM_TOOL = \
|
||||
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
|
||||
-Ljava \
|
||||
-randroid.hardware:hardware/interfaces \
|
||||
-randroid.hidl:system/libhidl/transport \
|
||||
android.hardware.thermal@1.1::IThermal
|
||||
|
||||
$(GEN): $(LOCAL_PATH)/IThermal.hal
|
||||
$(transform-generated-source)
|
||||
LOCAL_GENERATED_SOURCES += $(GEN)
|
||||
|
||||
#
|
||||
# Build IThermalCallback.hal
|
||||
#
|
||||
GEN := $(intermediates)/android/hardware/thermal/V1_1/IThermalCallback.java
|
||||
$(GEN): $(HIDL)
|
||||
$(GEN): PRIVATE_HIDL := $(HIDL)
|
||||
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IThermalCallback.hal
|
||||
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
|
||||
$(GEN): PRIVATE_CUSTOM_TOOL = \
|
||||
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
|
||||
-Ljava \
|
||||
-randroid.hardware:hardware/interfaces \
|
||||
-randroid.hidl:system/libhidl/transport \
|
||||
android.hardware.thermal@1.1::IThermalCallback
|
||||
|
||||
$(GEN): $(LOCAL_PATH)/IThermalCallback.hal
|
||||
$(transform-generated-source)
|
||||
LOCAL_GENERATED_SOURCES += $(GEN)
|
||||
include $(BUILD_STATIC_JAVA_LIBRARY)
|
||||
|
||||
|
||||
|
||||
include $(call all-makefiles-under,$(LOCAL_PATH))
|
31
thermal/1.1/IThermal.hal
Normal file
31
thermal/1.1/IThermal.hal
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package android.hardware.thermal@1.1;
|
||||
|
||||
import android.hardware.thermal@1.0::IThermal;
|
||||
import IThermalCallback;
|
||||
|
||||
interface IThermal extends @1.0::IThermal {
|
||||
/**
|
||||
* Register an IThermalCallback, used by the Thermal HAL
|
||||
* to send thermal events to the framework thermal service.
|
||||
*
|
||||
* @param callback the IThermalCallback to use for sending
|
||||
* thermal events, or nullptr to set no callback
|
||||
*/
|
||||
registerThermalCallback(IThermalCallback callback);
|
||||
};
|
33
thermal/1.1/IThermalCallback.hal
Normal file
33
thermal/1.1/IThermalCallback.hal
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package android.hardware.thermal@1.1;
|
||||
|
||||
import android.hardware.thermal@1.0::Temperature;
|
||||
|
||||
/**
|
||||
* IThermalCallback connects vendor code to the framework binder ThermalService.
|
||||
*/
|
||||
interface IThermalCallback {
|
||||
/**
|
||||
* Send a thermal throttling start/stop event to all ThermalService
|
||||
* thermal event listeners.
|
||||
* @param isThrottling true if device is currently throttling
|
||||
* @param temperature The temperature associated with the throttling
|
||||
* start/stop event
|
||||
*/
|
||||
oneway notifyThrottling(bool isThrottling, Temperature temperature);
|
||||
};
|
35
thermal/1.1/vts/functional/Android.bp
Normal file
35
thermal/1.1/vts/functional/Android.bp
Normal file
|
@ -0,0 +1,35 @@
|
|||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
cc_test {
|
||||
name: "VtsHalThermalV1_1TargetTest",
|
||||
defaults: ["hidl_defaults"],
|
||||
srcs: ["VtsHalThermalV1_1TargetTest.cpp"],
|
||||
shared_libs: [
|
||||
"liblog",
|
||||
"libhidlbase",
|
||||
"libhidltransport",
|
||||
"libutils",
|
||||
"android.hardware.thermal@1.0",
|
||||
"android.hardware.thermal@1.1",
|
||||
],
|
||||
static_libs: ["VtsHalHidlTargetTestBase"],
|
||||
cflags: [
|
||||
"-O0",
|
||||
"-g",
|
||||
],
|
||||
}
|
||||
|
106
thermal/1.1/vts/functional/VtsHalThermalV1_1TargetTest.cpp
Normal file
106
thermal/1.1/vts/functional/VtsHalThermalV1_1TargetTest.cpp
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <android/hardware/thermal/1.1/IThermal.h>
|
||||
#include <android/hardware/thermal/1.1/IThermalCallback.h>
|
||||
#include <android/hardware/thermal/1.0/types.h>
|
||||
|
||||
#include <VtsHalHidlTargetCallbackBase.h>
|
||||
#include <VtsHalHidlTargetTestBase.h>
|
||||
|
||||
using ::android::hardware::thermal::V1_0::Temperature;
|
||||
using ::android::hardware::thermal::V1_0::TemperatureType;
|
||||
using ::android::hardware::thermal::V1_1::IThermal;
|
||||
using ::android::hardware::thermal::V1_1::IThermalCallback;
|
||||
using ::android::hardware::Return;
|
||||
using ::android::hardware::Void;
|
||||
using ::android::sp;
|
||||
|
||||
constexpr char kCallbackNameNotifyThrottling[] = "notifyThrottling";
|
||||
static const Temperature kThrottleTemp = {
|
||||
.type = TemperatureType::CPU,
|
||||
.name = "test temperature sensor",
|
||||
.currentValue = 98.6,
|
||||
.throttlingThreshold = 58,
|
||||
.shutdownThreshold = 60,
|
||||
.vrThrottlingThreshold = 59,
|
||||
};
|
||||
|
||||
class ThermalCallbackArgs {
|
||||
public:
|
||||
bool isThrottling;
|
||||
Temperature temperature;
|
||||
};
|
||||
|
||||
// Callback class for receiving thermal event notifications from main class
|
||||
class ThermalCallback
|
||||
: public ::testing::VtsHalHidlTargetCallbackBase<ThermalCallbackArgs>,
|
||||
public IThermalCallback {
|
||||
public:
|
||||
virtual ~ThermalCallback() = default;
|
||||
|
||||
Return<void> notifyThrottling(bool isThrottling,
|
||||
const Temperature& temperature) override {
|
||||
ThermalCallbackArgs args;
|
||||
args.isThrottling = isThrottling;
|
||||
args.temperature = temperature;
|
||||
NotifyFromCallback(kCallbackNameNotifyThrottling, args);
|
||||
return Void();
|
||||
}
|
||||
};
|
||||
|
||||
// The main test class for THERMAL HIDL HAL 1.1.
|
||||
class ThermalHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
public:
|
||||
virtual void SetUp() override {
|
||||
mThermal = ::testing::VtsHalHidlTargetTestBase::getService<IThermal>();
|
||||
ASSERT_NE(mThermal, nullptr);
|
||||
mThermalCallback = new(std::nothrow) ThermalCallback();
|
||||
ASSERT_NE(mThermalCallback, nullptr);
|
||||
auto ret = mThermal->registerThermalCallback(mThermalCallback);
|
||||
ASSERT_TRUE(ret.isOk());
|
||||
}
|
||||
|
||||
virtual void TearDown() override {
|
||||
auto ret = mThermal->registerThermalCallback(nullptr);
|
||||
ASSERT_TRUE(ret.isOk());
|
||||
}
|
||||
|
||||
protected:
|
||||
sp<IThermal> mThermal;
|
||||
sp<ThermalCallback> mThermalCallback;
|
||||
}; // class ThermalHidlTest
|
||||
|
||||
// Test ThermalCallback::notifyThrottling().
|
||||
// This just calls into and back from our local ThermalCallback impl.
|
||||
// Note: a real thermal throttling event from the Thermal HAL could be
|
||||
// inadvertently received here.
|
||||
TEST_F(ThermalHidlTest, NotifyThrottlingTest) {
|
||||
auto ret = mThermalCallback->notifyThrottling(true, kThrottleTemp);
|
||||
ASSERT_TRUE(ret.isOk());
|
||||
auto res = mThermalCallback->WaitForCallback(kCallbackNameNotifyThrottling);
|
||||
EXPECT_TRUE(res.no_timeout);
|
||||
ASSERT_TRUE(res.args);
|
||||
EXPECT_EQ(true, res.args->isThrottling);
|
||||
EXPECT_EQ(kThrottleTemp, res.args->temperature);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
int status = RUN_ALL_TESTS();
|
||||
cout << "Test result = " << status << std::endl;
|
||||
return status;
|
||||
}
|
|
@ -3,4 +3,6 @@ subdirs = [
|
|||
"1.0",
|
||||
"1.0/default",
|
||||
"1.0/vts/functional",
|
||||
"1.1",
|
||||
"1.1/vts/functional",
|
||||
]
|
||||
|
|
Loading…
Reference in a new issue