1022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker/*
2022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * Copyright (C) 2013 The Android Open Source Project
3022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker *
4022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * Licensed under the Apache License, Version 2.0 (the "License");
5022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * you may not use this file except in compliance with the License.
6022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * You may obtain a copy of the License at
7022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker *
8022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker *      http://www.apache.org/licenses/LICENSE-2.0
9022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker *
10022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * Unless required by applicable law or agreed to in writing, software
11022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * distributed under the License is distributed on an "AS IS" BASIS,
12022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * See the License for the specific language governing permissions and
14022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * limitations under the License.
15022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker */
16022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
17022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker#ifndef _HARDWARE_VIBRATOR_H
18022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker#define _HARDWARE_VIBRATOR_H
19022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
20022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker#include <hardware/hardware.h>
21022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
22022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker__BEGIN_DECLS
23022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
24022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker#define VIBRATOR_API_VERSION HARDWARE_MODULE_API_VERSION(1,0)
25022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
26022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker/**
27022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * The id of this module
28022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker */
29022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker#define VIBRATOR_HARDWARE_MODULE_ID "vibrator"
30022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
31022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker/**
32022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker * The id of the main vibrator device
33022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker */
34022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker#define VIBRATOR_DEVICE_ID_MAIN "main_vibrator"
35022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
36022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Beckerstruct vibrator_device;
37022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Beckertypedef struct vibrator_device {
3884d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles    /**
3984d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * Common methods of the vibrator device.  This *must* be the first member of
4084d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * vibrator_device as users of this structure will cast a hw_device_t to
4184d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * vibrator_device pointer in contexts where it's known the hw_device_t references a
4284d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * vibrator_device.
4384d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     */
4484d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles    struct hw_device_t common;
45022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
46022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker    /** Turn on vibrator
47022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     *
48022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     * What happens when this function is called while the the timeout of a
49022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     * previous call has not expired is implementation dependent.
50022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     *
51022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     * @param timeout_ms number of milliseconds to vibrate
52022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     *
53022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     * @return 0 in case of success, negative errno code else
54022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     */
55022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker    int (*vibrator_on)(struct vibrator_device* vibradev, unsigned int timeout_ms);
56022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
57022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker    /** Turn off vibrator
58022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     *
59022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     * It is not guaranteed that the vibrator will be immediately stopped: the
60022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     * behaviour is implementation dependent.
61022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     *
62022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     * @return 0 in case of success, negative errno code else
63022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker     */
64022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker    int (*vibrator_off)(struct vibrator_device* vibradev);
65022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker} vibrator_device_t;
66022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
67022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Beckerstatic inline int vibrator_open(const struct hw_module_t* module, vibrator_device_t** device)
68022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker{
69022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker    return module->methods->open(module, VIBRATOR_DEVICE_ID_MAIN, (struct hw_device_t**)device);
70022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker}
71022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
72022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker__END_DECLS
73022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker
74022224fbf883bb1600a69e4537b9a80eed35fbb8Vincent Becker#endif  // _HARDWARE_VIBRATOR_H
75