18e947fe7161e65625e879a34daf0fc16307e8670Elliott Hughes#include <errno.h> 28e947fe7161e65625e879a34daf0fc16307e8670Elliott Hughes#include <fcntl.h> 38e947fe7161e65625e879a34daf0fc16307e8670Elliott Hughes#include <linux/input.h> 48e947fe7161e65625e879a34daf0fc16307e8670Elliott Hughes#include <stdint.h> 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdio.h> 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdlib.h> 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <string.h> 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/ioctl.h> 90badbd6565fea17be39d82eba858fa76d28920a4Elliott Hughes#include <unistd.h> 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint sendevent_main(int argc, char *argv[]) 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd; 14aa907768af7ba9e29901d356cdcac6a436970323Mark Salyzyn ssize_t ret; 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int version; 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct input_event event; 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(argc != 5) { 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fprintf(stderr, "use: %s device type code value\n", argv[0]); 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 1; 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fd = open(argv[1], O_RDWR); 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(fd < 0) { 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fprintf(stderr, "could not open %s, %s\n", argv[optind], strerror(errno)); 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 1; 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (ioctl(fd, EVIOCGVERSION, &version)) { 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fprintf(stderr, "could not get driver version for %s, %s\n", argv[optind], strerror(errno)); 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 1; 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project memset(&event, 0, sizeof(event)); 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project event.type = atoi(argv[2]); 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project event.code = atoi(argv[3]); 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project event.value = atoi(argv[4]); 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ret = write(fd, &event, sizeof(event)); 37aa907768af7ba9e29901d356cdcac6a436970323Mark Salyzyn if(ret < (ssize_t) sizeof(event)) { 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fprintf(stderr, "write event failed, %s\n", strerror(errno)); 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return -1; 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 43