這是二進制原始碼 會與當前觸摸屏操作有沖突 即搶屏, 需要把創建的虛擬設備強制替換當前觸摸屏設備才行 有懂的嗎?
#include <linux/input.h>
#include <linux/uinput.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdint.h>
#include <stdio.h>
int reportkey(int fd, uint16_t type, uint16_t keycode, int32_t value)
{
int ret;
struct input_event ev;
memset(&ev, 0, sizeof(struct input_event));
ev.type = type;
ev.code = keycode;
ev.value = value;
ret = write(fd, &ev, sizeof(struct input_event));
if (ret < 0) {
printf("report key error!\n");
return ret;
}
/* printf("key is %d %d\n", keycode, value);*/
return 0;
}
int main(void)
{
struct uinput_user_dev uidev;
int fd, ret;
fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
if (fd < 0) {
return fd;
}
//配置設備屬性
ioctl(fd, UI_SET_EVBIT, EV_ABS); //支持觸摸
ioctl(fd, UI_SET_EVBIT, EV_SYN); //支持同步,用于report
// Touch
ioctl (fd, UI_SET_EVBIT, EV_ABS); //支持觸摸
ioctl (fd, UI_SET_ABSBIT, ABS_MT_SLOT);
ioctl (fd, UI_SET_ABSBIT, ABS_MT_TOUCH_MAJOR);
ioctl (fd, UI_SET_ABSBIT, ABS_MT_POSITION_X);
ioctl (fd, UI_SET_ABSBIT, ABS_MT_POSITION_Y);
ioctl (fd, UI_SET_ABSBIT, ABS_MT_TRACKING_ID);
ioctl (fd, UI_SET_ABSBIT, ABS_MT_PRESSURE);
ioctl (fd, UI_SET_PROPBIT, INPUT_PROP_DIRECT);
memset(&uidev, 0, sizeof(struct uinput_user_dev));
snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput-xiaohei");
uidev.id.bustype = BUS_USB;
uidev.id.vendor = 0x1234;
uidev.id.product = 0xfedc;
uidev.id.version = 1;
uidev.absmin[ABS_MT_POSITION_X] = 0;
uidev.absmax[ABS_MT_POSITION_X] = 1920;//坐標x的最大
uidev.absfuzz[ABS_MT_POSITION_X] = 0;
uidev.absflat[ABS_MT_POSITION_X] = 0;
uidev.absmin[ABS_MT_POSITION_Y] = 0;
uidev.absmax[ABS_MT_POSITION_Y] = 1080;//坐標y的最
uidev.absfuzz[ABS_MT_POSITION_Y] = 0;
uidev.absflat[ABS_MT_POSITION_Y] = 0;
uidev.absmin[ABS_MT_PRESSURE] = 0;
uidev.absmax[ABS_MT_PRESSURE] = 100;//觸摸壓力的最大最小值
uidev.absfuzz[ABS_MT_PRESSURE] = 0;
uidev.absflat[ABS_MT_PRESSURE] = 0;
uidev.absmax[ABS_MT_SLOT] = 9; //同時支持最多9個觸點
uidev.absmax[ABS_MT_TOUCH_MAJOR] = 16; //與屏接觸面的最大值
uidev.absmax[ABS_MT_TRACKING_ID] = 65535; //按鍵碼ID累計疊加最大值
ret = write(fd, &uidev, sizeof(struct uinput_user_dev));
ret = ioctl(fd, UI_DEV_CREATE);
if (ret < 0) {
close(fd);
return ret;
}
while (1) {
reportkey(fd,3,47,5);
reportkey(fd,3,57,101);
reportkey(fd,3,58,1000);
reportkey(fd,1,330,1);
reportkey(fd,3,53,600);
reportkey(fd,3,54,600);
reportkey(fd,0,0,0);
reportkey(fd,3,47,5);
reportkey(fd,3,53,900);
reportkey(fd,3,54,900);
reportkey(fd,0,0,0);
reportkey(fd,3,47,5);
reportkey(fd,3,57,101);
reportkey(fd,3,58,0);
reportkey(fd,3,57,4294967295);
reportkey(fd,0,0,0);
sleep(1);
}
ioctl(fd, UI_DEV_DESTROY);
close(fd);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270203.html
標籤:Java相關
下一篇:各種形式的日期格式標準化
