Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f153263 authored by Harpreet "Eli" Sangha's avatar Harpreet "Eli" Sangha
Browse files

vibrator: Add Vibrator HAL 1.3



Add API for enabling/disabling external control of vibrator.

Bug: 117835666
Test: Sanity Check Via 'cmd vibrator'
Change-Id: I5342ca9feba1811efcb5483668858db3f70ad686
Signed-off-by: default avatarHarpreet "Eli" Sangha <eliptus@google.com>
parent 9b1689da
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -439,7 +439,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 −0
Original line number Diff line number Diff line
// 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,
}
+44 −0
Original line number Diff line number Diff line
/*
 * 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);
};
+29 −0
Original line number Diff line number Diff line
//
// 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"],
}
+81 −0
Original line number Diff line number Diff line
/*
 * 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;
}