Merge "vibrator: Add Vibrator HAL 1.3"

This commit is contained in:
TreeHugger Robot
2019-01-10 06:55:50 +00:00
committed by Android (Google) Code Review
5 changed files with 175 additions and 1 deletions

View File

@@ -448,7 +448,7 @@
</hal>
<hal format="hidl" optional="true">
<name>android.hardware.vibrator</name>
<version>1.0-2</version>
<version>1.0-3</version>
<interface>
<name>IVibrator</name>
<instance>default</instance>

20
vibrator/1.3/Android.bp Normal file
View File

@@ -0,0 +1,20 @@
// This file is autogenerated by hidl-gen -Landroidbp.
hidl_interface {
name: "android.hardware.vibrator@1.3",
root: "android.hardware",
vndk: {
enabled: true,
},
srcs: [
"IVibrator.hal",
],
interfaces: [
"android.hardware.vibrator@1.0",
"android.hardware.vibrator@1.1",
"android.hardware.vibrator@1.2",
"android.hidl.base@1.0",
],
gen_java: true,
}

View File

@@ -0,0 +1,44 @@
/*
* Copyright (C) 2018 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.vibrator@1.3;
import @1.0::Status;
import @1.2::IVibrator;
interface IVibrator extends @1.2::IVibrator {
/**
* Returns whether the vibrator supports control through an alternate interface.
*/
supportsExternalControl() generates (bool supports);
/**
* Enables/disables control override of vibrator to audio.
*
* When this API is set, the vibrator control should be ceded to audio system
* for haptic audio. While this is enabled, issuing of other commands to control
* the vibrator is unsupported and the resulting behavior is undefined. Amplitude
* control may or may not be supported and is reflected in the return value of
* supportsAmplitudeControl() while this is enabled. When this is disabled, the
* vibrator should resume to an off state.
*
* @param enabled Whether external control should be enabled or disabled.
* @return status Whether the command was successful or not. Must return
* Status::UNSUPPORTED_OPERATION if external control is
* not supported by the device.
*/
setExternalControl(bool enabled) generates (Status status);
};

View File

@@ -0,0 +1,29 @@
//
// Copyright (C) 2018 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: "VtsHalVibratorV1_3TargetTest",
defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalVibratorV1_3TargetTest.cpp"],
static_libs: [
"android.hardware.vibrator@1.0",
"android.hardware.vibrator@1.1",
"android.hardware.vibrator@1.2",
"android.hardware.vibrator@1.3",
],
test_suites: ["general-tests"],
}

View File

@@ -0,0 +1,81 @@
/*
* Copyright (C) 2016 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.
*/
#define LOG_TAG "vibrator_hidl_hal_test"
#include <VtsHalHidlTargetTestBase.h>
#include <VtsHalHidlTargetTestEnvBase.h>
#include <android-base/logging.h>
#include <android/hardware/vibrator/1.0/types.h>
#include <android/hardware/vibrator/1.3/IVibrator.h>
#include <unistd.h>
using ::android::sp;
using ::android::hardware::vibrator::V1_0::Status;
using ::android::hardware::vibrator::V1_3::IVibrator;
// Test environment for Vibrator HIDL HAL.
class VibratorHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase {
public:
// get the test environment singleton
static VibratorHidlEnvironment* Instance() {
static VibratorHidlEnvironment* instance = new VibratorHidlEnvironment;
return instance;
}
virtual void registerTestServices() override { registerTestService<IVibrator>(); }
private:
VibratorHidlEnvironment() {}
};
// The main test class for VIBRATOR HIDL HAL 1.3.
class VibratorHidlTest_1_3 : public ::testing::VtsHalHidlTargetTestBase {
public:
virtual void SetUp() override {
vibrator = ::testing::VtsHalHidlTargetTestBase::getService<IVibrator>(
VibratorHidlEnvironment::Instance()->getServiceName<IVibrator>());
ASSERT_NE(vibrator, nullptr);
}
virtual void TearDown() override {}
sp<IVibrator> vibrator;
};
TEST_F(VibratorHidlTest_1_3, ChangeVibrationalExternalControl) {
if (vibrator->supportsExternalControl()) {
EXPECT_EQ(Status::OK, vibrator->setExternalControl(true));
sleep(1);
EXPECT_EQ(Status::OK, vibrator->setExternalControl(false));
sleep(1);
}
}
TEST_F(VibratorHidlTest_1_3, SetExternalControlReturnUnsupportedOperationIfNotSupported) {
if (!vibrator->supportsExternalControl()) {
EXPECT_EQ(Status::UNSUPPORTED_OPERATION, vibrator->setExternalControl(true));
}
}
int main(int argc, char** argv) {
::testing::AddGlobalTestEnvironment(VibratorHidlEnvironment::Instance());
::testing::InitGoogleTest(&argc, argv);
VibratorHidlEnvironment::Instance()->init(&argc, argv);
int status = RUN_ALL_TESTS();
LOG(INFO) << "Test result = " << status;
return status;
}