blob: 8bd369118e96652e4f2178d80aee2527652c58c3 [file] [log] [blame]
Bing Jiang64847fc2021-11-09 15:42:10 +08001#include <fcntl.h>
2#include <linux/input.h>
3#include <linux/uinput.h>
yanmei.yang17bcb2b2022-01-04 17:36:39 +08004#include <stdio.h>
5#include <stdlib.h>
6#include <string.h>
7#include <sys/stat.h>
Bing Jiang64847fc2021-11-09 15:42:10 +08008#include <sys/time.h>
9#include <sys/types.h>
10#include <unistd.h>
11
yanmei.yang17bcb2b2022-01-04 17:36:39 +080012void simulate_key(int fd, int kval) {
Bing Jiang64847fc2021-11-09 15:42:10 +080013 struct input_event event;
14 int ret;
15
yanmei.yang17bcb2b2022-01-04 17:36:39 +080016 gettimeofday(&event.time, 0);
Bing Jiang64847fc2021-11-09 15:42:10 +080017 event.type = EV_KEY;
18 event.code = kval;
19 event.value = 1;
20 ret = write(fd, &event, sizeof(event));
21
22 event.type = EV_SYN;
23 event.code = SYN_REPORT;
24 event.value = 0;
25 ret = write(fd, &event, sizeof(event));
26
27 memset(&event, 0, sizeof(event));
28 gettimeofday(&event.time, NULL);
29 event.type = EV_KEY;
30 event.code = kval;
31 event.value = 0;
32 ret = write(fd, &event, sizeof(event));
33
34 event.type = EV_SYN;
35 event.code = SYN_REPORT;
36 event.value = 0;
37 ret = write(fd, &event, sizeof(event));
38}
39
yanmei.yang17bcb2b2022-01-04 17:36:39 +080040int main(int argc, char *argv[]) {
Bing Jiang64847fc2021-11-09 15:42:10 +080041 unsigned int keycode;
42 int fd_kbd;
kirk.wangd6c124f2024-07-31 15:43:46 +080043 char eventname[32] = {0};
yanmei.yang17bcb2b2022-01-04 17:36:39 +080044 FILE *fp;
45 const char *deviceInfo = "/proc/bus/input/devices";
46
47 char *p;
yanmei.yang51b906c2022-03-17 15:28:38 +080048 char *buf = 0;
49 size_t readLen = 0;
yanmei.yang17bcb2b2022-01-04 17:36:39 +080050
51 unsigned char foundDev = 0;
Bing Jiang64847fc2021-11-09 15:42:10 +080052
53 if (argc != 2) {
54 printf("Usage: simulate_key keycode\n");
55 return -1;
56 }
57
yanmei.yang17bcb2b2022-01-04 17:36:39 +080058 fp = fopen(deviceInfo, "r");
59 if (fp == NULL) {
60 printf("error to open input devices info\n");
61 return -1;
Bing Jiang64847fc2021-11-09 15:42:10 +080062 }
yanmei.yang17bcb2b2022-01-04 17:36:39 +080063
64 while ((readLen = getline(&buf, &readLen, fp)) != -1) {
65 if (buf) {
66 if (!foundDev) {
67 p = strstr(buf, "N: Name=\"ir_keypad\"");
68 if (p != NULL) {
69 foundDev = 1;
70 }
71 } else {
72 p = strstr(buf, "H: Handlers=");
73 if (p != NULL) {
74 p = strstr(buf, "event");
75 char event[8];
76 sscanf(p, "%s", event);
77 sprintf(eventname, "/dev/input/%s", event);
78 break;
79 }
80 }
81 }
82 }
83
84 if (buf) {
85 free(buf);
86 buf = NULL;
87 }
88
89 fclose(fp);
90
91 if (!foundDev) {
92 printf("no input device found\n");
93 return -1;
94 }
95
96 fd_kbd = open(eventname, O_RDWR);
97
Bing Jiang64847fc2021-11-09 15:42:10 +080098 if (fd_kbd <= 0) {
yanmei.yang17bcb2b2022-01-04 17:36:39 +080099 printf("error open keyboard %s\n", eventname);
Bing Jiang64847fc2021-11-09 15:42:10 +0800100 return -1;
101 }
102
103 keycode = strtoul(argv[1], NULL, 0);
yanmei.yang17bcb2b2022-01-04 17:36:39 +0800104 printf("send simulate event %s keycode: %d (0x%x)!\n", eventname, keycode,
105 keycode);
Bing Jiang64847fc2021-11-09 15:42:10 +0800106 simulate_key(fd_kbd, keycode);
107
108 close(fd_kbd);
109}