input使用:按音量键唤醒系统
来源:互联网 发布:idc虚拟主机源码 编辑:程序博客网 时间:2024/05/19 17:56
链接地址:input遇到的问题
在input上报数据的时候,首先需要设置的是上报的type,然后需要对相应type的code进行置位,比如要上报按键值和绝对值,我们需要如下设置:
set_bit(EV_ABS, ts->input_dev->evbit);
set_bit(EV_KEY, ts->input_dev->evbit);
我们可以看到input_dev这个结构体:
struct input_dev {
......
unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];
unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
unsigned long swbit[BITS_TO_LONGS(SW_CNT)];
......
}
这里面的都相当于是标志位,支持什么样的上报类型,就对evbit进行置位。
然后对于按键,支持哪些按键值呢?这个我们又需要对keybit进行置位,比如我们支持power键,那么需要做如下设置:
set_bit(KEY_POWER, ts->input_dev->keybit);
对绝对值的设置:
__set_bit(ABS_X, ts->input_dev->absbit);
__set_bit(ABS_Y, ts->input_dev->absbit);
__set_bit(ABS_PRESSURE, ts->input_dev->absbit);
然后绝对值还需要设置他的范围,精细度等:
input_set_abs_params(ts->input_dev, ABS_X, 0, 600, 0, 0);
input_set_abs_params(ts->input_dev, ABS_Y, 0, 500, 0, 0);
input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 512, 0, 0);
OK,当作为上面的步骤,现在就可以上报数据了,就可以通过getevent来查看。
有的时候我们发现驱动代码里面已经上报了某个值,但是在getevent里面没有看到,这个有可能是上报的值都是相同的,只要是相同的值,都不再重复上报。
继续补充:
现在项目需要,按音量键的时候是需要唤醒系统的,gpio肯定是需要具有唤醒功能的,然后设置相应的按键具有唤醒功能,如下:
这么修改之后,我想系统应该是可以唤醒系统了(至于是否亮屏这个是上层处理的事情),现在遇到的问题是刚按下按键,手未松开就发现上报了up事件(用getevent查看)。而我们在按键驱动文件里面加打印信息,并没有发现有任何上报的情况。我们知道,所有的input消息,最后都是通过evdev.c这个文件里面的evdev_event()这个函数来上报的,我们在这里发现了有上报的调用,通过dump_stack()发现了问题。原来是input子系统在resume的时候,对按键进行了复位,当它发现这个按键上报了down之后,立刻复位上报了up事件。
input_dev_resume()--->input_reset_device()--->input_dev_release_keys()--->input_pass_event(dev, EV_KEY, code, 0);
这下总算找到了原因,把这个地方屏蔽了就OK了。而且我们发现如下的一下同步信息,也是这里产生的:
/dev/input/event0: EV_SYN SYN_REPORT 00000001
/dev/input/event4: EV_SYN SYN_REPORT 00000001
/dev/input/event3: EV_SYN SYN_REPORT 00000001
/dev/input/event2: EV_SYN SYN_REPORT 00000001
/dev/input/event1: EV_SYN SYN_REPORT 00000001
/dev/input/event6: EV_SYN SYN_REPORT 00000001
我们驱动代码里面,同步信息都是上报的0,这里的1也是reset上报的。当然不知道这里屏蔽了有没有其他的影响,哪位大牛知道有什么问题也可以告诉我...
- input使用:按音量键唤醒系统
- 音量键唤醒教程
- 音量键唤醒屏幕方法技术
- 音量键唤醒屏幕--解决电源键坏掉的情况
- 【Android】使用Intent调用系统其它程序,使用onKeyDown对音量键的监听,长按事件
- 使用AudioManager设置Android系统的音量
- 如何做到长按power键唤醒系统!
- Windows Mobile 系统如何修改为按任意键唤醒?
- [绍棠] 播放器检测系统音量键调节音量的变化并自定义音量界面
- windows下如何获取系统音量(使用mixer api)
- 006 音量上下键调节app使用
- 使用windows api 唤醒睡眠的系统(win7)
- Linux下 使用 中断唤醒 已经suspend的 系统
- Android系统的改进(二) -- 长按音量键作为切换歌曲/频道的快捷键
- 调节系统音量(话筒)
- 初始化系统音量参数
- [源代码]系统音量控制
- 获取系统音量
- tomcat startup闪退
- textField输入手机号,只能输入数字,且不超过11位。(无正则)
- 角点检测算子(Harris, KLT, SIFT,SUSAN)
- Qt树形控件QTreeView使用
- MII RMII SMII GMII
- input使用:按音量键唤醒系统
- Others, Academic
- cornerstone破解
- 文件分包传输时序图
- iTextSharp 纸张横向
- 分享个阿里通信图标库
- 如何用网络管理软件灵活管理复杂庞大的网络
- BitSet 设置及取值 求交集和求并集
- 将DataGridView选中行对象(DataGridViewRow)转为DataTable的行对象