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 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 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 66 int vibrator_on(int timeout_ms) 67 { 68 /* constant on, up to maximum allowed time */ 69 return sendit(timeout_ms); 70 } 71 72 int vibrator_off() 73 { 74 return sendit(0); 75 } 76