我正在使用鼠标 USB 驱动程序,我真的不知道如何区分和使用发送的/dev/input/mouse0
信息/dev/input/mice
在谷歌上搜索后,我发现了一些关于使用的代码/dev/input/mice
int fd, bytes;
unsigned char data[4];
const char *pDevice = "/dev/input/mice";
// Open Mouse
fd = open(pDevice, O_RDWR);
if(fd == -1)
{
printf("ERROR Opening %s\n", pDevice);
return -1;
}
int left, middle, right;
signed char x, y;
// Read Mouse
bytes = read(fd, data, sizeof(data));
if(bytes > 0)
{
left = data[0] & 0x1;
right = data[0] & 0x2;
middle = data[0] & 0x4;
x = data[1];
y = data[2];
printf("x=%d, y=%d, left=%d, middle=%d, right=%d\n", x, y, left, middle, right);
if(left)
return left;
if(right)
return right;
if(middle)
return middle;
}
return 0;
该程序有效,但未获得有关滚轮滚动的任何信息
我能够找到一个使用的程序/dev/input/event0
int fd;
struct input_event ev
const char* pFile = "/dev/input/event0";
fd = open(pFile, O_RDONLY);
if(fd == -1)
{
printf("ERROR Opening %s\n", pFile);
return -1;
}
read(fd, &ev, sizeof(ev));
std::cout << "type : " << ev.type << " code : " << ev.code << " value : " << ev.value << std::endl;
close(fd);
return 0;
但是对角线移动存在问题,因为这个文件同时只保存了1个坐标,并且X坐标优先于Y;所以当你想在 Y 轴上移动鼠标时很烦人
但是,我没有找到任何代码可以使用/dev/input/mouse0
,那么这个文件中保存了哪些信息?
所以我的问题是: 1. 保存了哪些信息/dev/input/mouse0
?2. 如何在不打开2个文件的情况下读取所有鼠标信息,并且没有优先级问题(滚动+ X/Y轴移动)?
Linux 输入子系统用户空间 API 文档回答了您的问题。通常,其中的所有文件
/dev/input/
都由将设备事件分发到用户空间的事件处理程序提供。/dev/input/mouse0 和 /dev/input/mice 是什么?
来自介绍(我强调的重要部分)
...这也可能是您看不到鼠标滚轮事件的原因。由于它是遗留程序的“黑客”,因此如果您不必使用它,则不应使用它。
如何读取所有鼠标信息 [...]?
使用evdev
/dev/input/eventX
提供的相应文件(事件处理程序,不要与 xorg-driver evdev 混淆)。这就是您的第二个代码片段显然所做的。...但是优先级问题呢?
没有优先级问题。根据2.2。事件代码:
因为在一个事件之前的所有连续事件
SYN_REPORT
都可以被认为是同时发生的,所以它们被报告的顺序并不重要。例如(使用我在 github 上找到的这个程序):
如您所见,并发事件不仅由事件分隔
SYN_REPORT
,而且它们还具有相同的时间戳。顺便说一句,您还可以使用
evtest
来查看设备生成的事件。如果您对它的工作原理感兴趣,可以在这里找到它的源代码。就我而言,尝试执行操作系统的鼠标事件。我的代码
app.js
是:我之前在跑步
node app.js
所以它给了我以下错误
sudo
所以像这样简单地运行node app.js
不是它给出以下错误