blob: 5e2dc9adf2dfac486f83928df28451c73d1a1ecd [file] [log] [blame]
/*
* Copyright (C) 2013 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 <errno.h>
#include <stdlib.h>
#include <cutils/log.h>
#define QEMU_HARDWARE
#include <qemu.h>
#include <hardware/hardware.h>
#include <hardware/vibrator.h>
static int sendit(unsigned int timeout_ms)
{
if (qemu_check()) {
if (qemu_control_command("vibrator:%u", timeout_ms) < 0) {
return -errno;
}
return 0;
}
return -ENOSYS;
}
static int qemu_vibra_on(vibrator_device_t* vibradev __unused, unsigned int timeout_ms)
{
return sendit(timeout_ms);
}
static int qemu_vibra_off(vibrator_device_t* vibradev __unused)
{
return sendit(0);
}
static int qemu_vibra_close(hw_device_t *device)
{
free(device);
return 0;
}
static int qemu_vibra_open(const hw_module_t* module, const char* id __unused,
hw_device_t** device) {
vibrator_device_t *vibradev = calloc(1, sizeof(vibrator_device_t));
if (!vibradev) {
ALOGE("No memory available to create Goldfish vibrator device!");
return -ENOMEM;
}
vibradev->common.tag = HARDWARE_DEVICE_TAG;
vibradev->common.module = (hw_module_t *) module;
vibradev->common.version = HARDWARE_DEVICE_API_VERSION(1,0);
vibradev->common.close = qemu_vibra_close;
vibradev->vibrator_on = qemu_vibra_on;
vibradev->vibrator_off = qemu_vibra_off;
*device = (hw_device_t *) vibradev;
return 0;
}
/*===========================*/
/* Emulator vibrator module */
/*===========================*/
static struct hw_module_methods_t qemu_vibrator_module_methods = {
.open = qemu_vibra_open,
};
struct hw_module_t HAL_MODULE_INFO_SYM = {
.tag = HARDWARE_MODULE_TAG,
.module_api_version = VIBRATOR_API_VERSION,
.hal_api_version = HARDWARE_HAL_API_VERSION,
.id = VIBRATOR_HARDWARE_MODULE_ID,
.name = "Goldfish vibrator module",
.author = "The Android Open Source Project",
.methods = &qemu_vibrator_module_methods,
};