Add default implementation of Vibrator HAL

Test: Builds, boots, vibrator works on bullhead
Change-Id: I9c7de913d1b565bdc46a3b99a799fd8ba09b06a4
This commit is contained in:
Prashant Malani
2016-09-30 16:17:16 -07:00
parent 928912f894
commit 89fc3bed2a
4 changed files with 166 additions and 0 deletions

View File

@@ -12,4 +12,5 @@ subdirs = [
"tests/pointer/1.0",
"wifi/1.0",
"wifi/supplicant/1.0",
"vibrator/1.0",
]

View File

@@ -0,0 +1,33 @@
#
# 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.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.vibrator@1.0-impl
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_SRC_FILES := \
Vibrator.cpp \
LOCAL_SHARED_LIBRARIES := \
libhidl \
liblog \
libhwbinder \
libutils \
libhardware \
android.hardware.vibrator@1.0
include $(BUILD_SHARED_LIBRARY)

View File

@@ -0,0 +1,76 @@
/*
* 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 "VibratorService"
#include <hardware/hardware.h>
#include <hardware/vibrator.h>
#include "Vibrator.h"
namespace android {
namespace hardware {
namespace vibrator {
namespace V1_0 {
namespace implementation {
Vibrator::Vibrator(vibrator_device_t *device) : mDevice(device) {}
// Methods from ::android::hardware::vibrator::V1_0::IVibrator follow.
Return<Status> Vibrator::on(uint32_t timeout_ms) {
int32_t ret = mDevice->vibrator_on(mDevice, timeout_ms);
if (ret != 0) {
ALOGE("on command failed : %s", strerror(-ret));
return Status::ERR;
}
return Status::OK;
}
Return<Status> Vibrator::off() {
int32_t ret = mDevice->vibrator_off(mDevice);
if (ret != 0) {
ALOGE("off command failed : %s", strerror(-ret));
return Status::ERR;
}
return Status::OK;
}
IVibrator* HIDL_FETCH_IVibrator(const char *hal) {
vibrator_device_t *vib_device;
const hw_module_t *hw_module = nullptr;
int ret = hw_get_module(hal, &hw_module);
if (ret == 0) {
ret = vibrator_open(hw_module, &vib_device);
if (ret != 0) {
ALOGE("vibrator_open %s failed: %d", hal, ret);
}
} else {
ALOGE("hw_get_module %s failed: %d", hal, ret);
}
if (ret == 0) {
return new Vibrator(vib_device);
} else {
ALOGE("Passthrough failed to open legacy HAL.");
return nullptr;
}
}
} // namespace implementation
} // namespace V1_0
} // namespace vibrator
} // namespace hardware
} // namespace android

View File

@@ -0,0 +1,56 @@
/*
* 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.
*/
#ifndef HIDL_GENERATED_android_hardware_vibrator_V1_0_Vibrator_H_
#define HIDL_GENERATED_android_hardware_vibrator_V1_0_Vibrator_H_
#include <android/hardware/vibrator/1.0/IVibrator.h>
#include <hidl/Status.h>
#include <hidl/MQDescriptor.h>
namespace android {
namespace hardware {
namespace vibrator {
namespace V1_0 {
namespace implementation {
using ::android::hardware::vibrator::V1_0::IVibrator;
using ::android::hardware::vibrator::V1_0::Status;
using ::android::hardware::Return;
using ::android::hardware::Void;
using ::android::hardware::hidl_vec;
using ::android::hardware::hidl_string;
using ::android::sp;
struct Vibrator : public IVibrator {
Vibrator(vibrator_device_t *device);
// Methods from ::android::hardware::vibrator::V1_0::IVibrator follow.
Return<Status> on(uint32_t timeoutMs) override;
Return<Status> off() override;
private:
vibrator_device_t *mDevice;
};
extern "C" IVibrator* HIDL_FETCH_IVibrator(const char* name);
} // namespace implementation
} // namespace V1_0
} // namespace vibrator
} // namespace hardware
} // namespace android
#endif // HIDL_GENERATED_android_hardware_vibrator_V1_0_Vibrator_H_