从EV_KEY
文件中读取文件时,我只希望接收224
事件,代码为225
和/dev/input/event*
。我该怎么办?
据我所知,我需要运行ioctl(fd, EVIOCSMASK, &mask)
,但我不知道如何根据自己的规范设置struct input_mask
。
我尝试将type
设置为EV_KEY
,但这似乎过滤了 EV_KEY
,并且如果我在codes_*
中设置了任何内容(例如作为代码数组和指向它的指针),则ioctl
返回-1
。
答案 0 :(得分:1)
以下是设置遮罩的示例
struct input_mask mask;
bitset_put(types, KEY_BRIGHTNESSDOWN); // event ID 224
bitset_put(types, KEY_BRIGHTNESSUP); // event ID 225
mask = (struct input_mask) {
.type = EV_KEY,
.codes_size = sizeof(types),
.codes_ptr = PTR_TO_UINT64(types),
};
if (ioctl(b->fd, EVIOCSMASK, &mask) < 0)
{
//log the error here and check errno to get a nice description about the error
}...
如您所见,代码很容易理解,您声明要接收的事件类型(此处为“ EV_KEY”),然后声明一个数组以过滤出可以获取here的事件
答案 1 :(得分:1)
事件掩码是每个客户端的掩码,用于指定哪些事件是 转发给客户。每个事件代码用一个位表示 在事件蒙版中。如果该位置1,则事件被传递给客户端 通常。
换句话说:
FragmentManager fm = getSupportFragmentManager();
switch (item.getItemId()) {
case R.id.menuitemdashboard:
fm.beginTransaction().replace(R.id.viewContainer, new dashboard()).commit();
break;
case R.id.menuitemlogout:
//TODO replace logout with fragment
fm.beginTransaction().replace(R.id.viewContainer, //*log out*/).commit();
break;
case R.id.menuitemprofile:
//TODO replace profile with fragment
fm.beginTransaction().replace(R.id.viewContainer, //*profile*/).commit();
break;
case R.id.menuitemreports:
//TODO replace reports with fragment
fm.beginTransaction().replace(R.id.viewContainer, //*reports*/).commit();
break;
case R.id.menuitemvisits:
fmbeginTransaction().replace(R.id.viewContainer, new visits()).commit();
break;
}