1 /*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #include <hardware_legacy/vibrator.h>
17 #include "qemu.h"
18
19 #include <stdio.h>
20 #include <unistd.h>
21 #include <fcntl.h>
22 #include <errno.h>
23
24 #define THE_DEVICE "/sys/class/timed_output/vibrator/enable"
25
vibrator_exists()26 int vibrator_exists()
27 {
28 int fd;
29
30 #ifdef QEMU_HARDWARE
31 if (qemu_check()) {
32 return 1;
33 }
34 #endif
35
36 fd = open(THE_DEVICE, O_RDWR);
37 if(fd < 0)
38 return 0;
39 close(fd);
40 return 1;
41 }
42
sendit(int timeout_ms)43 static int sendit(int timeout_ms)
44 {
45 int nwr, ret, fd;
46 char value[20];
47
48 #ifdef QEMU_HARDWARE
49 if (qemu_check()) {
50 return qemu_control_command( "vibrator:%d", timeout_ms );
51 }
52 #endif
53
54 fd = open(THE_DEVICE, O_RDWR);
55 if(fd < 0)
56 return errno;
57
58 nwr = sprintf(value, "%d\n", timeout_ms);
59 ret = write(fd, value, nwr);
60
61 close(fd);
62
63 return (ret == nwr) ? 0 : -1;
64 }
65
vibrator_on(int timeout_ms)66 int vibrator_on(int timeout_ms)
67 {
68 /* constant on, up to maximum allowed time */
69 return sendit(timeout_ms);
70 }
71
vibrator_off()72 int vibrator_off()
73 {
74 return sendit(0);
75 }
76