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